diff --git a/Analysis/0405_unprotected_left/0405_unprotected_left.ipynb b/Analysis/0405_unprotected_left/0405_unprotected_left.ipynb
new file mode 100644
index 000000000..2a2fb7b95
--- /dev/null
+++ b/Analysis/0405_unprotected_left/0405_unprotected_left.ipynb
@@ -0,0 +1,1213 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import pandas as pd\n",
+ "\n",
+ "import sys, copy\n",
+ "from datetime import datetime\n",
+ "sys.path.append('../../Scripts')\n",
+ "\n",
+ "from preprocess_daily import DailyPreprocessor\n",
+ "\n",
+ "from generate_signals import SignalGenerator"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "self = DailyPreprocessor()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1. 데이터를 로드합니다.\n",
+ "1-1. 네트워크가 로드되었습니다.\n",
+ "1-2. 테이블들이 로드되었습니다.\n",
+ "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
+ "1-4. 테이블들의 무결성 검사를 완료했습니다.\n"
+ ]
+ }
+ ],
+ "source": [
+ "self.load_data()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:15<00:00, 1138.40it/s]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# 2-1-1~7\n",
+ "self.make_match1()\n",
+ "self.make_match2()\n",
+ "self.make_match3()\n",
+ "self.make_match4()\n",
+ "self.make_match5()\n",
+ "self.make_match6()\n",
+ "self.make_matching()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2-2. 비보호우회전(g)을 배정했습니다.\n"
+ ]
+ }
+ ],
+ "source": [
+ "match6 = self.match6.copy()\n",
+ "matching = self.matching.copy()\n",
+ "self.initialize_state()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 112,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "self.match6 = match6\n",
+ "self.matching=matching"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 100,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2-2. 비보호우회전(g)을 배정했습니다.\n"
+ ]
+ }
+ ],
+ "source": [
+ "self.initialize_state()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 101,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " inter_no | \n",
+ " phase_no | \n",
+ " ring_type | \n",
+ " move_no | \n",
+ " inc_dir | \n",
+ " out_dir | \n",
+ " inc_angle | \n",
+ " out_angle | \n",
+ " inc_edge | \n",
+ " out_edge | \n",
+ " node_id | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 179 | \n",
+ " 004 | \n",
+ " -571542797_02 | \n",
+ " 571500487_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 003 | \n",
+ " 176 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 001 | \n",
+ " 095 | \n",
+ " -571500487_01 | \n",
+ " 571545870_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 179 | \n",
+ " 270 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 090 | \n",
+ " 270 | \n",
+ " 571545870_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 210 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 2 | \n",
+ " 서 | \n",
+ " 동 | \n",
+ " 270 | \n",
+ " 090 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 210 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 359 | \n",
+ " 090 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 210 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 000 | \n",
+ " 180 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 210 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 180 | \n",
+ " 000 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " 210 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 180 | \n",
+ " 270 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
116 rows × 11 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
+ "0 175 1 A 8 남 북 179 004 \n",
+ "1 175 1 B 4 북 남 003 176 \n",
+ "2 175 2 A 7 북 동 001 095 \n",
+ "3 175 2 B 3 남 서 179 270 \n",
+ "4 175 3 A 6 동 서 090 270 \n",
+ ".. ... ... ... ... ... ... ... ... \n",
+ "3 210 2 B 2 서 동 270 090 \n",
+ "4 210 3 A 7 북 동 359 090 \n",
+ "5 210 3 B 4 북 남 000 180 \n",
+ "6 210 4 A 8 남 북 180 000 \n",
+ "7 210 4 B 3 남 서 180 270 \n",
+ "\n",
+ " inc_edge out_edge node_id \n",
+ "0 -571542797_02 571500487_01 i0 \n",
+ "1 -571500487_01 571542797_02 i0 \n",
+ "2 -571500487_01 571545870_01 i0 \n",
+ "3 -571542797_02 571510153_01 i0 \n",
+ "4 571545870_02 571510153_01 i0 \n",
+ ".. ... ... ... \n",
+ "3 NaN NaN u60 \n",
+ "4 NaN NaN u60 \n",
+ "5 NaN NaN u60 \n",
+ "6 NaN NaN u60 \n",
+ "7 NaN NaN u60 \n",
+ "\n",
+ "[116 rows x 11 columns]"
+ ]
+ },
+ "execution_count": 101,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "self.match6"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 77,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# node = self.net.getNode(node_id)\n",
+ "# conns = list(node.getConnections())\n",
+ "# print(node_id)\n",
+ "# for con in node.getConnections():\n",
+ "# print(con)\n",
+ "# print()\n",
+ "# for con in conns:\n",
+ "# print(con)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "i0\n",
+ "['g', 'r', 'r', 'r', 'g', 'r', 'r', 'r', 'g', 'r', 'r', 'r', 'r', 'r', 'g', 'r', 'r']\n",
+ "571545870_02\n",
+ "571542797_02\n",
+ "\n",
+ "['g', 'r', 'r', 'r', 'g', 'r', 'r', 'G', 'g', 'r', 'r', 'r', 'r', 'r', 'g', 'r', 'r']\n",
+ "[, , , , , , , , , , , , , , , , ]\n"
+ ]
+ }
+ ],
+ "source": [
+ "all_conns = list(node.getConnections())\n",
+ "allocated_conns = []\n",
+ "# display(matching)\n",
+ "row = self.matching.iloc[0]\n",
+ "node_id = row.node_id\n",
+ "move_no = row.move_no\n",
+ "inc_edge = row.inc_edge\n",
+ "out_edge = row.out_edge\n",
+ "state = copy.deepcopy(self.node2init)[node_id]\n",
+ "\n",
+ "node = self.net.getNode(node_id)\n",
+ "\n",
+ "print(node_id)\n",
+ "print(state)\n",
+ "print(inc_edge)\n",
+ "print(out_edge)\n",
+ "inc_edge = self.net.getEdge(inc_edge)\n",
+ "out_edge = self.net.getEdge(out_edge)\n",
+ "# incoming edge, outgoing edge가 지정된 이동류에 대하여\n",
+ "for conn in inc_edge.getConnections(out_edge):\n",
+ " allocated_conns.append(conns)\n",
+ " print(conn)\n",
+ " index = conn.getTLLinkIndex()\n",
+ " if index >= 0:\n",
+ " # 신호를 G로 지정\n",
+ " state[index] = 'G'\n",
+ "print(state)\n",
+ "for conn in allocated_conns:\n",
+ " print(conn)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 84,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 84,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "node_id = self.node_ids[0]\n",
+ "node = self.net.getNode(node_id)\n",
+ "node"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 113,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "node2conns = dict()\n",
+ "node2allocated_conns = dict()\n",
+ "for node_id in self.node_ids:\n",
+ " node = self.net.getNode(node_id)\n",
+ " node2conns[node_id] = list(node.getConnections())\n",
+ " node2allocated_conns[node_id] = []"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 118,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "self.match6 = match6\n",
+ "self.matching=matching"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 119,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "i0\n",
+ "u00\n",
+ "i1\n",
+ "i1\n",
+ "i1\n",
+ "i1\n",
+ "i1\n",
+ "i1\n",
+ "i1\n",
+ "i1\n",
+ "i2\n",
+ "i2\n",
+ "i2\n",
+ "i2\n",
+ "i2\n",
+ "i2\n",
+ "i2\n",
+ "i2\n",
+ "i2\n",
+ "u20\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "i3\n",
+ "u30\n",
+ "u31\n",
+ "u32\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i8\n",
+ "i9\n",
+ "i9\n",
+ "i9\n",
+ "i9\n",
+ "i7\n",
+ "i7\n",
+ "i7\n",
+ "i7\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "i6\n",
+ "u60\n"
+ ]
+ }
+ ],
+ "source": [
+ "self.matching['init_state'] = self.matching['node_id'].map(self.node2init)\n",
+ "self.matching['state'] = self.matching['init_state'].map(lambda x:''.join(x))\n",
+ " \n",
+ "node2allocated_conns = dict()\n",
+ "# matching의 각 행을 순회\n",
+ "for row in self.matching.itertuples(index=True):\n",
+ " node_id = row.node_id\n",
+ " move_no = row.move_no\n",
+ " inc_edge = row.inc_edge\n",
+ " out_edge = row.out_edge\n",
+ " state = copy.deepcopy(self.node2init)[node_id]\n",
+ "\n",
+ " if move_no != 21:\n",
+ " inc_edge = self.net.getEdge(inc_edge)\n",
+ " out_edge = self.net.getEdge(out_edge)\n",
+ " for conn in inc_edge.getConnections(out_edge):\n",
+ " # node2allocated_conns[node_id].append(conn)\n",
+ " index = conn.getTLLinkIndex()\n",
+ " if index >= 0:\n",
+ " state[index] = 'G'\n",
+ " self.matching.at[row.Index, 'state'] = ''.join(state)\n",
+ "\n",
+ "self.matching = self.matching.dropna(subset='state')\n",
+ "self.matching = self.matching.reset_index(drop=True)\n",
+ "self.matching = self.matching[['inter_no', 'node_id', 'move_no', 'state']]\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "node2allocated_conns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 57,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2-3. 직진 및 좌회전(G)을 배정했습니다.\n"
+ ]
+ }
+ ],
+ "source": [
+ "self.assign_signals()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " inter_no | \n",
+ " phase_no | \n",
+ " ring_type | \n",
+ " move_no | \n",
+ " inc_dir | \n",
+ " out_dir | \n",
+ " inc_angle | \n",
+ " out_angle | \n",
+ " inc_edge | \n",
+ " out_edge | \n",
+ " node_id | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 179 | \n",
+ " 004 | \n",
+ " -571542797_02 | \n",
+ " 571500487_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 003 | \n",
+ " 176 | \n",
+ " -571500487_01 | \n",
+ " 571542797_02 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 001 | \n",
+ " 095 | \n",
+ " -571500487_01 | \n",
+ " 571545870_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 179 | \n",
+ " 270 | \n",
+ " -571542797_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " 동 | \n",
+ " 서 | \n",
+ " 090 | \n",
+ " 270 | \n",
+ " 571545870_02 | \n",
+ " 571510153_01 | \n",
+ " i0 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 210 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 2 | \n",
+ " 서 | \n",
+ " 동 | \n",
+ " 270 | \n",
+ " 090 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 210 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 7 | \n",
+ " 북 | \n",
+ " 동 | \n",
+ " 359 | \n",
+ " 090 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 210 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 4 | \n",
+ " 북 | \n",
+ " 남 | \n",
+ " 000 | \n",
+ " 180 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 210 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 8 | \n",
+ " 남 | \n",
+ " 북 | \n",
+ " 180 | \n",
+ " 000 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " 210 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 3 | \n",
+ " 남 | \n",
+ " 서 | \n",
+ " 180 | \n",
+ " 270 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " u60 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
116 rows × 11 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n",
+ "0 175 1 A 8 남 북 179 004 \n",
+ "1 175 1 B 4 북 남 003 176 \n",
+ "2 175 2 A 7 북 동 001 095 \n",
+ "3 175 2 B 3 남 서 179 270 \n",
+ "4 175 3 A 6 동 서 090 270 \n",
+ ".. ... ... ... ... ... ... ... ... \n",
+ "3 210 2 B 2 서 동 270 090 \n",
+ "4 210 3 A 7 북 동 359 090 \n",
+ "5 210 3 B 4 북 남 000 180 \n",
+ "6 210 4 A 8 남 북 180 000 \n",
+ "7 210 4 B 3 남 서 180 270 \n",
+ "\n",
+ " inc_edge out_edge node_id \n",
+ "0 -571542797_02 571500487_01 i0 \n",
+ "1 -571500487_01 571542797_02 i0 \n",
+ "2 -571500487_01 571545870_01 i0 \n",
+ "3 -571542797_02 571510153_01 i0 \n",
+ "4 571545870_02 571510153_01 i0 \n",
+ ".. ... ... ... \n",
+ "3 NaN NaN u60 \n",
+ "4 NaN NaN u60 \n",
+ "5 NaN NaN u60 \n",
+ "6 NaN NaN u60 \n",
+ "7 NaN NaN u60 \n",
+ "\n",
+ "[116 rows x 11 columns]"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "match6"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 58,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " inter_no | \n",
+ " node_id | \n",
+ " phase_no | \n",
+ " ring_type | \n",
+ " move_no | \n",
+ " state | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " grrrgrrrgGGGGrgrr | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " gGGrgrrrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " grrGgrrrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " grrrgrrrgrrrrGgrr | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " grrrgGGrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 111 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 2 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 112 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 7 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 113 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 4 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 114 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 8 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 115 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 3 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
116 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no node_id phase_no ring_type move_no state\n",
+ "0 175 i0 1 A 8 grrrgrrrgGGGGrgrr\n",
+ "1 175 i0 1 B 4 gGGrgrrrgrrrrrgrr\n",
+ "2 175 i0 2 A 7 grrGgrrrgrrrrrgrr\n",
+ "3 175 i0 2 B 3 grrrgrrrgrrrrGgrr\n",
+ "4 175 i0 3 A 6 grrrgGGrgrrrrrgrr\n",
+ ".. ... ... ... ... ... ...\n",
+ "111 210 u60 2 B 2 ggggggggr\n",
+ "112 210 u60 3 A 7 ggggggggr\n",
+ "113 210 u60 3 B 4 ggggggggr\n",
+ "114 210 u60 4 A 8 ggggggggr\n",
+ "115 210 u60 4 B 3 ggggggggr\n",
+ "\n",
+ "[116 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 58,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "self.match6"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " inter_no | \n",
+ " node_id | \n",
+ " phase_no | \n",
+ " ring_type | \n",
+ " move_no | \n",
+ " state | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 1 | \n",
+ " A | \n",
+ " 8 | \n",
+ " grrrgrrrgGGGGrgrr | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 1 | \n",
+ " B | \n",
+ " 4 | \n",
+ " gGGrgrrrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 2 | \n",
+ " A | \n",
+ " 7 | \n",
+ " grrGgrrrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 3 | \n",
+ " grrrgrrrgrrrrGgrr | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 175 | \n",
+ " i0 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 6 | \n",
+ " grrrgGGrgrrrrrgrr | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 111 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 2 | \n",
+ " B | \n",
+ " 2 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 112 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 3 | \n",
+ " A | \n",
+ " 7 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 113 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 3 | \n",
+ " B | \n",
+ " 4 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 114 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 4 | \n",
+ " A | \n",
+ " 8 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ " 115 | \n",
+ " 210 | \n",
+ " u60 | \n",
+ " 4 | \n",
+ " B | \n",
+ " 3 | \n",
+ " ggggggggr | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
116 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " inter_no node_id phase_no ring_type move_no state\n",
+ "0 175 i0 1 A 8 grrrgrrrgGGGGrgrr\n",
+ "1 175 i0 1 B 4 gGGrgrrrgrrrrrgrr\n",
+ "2 175 i0 2 A 7 grrGgrrrgrrrrrgrr\n",
+ "3 175 i0 2 B 3 grrrgrrrgrrrrGgrr\n",
+ "4 175 i0 3 A 6 grrrgGGrgrrrrrgrr\n",
+ ".. ... ... ... ... ... ...\n",
+ "111 210 u60 2 B 2 ggggggggr\n",
+ "112 210 u60 3 A 7 ggggggggr\n",
+ "113 210 u60 3 B 4 ggggggggr\n",
+ "114 210 u60 4 A 8 ggggggggr\n",
+ "115 210 u60 4 B 3 ggggggggr\n",
+ "\n",
+ "[116 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "self.match6"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "sts",
+ "language": "python",
+ "name": "sts"
+ },
+ "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.8.10"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Data/tables/angle_original.csv b/Data/tables/angle_original.csv
new file mode 100644
index 000000000..6f1e26950
--- /dev/null
+++ b/Data/tables/angle_original.csv
@@ -0,0 +1,9 @@
+,inter_no,angle_A1,angle_A2,angle_A3,angle_A4,angle_A5,angle_A6,angle_A7,angle_A8,angle_B1,angle_B2,angle_B3,angle_B4,angle_B5,angle_B6,angle_B7,angle_B8
+0,175,179004,001095,090270,268000,NaN,,,,003176,179270,090180,270090,NaN,,,
+1,176,180000,180000,270356,NaN,NaN,,,,359180,180270,NaN,NaN,NaN,,,
+2,177,180000,000090,stop,268000,NaN,,,,001176,179270,NaN,090180,NaN,,,
+3,178,180000,000090,270000,090270,NaN,,,,000180,180270,270090,090180,NaN,,,
+4,201,180000,270000,090270,090270,000090,,,,180270,270090,270090,090180,000180,,,
+5,202,090270,stop,NaN,NaN,NaN,,,,270090,NaN,NaN,NaN,NaN,,,
+6,206,180000,stop,180000,stop,NaN,,,,000180,NaN,000180,NaN,NaN,,,
+7,210,090270,268000,359090,180000,NaN,,,,NaN,270090,000180,180270,NaN,,,
diff --git a/Scripts/__pycache__/preprocess_daily.cpython-38.pyc b/Scripts/__pycache__/preprocess_daily.cpython-38.pyc
index 3804dac69..5ac8e54f1 100644
Binary files a/Scripts/__pycache__/preprocess_daily.cpython-38.pyc and b/Scripts/__pycache__/preprocess_daily.cpython-38.pyc differ