Browse Source

finished debugging generate_signals.py (6_use_class_gs.ipynb)

master
김선중 1 year ago
parent
commit
2c41d87dd6
8 changed files with 5471 additions and 1907 deletions
  1. BIN
      Scripts/__pycache__/generate_signals.cpython-312.pyc
  2. BIN
      Scripts/__pycache__/preprocess_daily.cpython-312.pyc
  3. +33
    -1
      Scripts/generate_signals.py
  4. +3
    -2
      Scripts/preprocess_daily.py
  5. +157
    -72
      analysis/0725_main_test/4_use_class_pd.ipynb
  6. +4962
    -1832
      analysis/0725_main_test/6_use_class_gs.ipynb
  7. +1
    -0
      configs/config_test_0731.json
  8. +315
    -0
      test_0731/results/sn_1722384300.add.xml

BIN
Scripts/__pycache__/generate_signals.cpython-312.pyc View File


BIN
Scripts/__pycache__/preprocess_daily.cpython-312.pyc View File


+ 33
- 1
Scripts/generate_signals.py View File

@ -307,6 +307,19 @@ class SignalGenerator():
inter_no = self.node2inter[parent_id]
self.pa2ch[parent_id] = list(self.inter_node[(self.inter_node.inter_no==inter_no) & (self.inter_node.inter_type=='child')].node_id)
# 유효한 노드들만을 다시 id 목록 정의
# (history 기준으로 유효함을 설정했으나, 추후 더 조건이 필요할 수 있음)
valid_parent_ids = [self.inter2node[inter_no] for inter_no in set(self.history.inter_no)]
invalid_parent_ids = [parent_id for parent_id in self.parent_ids if not parent_id in valid_parent_ids ]
invalid_child_ids = []
for parent_id in invalid_parent_ids:
invalid_child_ids.extend(self.pa2ch[parent_id])
self.parent_ids = sorted(set(self.parent_ids) - set(invalid_parent_ids))
self.node_ids = sorted(set(self.node_ids) - set(invalid_parent_ids))
self.child_ids = sorted(set(self.child_ids) - set(invalid_child_ids))
self.uturn_ids = sorted(set(self.uturn_ids) - set(invalid_child_ids))
self.coord_ids = sorted(set(self.coord_ids) - set(invalid_child_ids))
# node2num_cycles : A dictionary that maps a node_id to the number of cycles
with open(os.path.join(self.path_intermediates, 'node2num_cycles.json'), 'r') as file:
# json.load() 함수를 사용해 파일 내용을 Python 딕셔너리로 불러옵니다.
@ -748,7 +761,18 @@ class SignalGenerator():
self.sigtable = []
sim_start = self.present_time - self.sim_timespan
for node_id, group in self.histids.groupby('node_id'):
lsbs = group[group['start_unix'] < sim_start]['start_unix'].max() # the last start_unix before sim_start
series = group[group['start_unix'] < sim_start]['start_unix']
# lsbs : the last start_unix before sim_start
if len(series):
lsbs = series.max()
else:
min_start_unix = int(group['start_unix'].min())
inter_no = self.node2inter[node_id]
_, prow = self.load_prow(inter_no, min_start_unix)
cycle = prow.iloc[0]['cycle']
lsbs = min_start_unix
while lsbs > sim_start:
lsbs -= cycle
self.offsets[node_id] = lsbs - sim_start
group = group[group.start_unix >= lsbs]
start_unixes = np.array(group.start_unix)
@ -857,6 +881,14 @@ class SignalGenerator():
# 5-2-3 helper function of 5-2
def cumulate(self, sig, alph):
sig[f'phas_{alph}'] = sig[f'phas_{alph}'].astype(int)
# 만약 현시번호가 1로 일정하면 2현시를 가상으로 추가
if (sig[f'phas_{alph}']==1).all():
sig_dup = sig.copy()
sig_dup[f'phas_{alph}'] = 2
sig = pd.concat([sig, sig_dup]).sort_values(by=['start_unix', f'phas_{alph}'])
csig = [] # cumulated sig
pre = pd.Series({f'phas_{alph}':None})

+ 3
- 2
Scripts/preprocess_daily.py View File

@ -23,6 +23,7 @@ class DailyPreprocessor():
self.path_results = os.path.join(self.path_root, *self.paths['results'])
self.path_tables = os.path.join(self.path_root, *self.paths['tables'])
self.path_networks = os.path.join(self.path_root, *self.paths['networks'])
self.path_network = os.path.join(self.path_root, *self.paths['network'])
self.path_scripts = os.path.join(self.path_root, *self.paths['scripts'])
# 이슈사항 목록
@ -40,7 +41,7 @@ class DailyPreprocessor():
# 1-1. 네트워크 불러오기
def load_networks(self):
self.net = sumolib.net.readNet(os.path.join(self.path_networks, self.file_net))
self.net = sumolib.net.readNet(self.path_network)
print("1-1. 네트워크가 로드되었습니다.")
# 1-2. 테이블 불러오기
@ -734,7 +735,7 @@ class DailyPreprocessor():
all_redsigns = (cmatch.move_no==18) & ~ out_true
# 보행신호시/좌회전시 진입/진출 엣지id 배정
cmatch[['inc_edge_id', 'out_edge_id']] = np.nan
cmatch[['inc_edge_id', 'out_edge_id']] = None
if condition == "보행신호시":
cmatch.loc[pedes_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]
elif condition == "좌회전시":

+ 157
- 72
analysis/0725_main_test/4_use_class_pd.ipynb View File

@ -25,7 +25,7 @@
"metadata": {},
"outputs": [],
"source": [
"self = DailyPreprocessor(config_name='test_0731',\n",
"self = DailyPreprocessor(config_name = 'test_0731',\n",
" file_net = 'new_sungnam_network_internal_target_0721.net.xml')"
]
},
@ -69,29 +69,24 @@
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1-5. 테이블을 표준화했습니다.\n"
]
}
],
"source": [
"# self.angle"
"# 1-5. 테이블 표준화\n",
"self.standardize()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# angle_A = self.angle[self.angle.ring_type=='A']\n",
"# angle_B = self.angle[self.angle.ring_type=='B']\n",
"# isa2move_A = dict(zip(zip(angle_A.inter_no, angle_A.STOS_NO, angle_A.phase_no), angle_A.move_no))\n",
"# isa2move_B = dict(zip(zip(angle_B.inter_no, angle_B.STOS_NO, angle_B.phase_no), angle_B.move_no))\n",
"# isa2move = {'A':isa2move_A, 'B':isa2move_B}\n",
"# isa2move"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
@ -108,20 +103,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"self.parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n",
"self.child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n",
"self.uturn_ids = sorted(self.uturn.child_id.unique())\n",
"self.coord_ids = sorted(self.coord.child_id.unique())\n",
"self.node_ids = self.parent_ids + self.child_id"
]
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 7,
"metadata": {},
"outputs": [
{
@ -139,7 +121,148 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"self.make_match1()\n",
"self.make_match2()\n",
"self.make_match3()\n",
"self.make_match4()\n",
"self.make_match5()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"self.uturn = pd.merge(self.uturn, self.u_condition, on='child_id')\n",
"\n",
"# p2inc_edge2angle : node_id to inc_edge2angle\n",
"p2inc_edge2angle = dict()\n",
"# p2out_edge2angle : node_id to out_edge2angle\n",
"p2out_edge2angle = dict()\n",
"# p2inc_angle2edge : node_id to inc_angle2edge\n",
"p2inc_angle2edge = dict()\n",
"# p2out_angle2edge : node_id to out_angle2edge\n",
"p2out_angle2edge = dict()\n",
"for node_id in self.parent_ids:\n",
" m5 = self.match5[self.match5.node_id==node_id]\n",
" m5 = m5.dropna(subset=['inc_edge_id', 'out_edge_id'])\n",
" # inc_edge2angle : inc_edge_id to inc_angle\n",
" inc_edge2angle = dict(zip(m5.inc_edge_id, m5.inc_angle.astype(int)))\n",
" p2inc_edge2angle[node_id] = inc_edge2angle\n",
" # out_edge2angle : out_edge_id to out_angle\n",
" out_edge2angle = dict(zip(m5.out_edge_id, m5.out_angle.astype(int)))\n",
" p2out_edge2angle[node_id] = out_edge2angle\n",
" # inc_angle2edge : inc_angle to inc_edge_id\n",
" inc_angle2edge = dict(zip(m5.inc_angle.astype(int), m5.inc_edge_id))\n",
" p2inc_angle2edge[node_id] = inc_angle2edge\n",
" # out_angle2edge : out_angle to out_edge_id\n",
" out_angle2edge = dict(zip(m5.out_angle.astype(int), m5.out_edge_id))\n",
" p2out_angle2edge[node_id] = out_angle2edge\n",
"# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"cmatches = []\n",
"row = self.uturn.iloc[0]\n",
"parent_id = row.parent_id\n",
"child_id = row.child_id\n",
"condition = row.condition\n",
"inc_edge_id = row.inc_edge_id\n",
"out_edge_id = row.out_edge_id\n",
"print(type(inc_edge_id))\n",
"adj_inc_edge_id = row.adj_inc_edge_id\n",
"adj_out_edge_id = row.adj_out_edge_id\n",
"\n",
"# match5에서 부모노드id에 해당하는 행들을 가져옴 (cmatch)\n",
"cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
"cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
"cmatch['node_id'] = child_id\n",
"cmatch['node_type'] = 'u_turn'\n",
"\n",
"# 진입엣지 각도\n",
"inc_angle = p2inc_edge2angle[parent_id][adj_inc_edge_id]\n",
"\n",
"# 이격각도\n",
"self.angle_separation = 10\n",
"\n",
"# 진입로 각도 목록\n",
"inc_angles = cmatch.dropna(subset=['inc_angle', 'out_angle']).inc_angle.astype(int).unique()\n",
"inc_angles = np.sort(inc_angles)\n",
"inc_angles = list(inc_angles - 360) + list(inc_angles) + list(inc_angles + 360)\n",
"inc_angles = np.array(inc_angles)\n",
"\n",
"# 보행신호시의 진입로 각도\n",
"inc_angles_left = inc_angles[inc_angles >= inc_angle + self.angle_separation]\n",
"inc_angle_pedes = np.sort(inc_angles_left)[0] % 360\n",
"\n",
"# 보행신호시의 진입로 엣지id\n",
"inc_angle2edge = p2inc_angle2edge[parent_id]\n",
"inc_edge_id_pedes = inc_angle2edge[inc_angle_pedes]\n",
"\n",
"# 진출로 각도 목록\n",
"out_angles = cmatch.dropna(subset=['inc_angle', 'out_angle']).out_angle.astype(int).unique()\n",
"out_angles = np.sort(out_angles)\n",
"out_angles = list(out_angles - 360) + list(out_angles) + list(out_angles + 360)\n",
"out_angles = np.array(out_angles)\n",
"\n",
"# 보행신호시의 진출로 각도\n",
"out_angles_right = out_angles[out_angles <= inc_angle - self.angle_separation]\n",
"out_angle_pedes = np.sort(out_angles_right)[-1] % 360\n",
"\n",
"# 보행신호시의 진출로 엣지id\n",
"out_angle2edge = p2out_angle2edge[parent_id]\n",
"out_edge_id_pedes = out_angle2edge[out_angle_pedes]\n",
"\n",
"# 진입엣지/진출엣지 포함 조건\n",
"inc_true = (cmatch.inc_edge_id==adj_inc_edge_id)\n",
"out_true = (cmatch.out_edge_id==adj_out_edge_id)\n",
"\n",
"# 보행신호시 조건\n",
"pedes_flag = (cmatch.inc_edge_id==inc_edge_id_pedes) & (cmatch.out_edge_id==out_edge_id_pedes)\n",
"\n",
"# 좌회전시 조건\n",
"right_flag = inc_true & (cmatch.turn_type=='left')\n",
"\n",
"# 보행신호이동류(17) 조건\n",
"crosswalk_on = (cmatch.move_no==17) & ~ out_true\n",
"\n",
"# 신호없음이동류(18) 조건\n",
"all_redsigns = (cmatch.move_no==18) & ~ out_true"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(type(inc_edge_id))\n",
"print(type(out_edge_id))\n",
"print(cmatch[['inc_edge_id', 'out_edge_id']].info())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(inc_edge_id, out_edge_id)\n",
"# 보행신호시/좌회전시 진입/진출 엣지id 배정\n",
"cmatch[['inc_edge_id', 'out_edge_id']] = None\n",
"if condition == \"보행신호시\":\n",
" cmatch.loc[pedes_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"elif condition == \"좌회전시\":\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"\n",
"uturn_not_assigned = cmatch[['inc_edge_id','out_edge_id']].isna().any(axis=1).all()\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
@ -152,36 +275,6 @@
"2-4. 직진 및 좌회전(G)을 배정했습니다.\n",
"2-5. node2num_cycles.json를 저장했습니다.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519797' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519796' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519799' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519798' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519801' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519800' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519873' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519874' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '516929' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '517055' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519834' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
"c:\\github\\siggen\\scripts\\preprocess_daily.py:741: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '519833' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" cmatch.loc[right_flag, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n"
]
}
],
"source": [
@ -200,17 +293,9 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3. 이슈사항을 저장합니다.\n"
]
}
],
"outputs": [],
"source": [
"self.write_issues()"
]

+ 4962
- 1832
analysis/0725_main_test/6_use_class_gs.ipynb
File diff suppressed because it is too large
View File


+ 1
- 0
configs/config_test_0731.json View File

@ -9,5 +9,6 @@
"results":["test_0731", "results"],
"tables":["test_0731", "data","tables"],
"networks":["test_0731", "data", "networks"],
"network":["test_0731", "data", "networks", "new_sungnam_network_internal_target_0721.net.xml"],
"scripts": ["scripts"]}
}

+ 315
- 0
test_0731/results/sn_1722384300.add.xml View File

@ -0,0 +1,315 @@
<additional>
<tlLogic id="106231" type="static" programID="106231_prog" offset="-32">
<phase duration="11" state="grgrrGGG"/>
<phase duration="4" state="grgrrGGy"/>
<phase duration="24" state="grgGGGGr"/>
<phase duration="4" state="grgyyyyr"/>
<phase duration="8" state="gGgrrrrr"/>
<phase duration="4" state="gygrrrrr"/>
<phase duration="31" state="grgrrrrr"/>
<phase duration="4" state="grgrrrrr"/>
<phase duration="11" state="grgrrGGG"/>
<phase duration="4" state="grgrrGGy"/>
<phase duration="24" state="grgGGGGr"/>
<phase duration="4" state="grgyyyyr"/>
<phase duration="8" state="gGgrrrrr"/>
<phase duration="4" state="gygrrrrr"/>
<phase duration="31" state="grgrrrrr"/>
<phase duration="4" state="grgrrrrr"/>
<phase duration="11" state="grgrrGGG"/>
<phase duration="4" state="grgrrGGy"/>
<phase duration="24" state="grgGGGGr"/>
<phase duration="4" state="grgyyyyr"/>
<phase duration="8" state="gGgrrrrr"/>
<phase duration="4" state="gygrrrrr"/>
<phase duration="31" state="grgrrrrr"/>
<phase duration="4" state="grgrrrrr"/>
<phase duration="26" state="grgrrGGG"/>
<phase duration="4" state="grgrrGGy"/>
<phase duration="52" state="grgGGGGr"/>
<phase duration="4" state="grgyyyyr"/>
<phase duration="20" state="gGgrrrrr"/>
<phase duration="4" state="gygrrrrr"/>
<phase duration="66" state="grgrrrrr"/>
<phase duration="4" state="grgrrrrr"/>
<phase duration="11" state="grgrrGGG"/>
<phase duration="4" state="grgrrGGy"/>
<phase duration="24" state="grgGGGGr"/>
<phase duration="4" state="grgyyyyr"/>
<phase duration="8" state="gGgrrrrr"/>
</tlLogic>
<tlLogic id="106234" type="static" programID="106234_prog" offset="-127">
<phase duration="41" state="gGGGrgrrrrgGGGrgrrr"/>
<phase duration="4" state="gyyyrgrrrrgyyyrgrrr"/>
<phase duration="16" state="grrrGgrrrrgrrrGgrrr"/>
<phase duration="4" state="grrrygrrrrgrrrygrrr"/>
<phase duration="36" state="grrrrgrrrrgrrrrgrrr"/>
<phase duration="4" state="grrrrgrrrrgrrrrgrrr"/>
<phase duration="31" state="grrrrgGGGGgrrrrgrrr"/>
<phase duration="4" state="grrrrgyyyygrrrrgrrr"/>
<phase duration="36" state="grrrrgrrrrgrrrrgGGG"/>
<phase duration="4" state="grrrrgrrrrgrrrrgyyy"/>
<phase duration="41" state="gGGGrgrrrrgGGGrgrrr"/>
<phase duration="4" state="gyyyrgrrrrgyyyrgrrr"/>
<phase duration="16" state="grrrGgrrrrgrrrGgrrr"/>
<phase duration="4" state="grrrygrrrrgrrrygrrr"/>
<phase duration="36" state="grrrrgrrrrgrrrrgrrr"/>
<phase duration="4" state="grrrrgrrrrgrrrrgrrr"/>
<phase duration="36" state="grrrrgGGGGgrrrrgrrr"/>
<phase duration="4" state="grrrrgyyyygrrrrgrrr"/>
<phase duration="31" state="grrrrgrrrrgrrrrgGGG"/>
<phase duration="4" state="grrrrgrrrrgrrrrgyyy"/>
<phase duration="41" state="gGGGrgrrrrgGGGrgrrr"/>
<phase duration="4" state="gyyyrgrrrrgyyyrgrrr"/>
<phase duration="16" state="grrrGgrrrrgrrrGgrrr"/>
<phase duration="4" state="grrrygrrrrgrrrygrrr"/>
<phase duration="36" state="grrrrgrrrrgrrrrgrrr"/>
<phase duration="4" state="grrrrgrrrrgrrrrgrrr"/>
<phase duration="36" state="grrrrgGGGGgrrrrgrrr"/>
</tlLogic>
<tlLogic id="106332" type="static" programID="106332_prog" offset="-102">
<phase duration="27" state="gGGGrGGrrrgrrgrrrrrrrrgrrrr"/>
<phase duration="4" state="gGGGryyrrrgrrgrrrrrrrrgrrrr"/>
<phase duration="23" state="gGGGrrrrrrgrrgrGGGGGrrgrrrr"/>
<phase duration="4" state="gyyyrrrrrrgrrgrGGGGGrrgrrrr"/>
<phase duration="28" state="grrrrrrrrrgrrgrGGGGGGGgrrrr"/>
<phase duration="4" state="grrrrrrrrrgrrgryyyyyyygrrrr"/>
<phase duration="45" state="grrrrrrrrrgrrgrrrrrrrrgGGGG"/>
<phase duration="4" state="grrrrrrrrrgrrgrrrrrrrrgyyyy"/>
<phase duration="41" state="grrrrrrGGGgrrgrrrrrrrrgrrrr"/>
<phase duration="4" state="grrrrrrGGGgrrgrrrrrrrrgrrrr"/>
<phase duration="12" state="grrrrrrGGGgrrgrrrrrrrrgrrrr"/>
<phase duration="4" state="grrrrrryyygrrgrrrrrrrrgrrrr"/>
<phase duration="31" state="gGGGrGGrrrgrrgrrrrrrrrgrrrr"/>
<phase duration="4" state="gGGGryyrrrgrrgrrrrrrrrgrrrr"/>
<phase duration="23" state="gGGGrrrrrrgrrgrGGGGGrrgrrrr"/>
<phase duration="4" state="gyyyrrrrrrgrrgrGGGGGrrgrrrr"/>
<phase duration="26" state="grrrrrrrrrgrrgrGGGGGGGgrrrr"/>
<phase duration="4" state="grrrrrrrrrgrrgryyyyyyygrrrr"/>
<phase duration="43" state="grrrrrrrrrgrrgrrrrrrrrgGGGG"/>
<phase duration="4" state="grrrrrrrrrgrrgrrrrrrrrgyyyy"/>
<phase duration="41" state="grrrrrrGGGgrrgrrrrrrrrgrrrr"/>
<phase duration="4" state="grrrrrrGGGgrrgrrrrrrrrgrrrr"/>
<phase duration="12" state="grrrrrrGGGgrrgrrrrrrrrgrrrr"/>
<phase duration="4" state="grrrrrryyygrrgrrrrrrrrgrrrr"/>
<phase duration="31" state="gGGGrGGrrrgrrgrrrrrrrrgrrrr"/>
<phase duration="4" state="gGGGryyrrrgrrgrrrrrrrrgrrrr"/>
<phase duration="23" state="gGGGrrrrrrgrrgrGGGGGrrgrrrr"/>
<phase duration="4" state="gyyyrrrrrrgrrgrGGGGGrrgrrrr"/>
<phase duration="26" state="grrrrrrrrrgrrgrGGGGGGGgrrrr"/>
<phase duration="4" state="grrrrrrrrrgrrgryyyyyyygrrrr"/>
<phase duration="43" state="grrrrrrrrrgrrgrrrrrrrrgGGGG"/>
<phase duration="4" state="grrrrrrrrrgrrgrrrrrrrrgyyyy"/>
<phase duration="41" state="grrrrrrGGGgrrgrrrrrrrrgrrrr"/>
</tlLogic>
<tlLogic id="107587" type="static" programID="107587_prog" offset="-193">
<phase duration="73" state="GGGGr"/>
<phase duration="4" state="GGGGr"/>
<phase duration="24" state="GGGGG"/>
<phase duration="4" state="GGGGy"/>
<phase duration="42" state="GGGGr"/>
<phase duration="4" state="GGGGr"/>
<phase duration="45" state="GGGGr"/>
<phase duration="4" state="GGGGr"/>
<phase duration="67" state="GGGGr"/>
<phase duration="4" state="GGGGr"/>
<phase duration="24" state="GGGGG"/>
<phase duration="4" state="GGGGy"/>
<phase duration="54" state="GGGGr"/>
</tlLogic>
<tlLogic id="108769" type="static" programID="108769_prog" offset="-98">
<phase duration="121" state="gGGGGGGGGGGrgrr"/>
<phase duration="4" state="gyyyyyGGGGGrgrr"/>
<phase duration="21" state="grrrrrGGGGGGgrr"/>
<phase duration="4" state="grrrrryyyyyygrr"/>
<phase duration="46" state="grrrrrrrrrrrgGG"/>
<phase duration="4" state="grrrrrrrrrrrgyy"/>
<phase duration="121" state="gGGGGGGGGGGrgrr"/>
<phase duration="4" state="gyyyyyGGGGGrgrr"/>
<phase duration="21" state="grrrrrGGGGGGgrr"/>
<phase duration="4" state="grrrrryyyyyygrr"/>
<phase duration="46" state="grrrrrrrrrrrgGG"/>
<phase duration="4" state="grrrrrrrrrrrgyy"/>
<phase duration="121" state="gGGGGGGGGGGrgrr"/>
<phase duration="4" state="gyyyyyGGGGGrgrr"/>
<phase duration="21" state="grrrrrGGGGGGgrr"/>
</tlLogic>
<tlLogic id="109295" type="static" programID="109295_prog" offset="-32">
<phase duration="11" state="GGGGGGGG"/>
<phase duration="4" state="GGGGGGyy"/>
<phase duration="24" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="8" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="31" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="11" state="GGGGGGGG"/>
<phase duration="4" state="GGGGGGyy"/>
<phase duration="24" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="8" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="31" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="11" state="GGGGGGGG"/>
<phase duration="4" state="GGGGGGyy"/>
<phase duration="24" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="8" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="31" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="26" state="GGGGGGGG"/>
<phase duration="4" state="GGGGGGyy"/>
<phase duration="52" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="20" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="66" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="11" state="GGGGGGGG"/>
<phase duration="4" state="GGGGGGyy"/>
<phase duration="24" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="8" state="GGGGGGrr"/>
</tlLogic>
<tlLogic id="109296" type="static" programID="109296_prog" offset="-127">
<phase duration="41" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="16" state="GGGGGGGG"/>
<phase duration="4" state="GGGyyGGG"/>
<phase duration="36" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="31" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="36" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="41" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="16" state="GGGGGGGG"/>
<phase duration="4" state="GGGyyGGG"/>
<phase duration="36" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="36" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="31" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="41" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="16" state="GGGGGGGG"/>
<phase duration="4" state="GGGyyGGG"/>
<phase duration="36" state="GGGrrGGG"/>
<phase duration="4" state="GGGrrGGG"/>
<phase duration="36" state="GGGrrGGG"/>
</tlLogic>
<tlLogic id="109297" type="static" programID="109297_prog" offset="-127">
<phase duration="41" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="16" state="GGGGGGGG"/>
<phase duration="4" state="GGGGGGyy"/>
<phase duration="36" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="31" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="36" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="41" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="16" state="GGGGGGGG"/>
<phase duration="4" state="GGGGGGyy"/>
<phase duration="36" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="36" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="31" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="41" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="16" state="GGGGGGGG"/>
<phase duration="4" state="GGGGGGyy"/>
<phase duration="36" state="GGGGGGrr"/>
<phase duration="4" state="GGGGGGrr"/>
<phase duration="36" state="GGGGGGrr"/>
</tlLogic>
<tlLogic id="109313" type="static" programID="109313_prog" offset="-193">
<phase duration="73" state="GGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGr"/>
<phase duration="24" state="GGGGGGGGG"/>
<phase duration="4" state="GGGGGGGGy"/>
<phase duration="42" state="GGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGr"/>
<phase duration="45" state="GGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGr"/>
<phase duration="67" state="GGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGr"/>
<phase duration="24" state="GGGGGGGGG"/>
<phase duration="4" state="GGGGGGGGy"/>
<phase duration="54" state="GGGGGGGGr"/>
</tlLogic>
<tlLogic id="109333" type="static" programID="109333_prog" offset="-98">
<phase duration="121" state="GGGGGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGGGGr"/>
<phase duration="21" state="GGGGGGGGGGGG"/>
<phase duration="4" state="GGGGGGGGGGGy"/>
<phase duration="46" state="GGGGGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGGGGr"/>
<phase duration="121" state="GGGGGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGGGGr"/>
<phase duration="21" state="GGGGGGGGGGGG"/>
<phase duration="4" state="GGGGGGGGGGGy"/>
<phase duration="46" state="GGGGGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGGGGr"/>
<phase duration="121" state="GGGGGGGGGGGr"/>
<phase duration="4" state="GGGGGGGGGGGr"/>
<phase duration="21" state="GGGGGGGGGGGG"/>
</tlLogic>
<tlLogic id="109836" type="static" programID="109836_prog" offset="-164">
<phase duration="46" state="grrrrgrrgGGgrr"/>
<phase duration="4" state="grrrrgrrgyygrr"/>
<phase duration="81" state="grrrrgGGgrrgrr"/>
<phase duration="4" state="grrrrgyygrrgrr"/>
<phase duration="31" state="grrrrgrrgrrgGG"/>
<phase duration="4" state="grrrrgrrgrrgyy"/>
<phase duration="26" state="gGGGGgrrgrrgrr"/>
<phase duration="4" state="gyyyygrrgrrgrr"/>
<phase duration="46" state="grrrrgrrgGGgrr"/>
<phase duration="4" state="grrrrgrrgyygrr"/>
<phase duration="81" state="grrrrgGGgrrgrr"/>
<phase duration="4" state="grrrrgyygrrgrr"/>
<phase duration="31" state="grrrrgrrgrrgGG"/>
<phase duration="4" state="grrrrgrrgrrgyy"/>
<phase duration="26" state="gGGGGgrrgrrgrr"/>
<phase duration="4" state="gyyyygrrgrrgrr"/>
<phase duration="46" state="grrrrgrrgGGgrr"/>
<phase duration="4" state="grrrrgrrgyygrr"/>
<phase duration="81" state="grrrrgGGgrrgrr"/>
<phase duration="4" state="grrrrgyygrrgrr"/>
<phase duration="31" state="grrrrgrrgrrgGG"/>
</tlLogic>
<tlLogic id="109901" type="static" programID="109901_prog" offset="-24">
<phase duration="59" state="GGGG"/>
<phase duration="4" state="GGGG"/>
<phase duration="59" state="GGGG"/>
<phase duration="4" state="GGGG"/>
<phase duration="59" state="GGGG"/>
<phase duration="4" state="GGGG"/>
<phase duration="59" state="GGGG"/>
<phase duration="4" state="GGGG"/>
<phase duration="59" state="GGGG"/>
</tlLogic>
<tlLogic id="109986" type="static" programID="109986_prog" offset="-193">
<phase duration="73" state="gGGGGrgrrgGGGGrgrr"/>
<phase duration="4" state="gyyyyrgrrgyyyyrgrr"/>
<phase duration="24" state="grrrrGgrrgrrrrGgrr"/>
<phase duration="4" state="grrrrygrrgrrrrygrr"/>
<phase duration="42" state="grrrrrgGGgrrrrrgrr"/>
<phase duration="4" state="grrrrrgyygrrrrrgrr"/>
<phase duration="45" state="grrrrrgrrgrrrrrgGG"/>
<phase duration="4" state="grrrrrgrrgrrrrrgyy"/>
<phase duration="67" state="gGGGGrgrrgGGGGrgrr"/>
<phase duration="4" state="gyyyyrgrrgyyyyrgrr"/>
<phase duration="24" state="grrrrGgrrgrrrrGgrr"/>
<phase duration="4" state="grrrrygrrgrrrrygrr"/>
<phase duration="54" state="grrrrrgGGgrrrrrgrr"/>
</tlLogic>
</additional>

Loading…
Cancel
Save