diff --git a/src/asim-cvm/configs/cvm_accessibility.csv b/src/asim-cvm/configs/cvm_accessibility.csv
index 2a2b9a3f4..c353aa0f4 100644
--- a/src/asim-cvm/configs/cvm_accessibility.csv
+++ b/src/asim-cvm/configs/cvm_accessibility.csv
@@ -1,11 +1,11 @@
Description,Target,Expression
-##### CARS use SOV_TR_M_TIME ######
+##### CARS use SOV_TR_M_TIME ######,,
peak round trip distance,_trkTime,"skim_od[('SOV_TR_M_TIME', 'AM')] * automobile_am_weight + skim_od[('SOV_TR_M_TIME', 'MD')] * automobile_md_weight + skim_od[('SOV_TR_M_TIME', 'PM')] * automobile_pm_weight"
decay function,_decay, exp(_trkTime * dispersion_parameter_automobile)
trk to home food delivery attraction,trkHomeFood,df.num_hh_food_delivery * _decay
trk to home package delivery attraction,trkHomePackage,df.num_hh_package_delivery * _decay
trk to home service attraction,trkHomeService,df.num_hh_service * _decay
trk to establishment attraction,trkEstablishment,df.establishment_attraction * _decay
-trk to retail,trkRetail,df.emp_retail * _decay
+trk to retail,trkRetail,df.emp_ret * _decay
trk to total,trkTotal,df.emp_total * _decay
-#####
+#####,,
diff --git a/src/asim-cvm/configs/cvm_accessibility.yaml b/src/asim-cvm/configs/cvm_accessibility.yaml
index b918c19a3..29b04bcea 100644
--- a/src/asim-cvm/configs/cvm_accessibility.yaml
+++ b/src/asim-cvm/configs/cvm_accessibility.yaml
@@ -2,7 +2,7 @@
SPEC: cvm_accessibility.csv
# columns from land_use table to add to df
-land_use_columns: ['emp_retail', 'emp_total', 'num_hh_food_delivery', 'num_hh_package_delivery', 'num_hh_service', 'establishment_attraction']
+land_use_columns: ['emp_ret', 'emp_total', 'num_hh_food_delivery', 'num_hh_package_delivery', 'num_hh_service', 'establishment_attraction']
CONSTANTS:
dispersion_parameter_automobile: -0.05
diff --git a/src/asim-cvm/configs/destination_choice_size_terms.csv b/src/asim-cvm/configs/destination_choice_size_terms.csv
index 0574cf50c..dd0eff270 100644
--- a/src/asim-cvm/configs/destination_choice_size_terms.csv
+++ b/src/asim-cvm/configs/destination_choice_size_terms.csv
@@ -1,39 +1,39 @@
-model_selector,segment,hh,pop,emp_retail,emp_personal_svcs_office,emp_prof_bus_svcs,emp_prof_bus_svcs_bldg_maint,emp_pvt_ed_k12,emp_pvt_ed_post_k12_oth,emp_health,emp_amusement,emp_hotel,emp_restaurant_bar,emp_personal_svcs_retail,emp_religious,emp_fed_non_mil,emp_fed_mil,emp_state_local_gov_blue,emp_state_local_gov_white,emp_state_local_gov_ent,emp_public_ed,emp_ag,emp_mfg_prod,emp_total,enrollgradekto8,enrollgrade9to12,adultschenrl,othercollegeenroll,collegeenroll,parkactive,beachactive,external_work,external_nonwork
-workplace,work_low,0,0,0.129,0.193,0,0,0,0,0.383,0,0,0.12,0,0,0,0,0,0,0,0,0.01,0.164,0,0,0,0,0,0,0,0,0,0
-workplace,work_med,0,0,0.12,0.197,0,0,0,0,0.325,0,0,0.139,0,0,0,0,0,0,0,0,0.008,0.21,0,0,0,0,0,0,0,0,0,0
-workplace,work_high,0,0,0.11,0.207,0,0,0,0,0.284,0,0,0.154,0,0,0,0,0,0,0,0,0.006,0.239,0,0,0,0,0,0,0,0,0,0
-workplace,work_veryhigh,0,0,0.093,0.27,0,0,0,0,0.241,0,0,0.146,0,0,0,0,0,0,0,0,0.004,0.246,0,0,0,0,0,0,0,0,0,0
-school,preschool,0,0.1888,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
-school,gradeschool,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
-school,highschool,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
-school,university,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0304,0.859,1,0,0,0,0
-non_mandatory,escort,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
-non_mandatory,shopping,0,0,0.75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-non_mandatory,othmaint,0,0,0.75,0,0.8451,0,0,0,0,0,0,0,2.45592,0,0.72003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-non_mandatory,eatout,0.5512,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-non_mandatory,social,0.3006,0,0,0,0,0,0,0,0,0,0,0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-non_mandatory,othdiscr,0.04333,0,0.04679,0,0.00893,0,0,0,0,0.20337,0.03453,0.15911,0.03726,1,0.00893,0,0.00893,0.00893,0,0,0,0,0,0.03167,0.05136,0,0,0.02258,3.71685,6,0,0
-atwork,atwork,0,0,0.154,0,0.029,0,0,0,0,0,0,0.367,0.054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-trip,work,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
-trip,escort,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
-trip,shopping,0.000001,0,0.75,0,0,0,0,0,0,0,0,0.214689,0,0,0,0,0,0,0,0,0,0,0.0001,0,0,0,0,0,0,0,0,0
-trip,eatout,0.010162,1,0.137829,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-trip,othmaint,0.000001,1,0.75,0,0.05,0,0,0,1.464014,0,0,0,1.725851,0,1.985712,0,0,0,0,0,0,0,0.0001,0,0,0,0,0,0,0,0,0
-trip,social,0.495249,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-trip,othdiscr,0.027342,0,0.038843,0,0,0,0,0,0,0.473744,0.092343,0.122872,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3.71685,6,0.05,0
-trip,univ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
-# not needed as school is not chosen as an intermediate trip destination,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-#trip,gradeschool,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-#trip,highschool,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-external_work,external_work,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
-external_nonwork,external_nonwork,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-external_non_mandatory,escort,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-external_non_mandatory,shopping,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-external_non_mandatory,othmaint,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-external_non_mandatory,eatout,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-external_non_mandatory,social,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-external_non_mandatory,othdiscr,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-commerce,warehouse,0,0,0.129,0.193,0,0,0,0,0.383,0,0,0.12,0,0,0,0,0,0,0,0,0.01,0.164,0,0,0,0,0,0,0,0,0,0
-commerce,intermodal,0,0,0.12,0.197,0,0,0,0,0.325,0,0,0.139,0,0,0,0,0,0,0,0,0.008,0.21,0,0,0,0,0,0,0,0,0,0
-commerce,residential,0,0,0.12,0.197,0,0,0,0,0.325,0,0,0.139,0,0,0,0,0,0,0,0,0.008,0.21,0,0,0,0,0,0,0,0,0,0
-commerce,commercial,0,0,0.12,0.197,0,0,0,0,0.325,0,0,0.139,0,0,0,0,0,0,0,0,0.008,0.21,0,0,0,0,0,0,0,0,0,0
+model_selector,segment,hh,pop,emp_gov,emp_mil,emp_ag_min,emp_bus_svcs,emp_fin_res_mgm,emp_educ,emp_hlth,emp_ret,emp_trn_wrh,emp_con,emp_utl,emp_mnf,emp_whl,emp_ent,emp_accm,emp_food,emp_oth,emp_non_ws_wfh,emp_non_ws_oth,emp_total,enrollgradekto8,enrollgrade9to12,adultschenrl,othercollegeenroll,collegeenroll,parkactive,beachactive,external_work,external_nonwork
+workplace,work_low,0,0,0.129,0.193,0,0,0,0,0.383,0,0,0.12,0,0,0,0,0,0,0,0,0.01,0,0,0,0,0,0,0,0,0,0
+workplace,work_med,0,0,0.12,0.197,0,0,0,0,0.325,0,0,0.139,0,0,0,0,0,0,0,0,0.008,0,0,0,0,0,0,0,0,0,0
+workplace,work_high,0,0,0.11,0.207,0,0,0,0,0.284,0,0,0.154,0,0,0,0,0,0,0,0,0.006,0,0,0,0,0,0,0,0,0,0
+workplace,work_veryhigh,0,0,0.093,0.27,0,0,0,0,0.241,0,0,0.146,0,0,0,0,0,0,0,0,0.004,0,0,0,0,0,0,0,0,0,0
+school,preschool,0,0.1888,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0
+school,gradeschool,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
+school,highschool,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
+school,university,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0304,0.859,1,0,0,0,0
+non_mandatory,escort,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
+non_mandatory,shopping,0,0,0.75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+non_mandatory,othmaint,0,0,0.75,0,0.8451,0,0,0,0,0,0,0,2.45592,0,0.72003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+non_mandatory,eatout,0.5512,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+non_mandatory,social,0.3006,0,0,0,0,0,0,0,0,0,0,0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+non_mandatory,othdiscr,0.04333,0,0.04679,0,0.00893,0,0,0,0,0.20337,0.03453,0.15911,0.03726,1,0.00893,0,0.00893,0.00893,0,0,0,0,0.03167,0.05136,0,0,0.02258,3.71685,6,0,0
+atwork,atwork,0,0,0.154,0,0.029,0,0,0,0,0,0,0.367,0.054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+trip,work,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
+trip,escort,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
+trip,shopping,0.000001,0,0.75,0,0,0,0,0,0,0,0,0.214689,0,0,0,0,0,0,0,0,0,0.0001,0,0,0,0,0,0,0,0,0
+trip,eatout,0.010162,1,0.137829,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+trip,othmaint,0.000001,1,0.75,0,0.05,0,0,0,1.464014,0,0,0,1.725851,0,1.985712,0,0,0,0,0,0,0.0001,0,0,0,0,0,0,0,0,0
+trip,social,0.495249,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+trip,othdiscr,0.027342,0,0.038843,0,0,0,0,0,0,0.473744,0.092343,0.122872,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3.71685,6,0.05,0
+trip,univ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
+# not needed as school is not chosen as an intermediate trip destination,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+#trip,gradeschool,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+#trip,highschool,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+external_work,external_work,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
+external_nonwork,external_nonwork,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+external_non_mandatory,escort,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+external_non_mandatory,shopping,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+external_non_mandatory,othmaint,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+external_non_mandatory,eatout,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+external_non_mandatory,social,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+external_non_mandatory,othdiscr,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+commerce,warehouse,0,0,0.129,0.193,0,0,0,0,0.383,0,0,0.12,0,0,0,0,0,0,0,0,0.01,0,0,0,0,0,0,0,0,0,0
+commerce,intermodal,0,0,0.12,0.197,0,0,0,0,0.325,0,0,0.139,0,0,0,0,0,0,0,0,0.008,0,0,0,0,0,0,0,0,0,0
+commerce,residential,0,0,0.12,0.197,0,0,0,0,0.325,0,0,0.139,0,0,0,0,0,0,0,0,0.008,0,0,0,0,0,0,0,0,0,0
+commerce,commercial,0,0,0.12,0.197,0,0,0,0,0.325,0,0,0.139,0,0,0,0,0,0,0,0,0.008,0,0,0,0,0,0,0,0,0,0
diff --git a/src/asim-cvm/configs/route_start_times.csv b/src/asim-cvm/configs/route_start_times.csv
index 6220c29bd..e657b808e 100644
--- a/src/asim-cvm/configs/route_start_times.csv
+++ b/src/asim-cvm/configs/route_start_times.csv
@@ -1,101 +1,101 @@
,,,Time Periods,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
route_purpose,vehicle_type,business_type,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47
-goods,LCV,AGM,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-goods,MUT,AGM,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-goods,SUT,AGM,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-service,LCV,AGM,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-service,MUT,AGM,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-service,SUT,AGM,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-maintenance,LCV,AGM,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,AGM,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,AGM,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,IUT,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-goods,MUT,IUT,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-goods,SUT,IUT,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-service,LCV,IUT,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-service,MUT,IUT,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-service,SUT,IUT,0.000103,0.000384,0.000672,0.000681,0.001138,0.004511,0.016761,0.042656,0.071097,0.086840,0.095514,0.105697,0.101572,0.078597,0.065522,0.070442,0.071175,0.053735,0.028570,0.017805,0.024598,0.027948,0.017398,0.006323,0.002483,0.002095,0.001785,0.001349,0.001229,0.000896,0.000348,0.000061,0.000004,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000011
-maintenance,LCV,IUT,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,IUT,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,IUT,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,CON,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-goods,MUT,CON,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-goods,SUT,CON,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-service,LCV,CON,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-service,MUT,CON,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-service,SUT,CON,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-maintenance,LCV,CON,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,CON,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,CON,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,EPO,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-goods,MUT,EPO,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-goods,SUT,EPO,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-service,LCV,EPO,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-service,MUT,EPO,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-service,SUT,EPO,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-maintenance,LCV,EPO,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,EPO,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,EPO,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,IFR,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-goods,MUT,IFR,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-goods,SUT,IFR,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-service,LCV,IFR,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-service,MUT,IFR,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-service,SUT,IFR,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-maintenance,LCV,IFR,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,IFR,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,IFR,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,LAF,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-goods,MUT,LAF,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-goods,SUT,LAF,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-service,LCV,LAF,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-service,MUT,LAF,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-service,SUT,LAF,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-maintenance,LCV,LAF,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,LAF,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,LAF,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,MHS,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-goods,MUT,MHS,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-goods,SUT,MHS,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-service,LCV,MHS,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-service,MUT,MHS,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-service,SUT,MHS,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-maintenance,LCV,MHS,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,MHS,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,MHS,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,RET,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-goods,MUT,RET,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-goods,SUT,RET,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-service,LCV,RET,0.001027,0.001974,0.003849,0.006959,0.011859,0.018241,0.027156,0.044330,0.072062,0.099846,0.112917,0.106996,0.091431,0.077820,0.065109,0.049336,0.034081,0.022312,0.016446,0.015582,0.016215,0.016724,0.015395,0.011889,0.008563,0.006699,0.006118,0.005835,0.005155,0.004281,0.003589,0.003152,0.002495,0.001587,0.001260,0.001466,0.001540,0.001402,0.001033,0.000487,0.000230,0.000464,0.000825,0.000907,0.000916,0.000909,0.000774,0.000756
-service,MUT,RET,0.005643,0.006543,0.009221,0.013879,0.024174,0.041331,0.064123,0.088894,0.115529,0.138979,0.137534,0.106882,0.064538,0.027899,0.010146,0.007048,0.007367,0.008257,0.010526,0.013641,0.018929,0.022489,0.016464,0.006233,0.001076,0.000070,0.000001,0.000000,0.000000,0.000000,0.000023,0.000357,0.002043,0.005164,0.006196,0.003575,0.000953,0.000105,0.000003,0.000000,0.000000,0.000000,0.000000,0.000023,0.000357,0.002044,0.005187,0.006554
-service,SUT,RET,0.010341,0.012999,0.015821,0.016047,0.014969,0.021292,0.042956,0.074313,0.097409,0.103504,0.093084,0.070253,0.053824,0.056156,0.063300,0.057292,0.041333,0.026820,0.016035,0.009850,0.008552,0.010068,0.009661,0.005456,0.002779,0.003805,0.004771,0.004128,0.004325,0.005057,0.003770,0.001439,0.000249,0.000016,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000146,0.001324,0.004966,0.008617,0.007341,0.003979,0.004364,0.007582
-maintenance,LCV,RET,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,RET,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,RET,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,MFG,0.004887,0.007632,0.009750,0.010204,0.010447,0.014484,0.029295,0.054069,0.076404,0.088014,0.087390,0.077074,0.064762,0.052193,0.043091,0.041045,0.038819,0.036466,0.036746,0.033145,0.027569,0.026708,0.026925,0.022599,0.015492,0.009570,0.005798,0.003896,0.003829,0.004784,0.005406,0.004682,0.003308,0.002445,0.002033,0.001373,0.000732,0.000941,0.001491,0.001320,0.000987,0.001347,0.001520,0.000904,0.000546,0.001374,0.002839,0.003666
-goods,MUT,MFG,0.051166,0.059538,0.055204,0.062060,0.093179,0.111071,0.093686,0.066415,0.045311,0.034169,0.029028,0.025491,0.031781,0.044493,0.043169,0.027553,0.015374,0.010124,0.007196,0.004556,0.002452,0.001605,0.001073,0.000460,0.000510,0.001648,0.002853,0.002445,0.001349,0.001203,0.001258,0.000719,0.000192,0.000021,0.000001,0.000000,0.000000,0.000000,0.000005,0.000094,0.000608,0.001856,0.003174,0.004051,0.005162,0.007903,0.016177,0.032613
-goods,SUT,MFG,0.007165,0.014223,0.014901,0.009068,0.007490,0.019956,0.045016,0.066272,0.074165,0.078714,0.081630,0.076156,0.068383,0.064161,0.056742,0.046121,0.037331,0.028330,0.024066,0.026152,0.026680,0.024213,0.019981,0.012322,0.006043,0.008019,0.014328,0.015712,0.012242,0.007915,0.003577,0.000868,0.000091,0.000003,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000188,0.001771
-service,LCV,MFG,0.004887,0.007632,0.009750,0.010204,0.010447,0.014484,0.029295,0.054069,0.076404,0.088014,0.087390,0.077074,0.064762,0.052193,0.043091,0.041045,0.038819,0.036466,0.036746,0.033145,0.027569,0.026708,0.026925,0.022599,0.015492,0.009570,0.005798,0.003896,0.003829,0.004784,0.005406,0.004682,0.003308,0.002445,0.002033,0.001373,0.000732,0.000941,0.001491,0.001320,0.000987,0.001347,0.001520,0.000904,0.000546,0.001374,0.002839,0.003666
-service,MUT,MFG,0.051166,0.059538,0.055204,0.062060,0.093179,0.111071,0.093686,0.066415,0.045311,0.034169,0.029028,0.025491,0.031781,0.044493,0.043169,0.027553,0.015374,0.010124,0.007196,0.004556,0.002452,0.001605,0.001073,0.000460,0.000510,0.001648,0.002853,0.002445,0.001349,0.001203,0.001258,0.000719,0.000192,0.000021,0.000001,0.000000,0.000000,0.000000,0.000005,0.000094,0.000608,0.001856,0.003174,0.004051,0.005162,0.007903,0.016177,0.032613
-service,SUT,MFG,0.007165,0.014223,0.014901,0.009068,0.007490,0.019956,0.045016,0.066272,0.074165,0.078714,0.081630,0.076156,0.068383,0.064161,0.056742,0.046121,0.037331,0.028330,0.024066,0.026152,0.026680,0.024213,0.019981,0.012322,0.006043,0.008019,0.014328,0.015712,0.012242,0.007915,0.003577,0.000868,0.000091,0.000003,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000188,0.001771
-maintenance,LCV,MFG,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,MFG,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,MFG,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,TRN,0.004887,0.007632,0.009750,0.010204,0.010447,0.014484,0.029295,0.054069,0.076404,0.088014,0.087390,0.077074,0.064762,0.052193,0.043091,0.041045,0.038819,0.036466,0.036746,0.033145,0.027569,0.026708,0.026925,0.022599,0.015492,0.009570,0.005798,0.003896,0.003829,0.004784,0.005406,0.004682,0.003308,0.002445,0.002033,0.001373,0.000732,0.000941,0.001491,0.001320,0.000987,0.001347,0.001520,0.000904,0.000546,0.001374,0.002839,0.003666
-goods,MUT,TRN,0.051166,0.059538,0.055204,0.062060,0.093179,0.111071,0.093686,0.066415,0.045311,0.034169,0.029028,0.025491,0.031781,0.044493,0.043169,0.027553,0.015374,0.010124,0.007196,0.004556,0.002452,0.001605,0.001073,0.000460,0.000510,0.001648,0.002853,0.002445,0.001349,0.001203,0.001258,0.000719,0.000192,0.000021,0.000001,0.000000,0.000000,0.000000,0.000005,0.000094,0.000608,0.001856,0.003174,0.004051,0.005162,0.007903,0.016177,0.032613
-goods,SUT,TRN,0.007165,0.014223,0.014901,0.009068,0.007490,0.019956,0.045016,0.066272,0.074165,0.078714,0.081630,0.076156,0.068383,0.064161,0.056742,0.046121,0.037331,0.028330,0.024066,0.026152,0.026680,0.024213,0.019981,0.012322,0.006043,0.008019,0.014328,0.015712,0.012242,0.007915,0.003577,0.000868,0.000091,0.000003,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000188,0.001771
-service,LCV,TRN,0.004887,0.007632,0.009750,0.010204,0.010447,0.014484,0.029295,0.054069,0.076404,0.088014,0.087390,0.077074,0.064762,0.052193,0.043091,0.041045,0.038819,0.036466,0.036746,0.033145,0.027569,0.026708,0.026925,0.022599,0.015492,0.009570,0.005798,0.003896,0.003829,0.004784,0.005406,0.004682,0.003308,0.002445,0.002033,0.001373,0.000732,0.000941,0.001491,0.001320,0.000987,0.001347,0.001520,0.000904,0.000546,0.001374,0.002839,0.003666
-service,MUT,TRN,0.051166,0.059538,0.055204,0.062060,0.093179,0.111071,0.093686,0.066415,0.045311,0.034169,0.029028,0.025491,0.031781,0.044493,0.043169,0.027553,0.015374,0.010124,0.007196,0.004556,0.002452,0.001605,0.001073,0.000460,0.000510,0.001648,0.002853,0.002445,0.001349,0.001203,0.001258,0.000719,0.000192,0.000021,0.000001,0.000000,0.000000,0.000000,0.000005,0.000094,0.000608,0.001856,0.003174,0.004051,0.005162,0.007903,0.016177,0.032613
-service,SUT,TRN,0.007165,0.014223,0.014901,0.009068,0.007490,0.019956,0.045016,0.066272,0.074165,0.078714,0.081630,0.076156,0.068383,0.064161,0.056742,0.046121,0.037331,0.028330,0.024066,0.026152,0.026680,0.024213,0.019981,0.012322,0.006043,0.008019,0.014328,0.015712,0.012242,0.007915,0.003577,0.000868,0.000091,0.000003,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000188,0.001771
-maintenance,LCV,TRN,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,TRN,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,TRN,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-goods,LCV,WHL,0.004887,0.007632,0.009750,0.010204,0.010447,0.014484,0.029295,0.054069,0.076404,0.088014,0.087390,0.077074,0.064762,0.052193,0.043091,0.041045,0.038819,0.036466,0.036746,0.033145,0.027569,0.026708,0.026925,0.022599,0.015492,0.009570,0.005798,0.003896,0.003829,0.004784,0.005406,0.004682,0.003308,0.002445,0.002033,0.001373,0.000732,0.000941,0.001491,0.001320,0.000987,0.001347,0.001520,0.000904,0.000546,0.001374,0.002839,0.003666
-goods,MUT,WHL,0.051166,0.059538,0.055204,0.062060,0.093179,0.111071,0.093686,0.066415,0.045311,0.034169,0.029028,0.025491,0.031781,0.044493,0.043169,0.027553,0.015374,0.010124,0.007196,0.004556,0.002452,0.001605,0.001073,0.000460,0.000510,0.001648,0.002853,0.002445,0.001349,0.001203,0.001258,0.000719,0.000192,0.000021,0.000001,0.000000,0.000000,0.000000,0.000005,0.000094,0.000608,0.001856,0.003174,0.004051,0.005162,0.007903,0.016177,0.032613
-goods,SUT,WHL,0.007165,0.014223,0.014901,0.009068,0.007490,0.019956,0.045016,0.066272,0.074165,0.078714,0.081630,0.076156,0.068383,0.064161,0.056742,0.046121,0.037331,0.028330,0.024066,0.026152,0.026680,0.024213,0.019981,0.012322,0.006043,0.008019,0.014328,0.015712,0.012242,0.007915,0.003577,0.000868,0.000091,0.000003,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000188,0.001771
-service,LCV,WHL,0.004887,0.007632,0.009750,0.010204,0.010447,0.014484,0.029295,0.054069,0.076404,0.088014,0.087390,0.077074,0.064762,0.052193,0.043091,0.041045,0.038819,0.036466,0.036746,0.033145,0.027569,0.026708,0.026925,0.022599,0.015492,0.009570,0.005798,0.003896,0.003829,0.004784,0.005406,0.004682,0.003308,0.002445,0.002033,0.001373,0.000732,0.000941,0.001491,0.001320,0.000987,0.001347,0.001520,0.000904,0.000546,0.001374,0.002839,0.003666
-service,MUT,WHL,0.051166,0.059538,0.055204,0.062060,0.093179,0.111071,0.093686,0.066415,0.045311,0.034169,0.029028,0.025491,0.031781,0.044493,0.043169,0.027553,0.015374,0.010124,0.007196,0.004556,0.002452,0.001605,0.001073,0.000460,0.000510,0.001648,0.002853,0.002445,0.001349,0.001203,0.001258,0.000719,0.000192,0.000021,0.000001,0.000000,0.000000,0.000000,0.000005,0.000094,0.000608,0.001856,0.003174,0.004051,0.005162,0.007903,0.016177,0.032613
-service,SUT,WHL,0.007165,0.014223,0.014901,0.009068,0.007490,0.019956,0.045016,0.066272,0.074165,0.078714,0.081630,0.076156,0.068383,0.064161,0.056742,0.046121,0.037331,0.028330,0.024066,0.026152,0.026680,0.024213,0.019981,0.012322,0.006043,0.008019,0.014328,0.015712,0.012242,0.007915,0.003577,0.000868,0.000091,0.000003,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000005,0.000188,0.001771
-maintenance,LCV,WHL,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,MUT,WHL,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
-maintenance,SUT,WHL,0.000001,0.000000,0.000020,0.000245,0.001407,0.005001,0.012960,0.024611,0.035783,0.047419,0.059385,0.063913,0.067935,0.084735,0.099504,0.091978,0.068231,0.046019,0.033114,0.028635,0.033053,0.039041,0.032666,0.017352,0.008382,0.009439,0.012779,0.012393,0.010357,0.008771,0.006804,0.005588,0.006795,0.007851,0.005794,0.002819,0.001317,0.000600,0.000280,0.000502,0.000848,0.000791,0.000793,0.001352,0.001567,0.000903,0.000241,0.000027
+goods,LCV,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,AGM,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,IUT,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,CON,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,EPO,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,IFR,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,LAF,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,MHS,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,RET,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,MFG,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,TRN,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,LCV,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,MUT,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+goods,SUT,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,LCV,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,MUT,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+service,SUT,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,LCV,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,MUT,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+maintenance,SUT,WHL,0,0,0,0,0,0,0.25,0.25,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/src/asim-cvm/configs/settings.yaml b/src/asim-cvm/configs/settings.yaml
index 6204d7cfb..7bb4db107 100644
--- a/src/asim-cvm/configs/settings.yaml
+++ b/src/asim-cvm/configs/settings.yaml
@@ -1,7 +1,8 @@
households_sample_size: 0
-establishments_sample_size: 50
+establishments_sample_size: 0
trace_establishment_id:
trace_hh_id: 479044
+#resume_after:
inherit_settings: True
chunk_size: 0
@@ -35,6 +36,7 @@ input_table_list:
index_col: zone_id
rename_columns:
MAZ: zone_id
+ #emp_retail: emp_ret
drop_columns:
- i1
- i2
diff --git a/src/asim-cvm/configs/write_trip_matrices.yaml b/src/asim-cvm/configs/write_trip_matrices.yaml
index e1b249de7..86651a01d 100644
--- a/src/asim-cvm/configs/write_trip_matrices.yaml
+++ b/src/asim-cvm/configs/write_trip_matrices.yaml
@@ -14,7 +14,7 @@ EST_EXPANSION_WEIGHT_COL: sample_rate # added when establishments rPMd in
SAVE_TRIPS_TABLE: False
MATRICES:
- - file_name: trips_ea.omx
+ - file_name: CVMtrips_ea.omx
tables:
- name: CAR_EA
data_field: CAR_EA
@@ -22,9 +22,9 @@ MATRICES:
data_field: LIGHT_TRUCK_EA
- name: MEDIUM_TRUCK_EA
data_field: MEDIUM_TRUCK_EA
- - name: HEAVY_TRUCK_EA
- data_field: HEAVY_TRUCK_EA
- - file_name: trips_am.omx
+ #- name: HEAVY_TRUCK_EA
+ # data_field: HEAVY_TRUCK_EA
+ - file_name: CVMtrips_am.omx
tables:
- name: CAR_AM
data_field: CAR_AM
@@ -32,9 +32,9 @@ MATRICES:
data_field: LIGHT_TRUCK_AM
- name: MEDIUM_TRUCK_AM
data_field: MEDIUM_TRUCK_AM
- - name: HEAVY_TRUCK_AM
- data_field: HEAVY_TRUCK_AM
- - file_name: trips_md.omx
+ #- name: HEAVY_TRUCK_AM
+ # data_field: HEAVY_TRUCK_AM
+ - file_name: CVMtrips_md.omx
tables:
- name: CAR_MD
data_field: CAR_MD
@@ -42,9 +42,9 @@ MATRICES:
data_field: LIGHT_TRUCK_MD
- name: MEDIUM_TRUCK_MD
data_field: MEDIUM_TRUCK_MD
- - name: HEAVY_TRUCK_MD
- data_field: HEAVY_TRUCK_MD
- - file_name: trips_pm.omx
+ #- name: HEAVY_TRUCK_MD
+ # data_field: HEAVY_TRUCK_MD
+ - file_name: CVMtrips_pm.omx
tables:
- name: CAR_PM
data_field: CAR_PM
@@ -52,9 +52,9 @@ MATRICES:
data_field: LIGHT_TRUCK_PM
- name: MEDIUM_TRUCK_PM
data_field: MEDIUM_TRUCK_PM
- - name: HEAVY_TRUCK_PM
- data_field: HEAVY_TRUCK_PM
- - file_name: trips_ev.omx
+ #- name: HEAVY_TRUCK_PM
+ # data_field: HEAVY_TRUCK_PM
+ - file_name: CVMtrips_ev.omx
tables:
- name: CAR_EV
data_field: CAR_EV
@@ -62,8 +62,8 @@ MATRICES:
data_field: LIGHT_TRUCK_EV
- name: MEDIUM_TRUCK_EV
data_field: MEDIUM_TRUCK_EV
- - name: HEAVY_TRUCK_EV
- data_field: HEAVY_TRUCK_EV
+ #- name: HEAVY_TRUCK_EV
+ # data_field: HEAVY_TRUCK_EV
CONSTANTS:
time_periods:
diff --git a/src/asim-cvm/configs/write_trip_matrices_annotate_trips_preprocessor.csv b/src/asim-cvm/configs/write_trip_matrices_annotate_trips_preprocessor.csv
index b9392b11d..a77b10b9f 100644
--- a/src/asim-cvm/configs/write_trip_matrices_annotate_trips_preprocessor.csv
+++ b/src/asim-cvm/configs/write_trip_matrices_annotate_trips_preprocessor.csv
@@ -8,27 +8,27 @@ Description,Target,Expression
,is_pm,"cv_trips.trip_start_time.between(time_periods['PM']['first_hour'], time_periods['PM']['last_hour'])"
,is_ev,(cv_trips.trip_start_time >= time_periods['EV']['first_hour']) | (cv_trips.trip_start_time <= time_periods['EV']['last_hour'])
# ea trips,,
-,CAR_EA,((vehicle_type == 'car') & is_ea)
-,LIGHT_TRUCK_EA,((vehicle_type == 'light_truck') & is_ea)
-,MEDIUM_TRUCK_EA,((vehicle_type == 'med_truck') & is_ea)
-,HEAVY_TRUCK_EA,((vehicle_type == 'heavy_truck') & is_ea)
+,CAR_EA,((vehicle_type == 'LCV') & is_ea)
+,LIGHT_TRUCK_EA,((vehicle_type == 'SUT') & is_ea)
+,MEDIUM_TRUCK_EA,((vehicle_type == 'MUT') & is_ea)
+#,HEAVY_TRUCK_EA,((vehicle_type == 'heavy_truck') & is_ea)
# am trips,,
-,CAR_AM,((vehicle_type == 'car') & is_am)
-,LIGHT_TRUCK_AM,((vehicle_type == 'light_truck') & is_am)
-,MEDIUM_TRUCK_AM,((vehicle_type == 'med_truck') & is_am)
-,HEAVY_TRUCK_AM,((vehicle_type == 'heavy_truck') & is_am)
+,CAR_AM,((vehicle_type == 'LCV') & is_am)
+,LIGHT_TRUCK_AM,((vehicle_type == 'SUT') & is_am)
+,MEDIUM_TRUCK_AM,((vehicle_type == 'MUT') & is_am)
+#,HEAVY_TRUCK_AM,((vehicle_type == 'heavy_truck') & is_am)
# md trips,,
-,CAR_MD,((vehicle_type == 'car') & is_md)
-,LIGHT_TRUCK_MD,((vehicle_type == 'light_truck') & is_md)
-,MEDIUM_TRUCK_MD,((vehicle_type == 'med_truck') & is_md)
-,HEAVY_TRUCK_MD,((vehicle_type == 'heavy_truck') & is_md)
+,CAR_MD,((vehicle_type == 'LCV') & is_md)
+,LIGHT_TRUCK_MD,((vehicle_type == 'SUT') & is_md)
+,MEDIUM_TRUCK_MD,((vehicle_type == 'MUT') & is_md)
+#,HEAVY_TRUCK_MD,((vehicle_type == 'heavy_truck') & is_md)
# pm trips,,
-,CAR_PM,((vehicle_type == 'car') & is_pm)
-,LIGHT_TRUCK_PM,((vehicle_type == 'light_truck') & is_pm)
-,MEDIUM_TRUCK_PM,((vehicle_type == 'med_truck') & is_pm)
-,HEAVY_TRUCK_PM,((vehicle_type == 'heavy_truck') & is_pm)
+,CAR_PM,((vehicle_type == 'LCV') & is_pm)
+,LIGHT_TRUCK_PM,((vehicle_type == 'SUT') & is_pm)
+,MEDIUM_TRUCK_PM,((vehicle_type == 'MUT') & is_pm)
+#,HEAVY_TRUCK_PM,((vehicle_type == 'heavy_truck') & is_pm)
# ev trips,,
-,CAR_EV,((vehicle_type == 'car') & is_ev)
-,LIGHT_TRUCK_EV,((vehicle_type == 'light_truck') & is_ev)
-,MEDIUM_TRUCK_EV,((vehicle_type == 'med_truck') & is_ev)
-,HEAVY_TRUCK_EV,((vehicle_type == 'heavy_truck') & is_ev)
\ No newline at end of file
+,CAR_EV,((vehicle_type == 'LCV') & is_ev)
+,LIGHT_TRUCK_EV,((vehicle_type == 'SUT') & is_ev)
+,MEDIUM_TRUCK_EV,((vehicle_type == 'MUT') & is_ev)
+#,HEAVY_TRUCK_EV,((vehicle_type == 'heavy_truck') & is_ev)
diff --git a/src/asim-cvm/scripts/convert_tripTables.py b/src/asim-cvm/scripts/convert_tripTables.py
index 7f90d70b4..1ae4ee693 100644
--- a/src/asim-cvm/scripts/convert_tripTables.py
+++ b/src/asim-cvm/scripts/convert_tripTables.py
@@ -10,14 +10,14 @@
for period in ['EA', 'AM', 'MD', 'PM', 'EV']:
- print("Working on auto %s_%s_%s" %(mode, period, vot))
+ print("Working on auto %s_%s" %(model_name, period))
#rename the file
# os.rename(output_dir + "/%s_%s_%s.omx" % (mode, period, vot), output_dir + "/%s_%s_%s_.omx" % (mode, period, vot))
- trips = omx.open_file(output_dir + "/" + model_name + "/trips_%s.omx" % (period), 'r')
- new_trips = omx.open_file(output_dir + "/assignment/%s_%s_%s.omx" % (mode, period, vot), 'w')
+ trip = omx.open_file(output_dir + "/" + model_name + "//%strips_%s.omx" % (model_name, period), 'r')
+ new_trips = omx.open_file(output_dir + "/assignment/%strips_%s.omx" % (model_name, period), 'w')
- for table in skim.list_matrices():
- new_skim.create_matrix(name = table, obj=np.array(skim[table]), shape = skim[table].shape, atom=tables.Atom.from_dtype(np.dtype('float64')))
+ for table in trip.list_matrices():
+ new_trips.create_matrix(name = table, obj=np.array(trip[table]), shape = trip[table].shape, atom=tables.Atom.from_dtype(np.dtype('float64')))
- skim.close()
- new_skim.close()
\ No newline at end of file
+ trip.close()
+ new_trips.close()
\ No newline at end of file
diff --git a/src/asim-cvm/scripts/set_zoneMapping.py b/src/asim-cvm/scripts/set_zoneMapping.py
index 6aff18e9a..4e298ca12 100644
--- a/src/asim-cvm/scripts/set_zoneMapping.py
+++ b/src/asim-cvm/scripts/set_zoneMapping.py
@@ -10,16 +10,18 @@
print("Working on setting zone mapping for cv trips_%s.omx" %(period))
# check if the old file exists, if so, delete it
- if os.path.exists(output_dir + "/%s/trips_%s_.omx" % (model_name, period)):
- os.remove(output_dir + "/%s/trips_%s_.omx" % (model_name, period))
+ #if os.path.exists(output_dir + "/%s/%strips_%s_.omx" % (model_name, model_name, period)):
+ #os.remove(output_dir + "/%s/%strips_%s_.omx" % (model_name, model_name, period))
# rename the file
- os.rename(output_dir + "/%s/trips_%s.omx" % (model_name, period), output_dir + "/%s/trips_%s_.omx" % (model_name, period))
- trip_table_old = omx.open_file(output_dir + "/%s/trips_%s_.omx" % (model_name, period), 'r')
- trip_table = omx.open_file(output_dir + "/%s/trips_%s.omx" % (model_name, period), 'w')
+ os.rename(output_dir + "/%s/%strips_%s.omx" % (model_name, model_name, period), output_dir + "/%s/%strips_%s_.omx" % (model_name, model_name, period))
+ trip_table_old = omx.open_file(output_dir + "/%s/%strips_%s_.omx" % (model_name, model_name, period), 'r')
+ trip_table = omx.open_file(output_dir + "/%s/%strips_%s.omx" % (model_name, model_name, period), 'w')
for core in trip_table_old.list_matrices():
+ print("core is " + core)
mapping_name = trip_table_old.list_mappings()[0]
+ print("mapping_name is " + mapping_name)
zone_mapping = trip_table_old.mapping(mapping_name)
zones = list(zone_mapping.keys())
zones_sorted = sorted(zones)
diff --git a/src/main/emme/toolbox/import/import_auto_demand.py b/src/main/emme/toolbox/import/import_auto_demand.py
index 375a27c2e..040e05828 100644
--- a/src/main/emme/toolbox/import/import_auto_demand.py
+++ b/src/main/emme/toolbox/import/import_auto_demand.py
@@ -69,6 +69,7 @@
import os
import numpy
from contextlib import contextmanager as _context
+import inro.emme.matrix as _matrix
_join = os.path.join
@@ -173,8 +174,8 @@ def __call__(self, output_dir, external_zones, num_processors, scenario):
self.external_zones = external_zones
self.num_processors = num_processors
self.import_traffic_trips(props)
- self.import_commercial_vehicle_demand(props)
- #self.convert_light_trucks_to_pce()
+ #self.import_commercial_vehicle_demand(props)
+ # self.convert_light_trucks_to_pce()
self.add_aggregate_demand()
@_context
@@ -194,10 +195,13 @@ def set_data(self, name, value):
value = value + self._matrix_cache[name]
self._matrix_cache[name] = value
- @_m.logbook_trace("Import CT-RAMP traffic trips from OMX")
+ @_m.logbook_trace("Import ActivitySim traffic trips from OMX")
def import_traffic_trips(self, props):
- title = "Import CT-RAMP traffic trips from OMX report"
+ title = "Import ActivitySim traffic trips from OMX report"
report = _m.PageBuilder(title)
+
+ emmebank = self.scenario.emmebank
+ emme_zones = self.scenario.zone_numbers
taxi_da_share = props["Taxi.da.share"]
taxi_s2_share = props["Taxi.s2.share"]
@@ -213,7 +217,7 @@ def import_traffic_trips(self, props):
tnc_shared_pce = props["TNC.shared.passengersPerVehicle"]
av_share = props["Mobility.AV.Share"]
- periods = ["_EA", "_AM", "_MD", "_PM", "_EV"]
+ periods = ["_EA", "_AM", "_MD", "_PM", "_EV"]
vot_bins = ["_low", "_med", "_high"]
mode_shares = [
("mf%s_SOV_TR_H", {
@@ -226,246 +230,322 @@ def import_traffic_trips(self, props):
"TAXI": taxi_s3_share / taxi_pce
}),
]
+
+ cvm_vot_low_share = props["cvm.vot.share.low"]
+ cvm_vot_med_share = props["cvm.vot.share.medium"]
+ cvm_vot_high_share = props["cvm.vot.share.high"]
+ cvm_vot_shares = [cvm_vot_low_share, cvm_vot_med_share, cvm_vot_high_share]
+
+
+ truck_pce_light = 1.3
+ truck_pce_medium = 1.5
+ truck_pce_heavy = 2.5
with self.setup() as omx_manager:
- # SOV transponder "TRPDR" = "TR" and non-transponder "NOTRPDR" = "NT"
+ # SOV transponder "TRPDR" = "TR" and non-transponder "NOTRPDR" = "NT"
for period in periods:
- for vot in vot_bins:
- # SOV non-transponder demand
- matrix_name = "mf%s_SOV_NT_%s" % (period[1:], vot[1].upper())
- logbook_label = "Import auto from OMX SOVNOTRPDR to matrix %s" % (matrix_name)
- resident_demand = omx_manager.lookup(("auto", period, vot), "SOVNOTRPDR%s" % period)
- visitor_demand = omx_manager.lookup(("autoVisitor", period, vot), "SOV%s" % period)
- cross_border_demand = omx_manager.lookup(("autoCrossBorder", period, vot), "SOV%s" % period)
- # NOTE: No non-transponder airport or internal-external demand
- total_ct_ramp_trips = (
- resident_demand + visitor_demand + cross_border_demand)
- dem_utils.demand_report([
- ("resident", resident_demand),
- ("cross_border", cross_border_demand),
- ("visitor", visitor_demand),
- ("total", total_ct_ramp_trips)
- ],
- logbook_label, self.scenario, report)
- self.set_data(matrix_name, total_ct_ramp_trips)
-
- # SOV transponder demand
- matrix_name = "mf%s_SOV_TR_%s" % (period[1:], vot[1].upper())
- logbook_label = "Import auto from OMX SOVTRPDR to matrix %s" % (matrix_name)
- resident_demand = omx_manager.lookup(("auto", period, vot), "SOVTRPDR%s" % period)
- # NOTE: No transponder visitor or cross-border demand
- airport_demand = omx_manager.lookup(("autoAirport", ".SAN" + period, vot), "SOV%s" % period)
- if omx_manager.file_exists(("autoAirport", ".CBX" + period, vot)):
- airport_demand += omx_manager.lookup(("autoAirport", ".CBX" + period, vot), "SOV%s" % period)
- internal_external_demand = omx_manager.lookup(("autoInternalExternal", period, vot), "SOV%s" % period)
-
- total_ct_ramp_trips = (
- resident_demand + airport_demand + internal_external_demand)
- dem_utils.demand_report([
- ("resident", resident_demand),
- ("airport", airport_demand),
- ("internal_external", internal_external_demand),
- ("total", total_ct_ramp_trips)
- ],
- logbook_label, self.scenario, report)
- self.set_data(matrix_name, total_ct_ramp_trips)
-
- # HOV2 and HOV3 demand
- matrix_name_map = [
- ("mf%s_HOV2_%s", "SR2%s"),
- ("mf%s_HOV3_%s", "SR3%s")
- ]
- for matrix_name_tmplt, omx_name in matrix_name_map:
- matrix_name = matrix_name_tmplt % (period[1:], vot[1].upper())
- logbook_label = "Import auto from OMX %s to matrix %s" % (omx_name[:3], matrix_name)
- resident_demand = (
- omx_manager.lookup(("auto", period, vot), omx_name % ("TRPDR" + period))
- + omx_manager.lookup(("auto", period, vot), omx_name % ("NOTRPDR" + period)))
- visitor_demand = omx_manager.lookup(("autoVisitor", period, vot), omx_name % period)
- cross_border_demand = omx_manager.lookup(("autoCrossBorder", period, vot), omx_name % period)
- airport_demand = omx_manager.lookup(("autoAirport", ".SAN" + period, vot), omx_name % period)
- if omx_manager.file_exists(("autoAirport", ".CBX" + period, vot)):
- airport_demand += omx_manager.lookup(("autoAirport", ".CBX" + period, vot), omx_name % period)
- internal_external_demand = omx_manager.lookup(("autoInternalExternal", period, vot), omx_name % period)
+ with _m.logbook_trace("Import ActivitySim traffic trips from OMX for %s" % period):
+ for vot, cvm_vot_share in zip(vot_bins, cvm_vot_shares):
+ # SOV non-transponder demand
+ matrix_name = "mf%s_SOV_NT_%s" % (period[1:], vot[1].upper())
+ logbook_label = "Import auto from OMX SOVNOTRPDR to matrix %s" % (matrix_name)
+ resident_demand = omx_manager.lookup(("auto", period, vot), "SOVNOTRPDR%s" % period)
+ visitor_demand = omx_manager.lookup(("autoVisitor", period, vot), "SOV%s" % period)
+ cross_border_demand = omx_manager.lookup(("autoCrossBorder", period, vot), "SOV%s" % period)
+ # NOTE: No non-transponder airport or internal-external demand
+ total_asim_trips = (
+ resident_demand + cross_border_demand+ visitor_demand)
- total_ct_ramp_trips = (
- resident_demand + visitor_demand + cross_border_demand + airport_demand + internal_external_demand)
dem_utils.demand_report([
("resident", resident_demand),
("cross_border", cross_border_demand),
("visitor", visitor_demand),
+ ("total", total_asim_trips)
+ ],
+ logbook_label, self.scenario, report)
+ self.set_data(matrix_name, total_asim_trips)
+
+ # SOV transponder demand
+ matrix_name = "mf%s_SOV_TR_%s" % (period[1:], vot[1].upper())
+ logbook_label = "Import auto from OMX SOVTRPDR to matrix %s" % (matrix_name)
+ resident_demand = omx_manager.lookup(("auto", period, vot), "SOVTRPDR%s" % period)
+ # NOTE: No transponder visitor or cross-border demand
+ airport_demand = omx_manager.lookup(("autoAirport", ".SAN" + period, vot), "SOV%s" % period)
+ if omx_manager.file_exists(("autoAirport", ".CBX" + period, vot)):
+ airport_demand += omx_manager.lookup(("autoAirport", ".CBX" + period, vot), "SOV%s" % period)
+ cvm_demand = (omx_manager.lookup(("cvm", period, ""), "CAR%s" % period) * cvm_vot_share)
+
+ total_asim_trips = (resident_demand + airport_demand + cvm_demand)
+
+ dem_utils.demand_report([
+ ("resident", resident_demand),
("airport", airport_demand),
- ("internal_external", internal_external_demand),
- ("total", total_ct_ramp_trips)
- ],
+ ("cvm", cvm_demand),
+ ("total", total_asim_trips)
+ ],
logbook_label, self.scenario, report)
- self.set_data(matrix_name, total_ct_ramp_trips)
-
- # add TNC and TAXI demand to vot="high"
- for matrix_name_tmplt, share in mode_shares:
- matrix_name = matrix_name_tmplt % period[1:]
- logbook_label = "Import othr from TAXI, empty AV, and TNC to matrix %s" % (matrix_name)
- resident_taxi_demand = (
- omx_manager.lookup(("othr", period, ""), "TAXI" + period) * share["TAXI"])
- visitor_taxi_demand = (
- omx_manager.lookup(("othrVisitor", period, ""), "TAXI" + period) * share["TAXI"])
- cross_border_taxi_demand = (
- omx_manager.lookup(("othrCrossBorder", period, ""), "TAXI" + period) * share["TAXI"])
- # airport SAN
- airport_taxi_demand = (
- omx_manager.lookup(("othrAirport", ".SAN", period), "TAXI" + period) * share["TAXI"])
- # airport CBX (optional)
- if omx_manager.file_exists(("othrAirport", ".CBX", period)):
- airport_taxi_demand += (
- omx_manager.lookup(("othrAirport",".CBX", period), "TAXI" + period) * share["TAXI"])
- internal_external_taxi_demand = (
- omx_manager.lookup(("othrInternalExternal", period, ""), "TAXI" + period) * share["TAXI"])
-
- #AV routing models and TNC fleet model demand
- empty_av_demand = omx_manager.lookup(("EmptyAV","",""), "EmptyAV%s" % period)
- tnc_demand_0 = omx_manager.lookup(("TNCVehicle","",period), "TNC%s_0" % period)
- tnc_demand_1 = omx_manager.lookup(("TNCVehicle","",period), "TNC%s_1" % period)
- tnc_demand_2 = omx_manager.lookup(("TNCVehicle","",period), "TNC%s_2" % period)
- tnc_demand_3 = omx_manager.lookup(("TNCVehicle","",period), "TNC%s_3" % period)
+ self.set_data(matrix_name, total_asim_trips)
+
+ # HOV2 and HOV3 demand
+ matrix_name_map = [
+ ("mf%s_HOV2_%s", "SR2%s"),
+ ("mf%s_HOV3_%s", "SR3%s")
+ ]
+ for matrix_name_tmplt, omx_name in matrix_name_map:
+ matrix_name = matrix_name_tmplt % (period[1:], vot[1].upper())
+ logbook_label = "Import auto from OMX %s to matrix %s" % (omx_name[:3], matrix_name)
+ resident_demand = (
+ omx_manager.lookup(("auto", period, vot), omx_name % ("TRPDR" + period))
+ + omx_manager.lookup(("auto", period, vot), omx_name % ("NOTRPDR" + period)))
+ visitor_demand = omx_manager.lookup(("autoVisitor", period, vot), omx_name % period)
+ cross_border_demand = omx_manager.lookup(("autoCrossBorder", period, vot), omx_name % period)
+ airport_demand = omx_manager.lookup(("autoAirport", ".SAN" + period, vot), omx_name % period)
+ if omx_manager.file_exists(("autoAirport", ".CBX" + period, vot)):
+ airport_demand += omx_manager.lookup(("autoAirport", ".CBX" + period, vot), omx_name % period)
+ # internal_external_demand = omx_manager.lookup(("autoInternalExternal", period, vot), omx_name % period)
+
+ total_asim_trips = (
+ resident_demand + cross_border_demand + visitor_demand + airport_demand)
+
+ # Check the OMX zones are the same Emme database, assume all files have the same zones
+ # matrix = emmebank.matrix(matrix_name)
+ # if omx_zones != emme_zones:
+ # matrix_data = _matrix.MatrixData(type='f', indices=[omx_zones, omx_zones])
+ # matrix_data.from_numpy(total_asim_trips)
+ # expanded_matrix_data = matrix_data.expand([emme_zones, emme_zones])
+ # matrix.set_data(expanded_matrix_data, self.scenario)
+ # else:
+ # matrix.set_numpy_data(total_asim_trips, self.scenario)
+
+ dem_utils.demand_report([
+ ("resident", resident_demand),
+ ("cross_border", cross_border_demand),
+ ("visitor", visitor_demand),
+ ("airport", airport_demand),
+ # ("internal_external", internal_external_demand),
+ ("total", total_asim_trips)
+ ],
+ logbook_label, self.scenario, report)
+ self.set_data(matrix_name, total_asim_trips)
+
+ # light-heavy truck
+ matrix_name = "mf%s_TRK_L" % (period[1:])
+ logbook_label = "Import light-heavy truck pce from OMX to matrix %s" % (matrix_name)
+ cvm_demand = (omx_manager.lookup(("cvm", period, ""), "LIGHT_TRUCK%s" % period) * truck_pce_light)
+ htm_ei_demand = (omx_manager.lookup(("htm", period, ""), "Lightei%s" % period) * truck_pce_light)
+ htm_ie_demand = (omx_manager.lookup(("htm", period, ""), "Lightie%s" % period) * truck_pce_light)
- #AVs: no driver. No AVs: driver
- #AVs: 0 and 1 passenger would be SOV. there will be empty vehicles as well. No AVs: 0 passanger would be SOV
- #AVs: 2 passenger would be HOV2. No AVs: 1 passenger would be HOV2
- #AVs: 3 passenger would be HOV3. No AVs: 2 and 3 passengers would be HOV3
- if (av_share>0):
- if (matrix_name_tmplt[5:-2] == "SOV_TR"):
- av_demand = empty_av_demand + tnc_demand_0 + tnc_demand_1
- elif (matrix_name_tmplt[5:-2] == "HOV2"):
- av_demand = tnc_demand_2
- else:
- av_demand = tnc_demand_3
- else:
- if (matrix_name_tmplt[5:-2] == "SOV_TR"):
- av_demand = tnc_demand_0
- elif (matrix_name_tmplt[5:-2] == "HOV2"):
- av_demand = tnc_demand_1
- else:
- av_demand = tnc_demand_2 + tnc_demand_3
+ total_asim_trips = (cvm_demand + htm_ei_demand + htm_ie_demand)
- total_ct_ramp_trips = (
- resident_taxi_demand + visitor_taxi_demand + cross_border_taxi_demand
- + airport_taxi_demand + internal_external_taxi_demand + av_demand)
dem_utils.demand_report([
- ("resident_taxi", resident_taxi_demand),
- ("visitor_taxi", visitor_taxi_demand),
- ("cross_border_taxi", cross_border_taxi_demand),
- ("airport_taxi", airport_taxi_demand),
- ("internal_external_taxi", internal_external_taxi_demand),
- ("av_fleet", av_demand),
- ("total", total_ct_ramp_trips)
- ],
+ ("cvm", cvm_demand),
+ ("htm_ei", htm_ei_demand),
+ ("htm_ie", htm_ie_demand),
+ ("total", total_asim_trips)
+ ],
+ logbook_label, self.scenario, report)
+ self.set_data(matrix_name, total_asim_trips)
+
+ # medium-heavy truck
+ matrix_name = "mf%s_TRK_M" % (period[1:])
+ logbook_label = "Import medium-heavy truck pce from OMX to matrix %s" % (matrix_name)
+ cvm_demand = (omx_manager.lookup(("cvm", period, ""), "MEDIUM_TRUCK%s" % period) * truck_pce_medium)
+ htm_ei_demand = (omx_manager.lookup(("htm", period, ""), "Mediumei%s" % period) * truck_pce_medium)
+ htm_ie_demand = (omx_manager.lookup(("htm", period, ""), "Mediumie%s" % period) * truck_pce_medium)
+
+ total_asim_trips = (cvm_demand + htm_ei_demand + htm_ie_demand)
+
+ dem_utils.demand_report([
+ ("cvm", cvm_demand),
+ ("htm_ei", htm_ei_demand),
+ ("htm_ie", htm_ie_demand),
+ ("total", total_asim_trips)
+ ],
+ logbook_label, self.scenario, report)
+ self.set_data(matrix_name, total_asim_trips)
+
+ # heavy-heavy truck
+ matrix_name = "mf%s_TRK_H" % (period[1:])
+ logbook_label = "Import heavy-heavy truck pce from OMX to matrix %s" % (matrix_name)
+ htm_ei_demand = (omx_manager.lookup(("htm", period, ""), "Heavyei%s" % period) * truck_pce_heavy)
+ htm_ie_demand = (omx_manager.lookup(("htm", period, ""), "Heavyie%s" % period) * truck_pce_heavy)
+
+ total_asim_trips = (htm_ei_demand + htm_ie_demand)
+
+ dem_utils.demand_report([
+ ("htm_ei", htm_ei_demand),
+ ("htm_ie", htm_ie_demand),
+ ("total", total_asim_trips)
+ ],
logbook_label, self.scenario, report)
- self.set_data(matrix_name, total_ct_ramp_trips)
+ self.set_data(matrix_name, total_asim_trips)
+
+ # #add TNC and TAXI demand to vot="high"
+ # for matrix_name_tmplt, share in mode_shares:
+ # matrix_name = matrix_name_tmplt % period[1:]
+ # logbook_label = "Import othr from TAXI, empty AV, and TNC to matrix %s" % (matrix_name)
+ # resident_taxi_demand = (
+ # omx_manager.lookup(("othr", period, ""), "TAXI" + period) * share["TAXI"])
+ # visitor_taxi_demand = (
+ # omx_manager.lookup(("othrVisitor", period, ""), "TAXI" + period) * share["TAXI"])
+ # cross_border_taxi_demand = (
+ # omx_manager.lookup(("othrCrossBorder", period, ""), "TAXI" + period) * share["TAXI"])
+ # # airport SAN
+ # airport_taxi_demand = (
+ # omx_manager.lookup(("othrAirport", ".SAN", period), "TAXI" + period) * share["TAXI"])
+ # # airport CBX (optional)
+ # if omx_manager.file_exists(("othrAirport", ".CBX", period)):
+ # airport_taxi_demand += (
+ # omx_manager.lookup(("othrAirport",".CBX", period), "TAXI" + period) * share["TAXI"])
+ # internal_external_taxi_demand = (
+ # omx_manager.lookup(("othrInternalExternal", period, ""), "TAXI" + period) * share["TAXI"])
+
+ # # Commenting out for now: AV routing models and TNC fleet model demand
+ # empty_av_demand = omx_manager.lookup(("EmptyAV","",""), "EmptyAV%s" % period)
+ # tnc_demand_0 = omx_manager.lookup(("TNCVehicle","",period), "TNC%s_0" % period)
+ # tnc_demand_1 = omx_manager.lookup(("TNCVehicle","",period), "TNC%s_1" % period)
+ # tnc_demand_2 = omx_manager.lookup(("TNCVehicle","",period), "TNC%s_2" % period)
+ # tnc_demand_3 = omx_manager.lookup(("TNCVehicle","",period), "TNC%s_3" % period)
+
+ # #AVs: no driver. No AVs: driver
+ # #AVs: 0 and 1 passenger would be SOV. there will be empty vehicles as well. No AVs: 0 passanger would be SOV
+ # #AVs: 2 passenger would be HOV2. No AVs: 1 passenger would be HOV2
+ # #AVs: 3 passenger would be HOV3. No AVs: 2 and 3 passengers would be HOV3
+ # if (av_share>0):
+ # if (matrix_name_tmplt[5:-2] == "SOV_TR"):
+ # av_demand = empty_av_demand + tnc_demand_0 + tnc_demand_1
+ # elif (matrix_name_tmplt[5:-2] == "HOV2"):
+ # av_demand = tnc_demand_2
+ # else:
+ # av_demand = tnc_demand_3
+ # else:
+ # if (matrix_name_tmplt[5:-2] == "SOV_TR"):
+ # av_demand = tnc_demand_0
+ # elif (matrix_name_tmplt[5:-2] == "HOV2"):
+ # av_demand = tnc_demand_1
+ # else:
+ # av_demand = tnc_demand_2 + tnc_demand_3
+
+ # total_asim_trips = (
+ # resident_taxi_demand + visitor_taxi_demand + cross_border_taxi_demand
+ # + airport_taxi_demand + internal_external_taxi_demand) #+ av_demand
+ # dem_utils.demand_report([
+ # ("resident_taxi", resident_taxi_demand),
+ # ("visitor_taxi", visitor_taxi_demand),
+ # ("cross_border_taxi", cross_border_taxi_demand),
+ # ("airport_taxi", airport_taxi_demand),
+ # ("internal_external_taxi", internal_external_taxi_demand),
+ # # ("av_fleet", av_demand),
+ # ("total", total_asim_trips)
+ # ],
+ # logbook_label, self.scenario, report)
+ # self.set_data(matrix_name, total_asim_trips)
+
_m.logbook_write(title, report.render())
- @_m.logbook_trace('Import commercial vehicle demand')
- def import_commercial_vehicle_demand(self, props):
- scale_factor = props["cvm.scale_factor"]
- scale_light = props["cvm.scale_light"]
- scale_medium = props["cvm.scale_medium"]
- scale_heavy = props["cvm.scale_heavy"]
- share_light = props["cvm.share.light"]
- share_medium = props["cvm.share.medium"]
- share_heavy = props["cvm.share.heavy"]
-
- scenario = self.scenario
- emmebank = scenario.emmebank
+ # @_m.logbook_trace('Import commercial vehicle demand')
+ # def import_commercial_vehicle_demand(self, props):
+ # scale_factor = props["cvm.scale_factor"]
+ # scale_light = props["cvm.scale_light"]
+ # scale_medium = props["cvm.scale_medium"]
+ # scale_heavy = props["cvm.scale_heavy"]
+ # share_light = props["cvm.share.light"]
+ # share_medium = props["cvm.share.medium"]
+ # share_heavy = props["cvm.share.heavy"]
+
+ # scenario = self.scenario
+ # emmebank = scenario.emmebank
- mapping = {}
- periods = ["EA", "AM", "MD", "PM", "EV"]
- # The SOV demand is modified in-place, which was imported
- # prior from the CT-RAMP demand
- # The truck demand in vehicles is copied from separate matrices
- for index, period in enumerate(periods):
- mapping["CVM_%s:LNT" % period] = {
- "orig": "%s_SOV_TR_H" % period,
- "dest": "%s_SOV_TR_H" % period,
- "pce": 1.0,
- "scale": scale_light[index],
- "share": share_light,
- "period": period
- }
- mapping["CVM_%s:INT" % period] = {
- "orig": "%s_TRK_L_VEH" % period,
- "dest": "%s_TRK_L" % period,
- "pce": 1.3,
- "scale": scale_medium[index],
- "share": share_medium,
- "period": period
- }
- mapping["CVM_%s:MNT" % period] = {
- "orig": "%s_TRK_M_VEH" % period,
- "dest": "%s_TRK_M" % period,
- "pce": 1.5,
- "scale": scale_medium[index],
- "share": share_medium,
- "period": period
- }
- mapping["CVM_%s:HNT" % period] = {
- "orig": "%s_TRK_H_VEH" % period,
- "dest": "%s_TRK_H" % period,
- "pce": 2.5,
- "scale": scale_heavy[index],
- "share": share_heavy,
- "period": period
- }
- with _m.logbook_trace('Load starting SOV and truck matrices'):
- for key, value in mapping.iteritems():
- value["array"] = emmebank.matrix(value["orig"]).get_numpy_data(scenario)
+ # mapping = {}
+ # periods = ["EA", "AM", "MD", "PM", "EV"]
+ # # The SOV demand is modified in-place, which was imported
+ # # prior from the CT-RAMP demand
+ # # The truck demand in vehicles is copied from separate matrices
+ # for index, period in enumerate(periods):
+ # mapping["CVM_%s:LNT" % period] = {
+ # "orig": "%s_SOV_TR_H" % period,
+ # "dest": "%s_SOV_TR_H" % period,
+ # "pce": 1.0,
+ # "scale": scale_light[index],
+ # "share": share_light,
+ # "period": period
+ # }
+ # mapping["CVM_%s:INT" % period] = {
+ # "orig": "%s_TRK_L_VEH" % period,
+ # "dest": "%s_TRK_L" % period,
+ # "pce": 1.3,
+ # "scale": scale_medium[index],
+ # "share": share_medium,
+ # "period": period
+ # }
+ # mapping["CVM_%s:MNT" % period] = {
+ # "orig": "%s_TRK_M_VEH" % period,
+ # "dest": "%s_TRK_M" % period,
+ # "pce": 1.5,
+ # "scale": scale_medium[index],
+ # "share": share_medium,
+ # "period": period
+ # }
+ # mapping["CVM_%s:HNT" % period] = {
+ # "orig": "%s_TRK_H_VEH" % period,
+ # "dest": "%s_TRK_H" % period,
+ # "pce": 2.5,
+ # "scale": scale_heavy[index],
+ # "share": share_heavy,
+ # "period": period
+ # }
+ # with _m.logbook_trace('Load starting SOV and truck matrices'):
+ # for key, value in mapping.iteritems():
+ # value["array"] = emmebank.matrix(value["orig"]).get_numpy_data(scenario)
- with _m.logbook_trace('Processing CVM from TripMatrices.csv'):
- path = os.path.join(self.output_dir, "TripMatrices.csv")
- table = _pandas.read_csv(path)
- for key, value in mapping.iteritems():
- cvm_array = table[key].values.reshape((4996, 4996)) # reshape method deprecated since v 0.19.0, yma, 2/12/2019
- #factor in cvm demand by the scale factor used in trip generation
- cvm_array = cvm_array/scale_factor
- #scale trips to take care of underestimation
- cvm_array = cvm_array * value["scale"]
+ # with _m.logbook_trace('Processing CVM from TripMatrices.csv'):
+ # path = os.path.join(self.output_dir, "TripMatrices.csv")
+ # table = _pandas.read_csv(path)
+ # for key, value in mapping.iteritems():
+ # cvm_array = table[key].values.reshape((4947, 4947)) # reshape method deprecated since v 0.19.0, yma, 2/12/2019
+ # #factor in cvm demand by the scale factor used in trip generation
+ # cvm_array = cvm_array/scale_factor
+ # #scale trips to take care of underestimation
+ # cvm_array = cvm_array * value["scale"]
- #add remaining share to the correspnding truck matrix
- value["array"] = value["array"] + (cvm_array * (1-value["share"]))
+ # #add remaining share to the correspnding truck matrix
+ # value["array"] = value["array"] + (cvm_array * (1-value["share"]))
- #add cvm truck vehicles to light-heavy trucks
- for key, value in mapping.iteritems():
- period = value["period"]
- cvm_vehs = ['L','M','H']
- if key == "CVM_%s:INT" % period:
- for veh in cvm_vehs:
- key_new = "CVM_%s:%sNT" % (period, veh)
- value_new = mapping[key_new]
- if value_new["share"] != 0.0:
- cvm_array = table[key_new].values.reshape((4996, 4996))
- cvm_array = cvm_array/scale_factor
- cvm_array = cvm_array * value_new["scale"]
- value["array"] = value["array"] + (cvm_array * value_new["share"])
- matrix_unique = {}
- with _m.logbook_trace('Save SOV matrix and convert CV and truck vehicle demand to PCEs for assignment'):
- for key, value in mapping.iteritems():
- matrix = emmebank.matrix(value["dest"])
- array = value["array"] * value["pce"]
- if (matrix in matrix_unique.keys()):
- array = array + emmebank.matrix(value["dest"]).get_numpy_data(scenario)
- matrix.set_numpy_data(array, scenario)
- matrix_unique[matrix] = 1
-
- @_m.logbook_trace('Convert light truck vehicle demand to PCEs for assignment')
- def convert_light_trucks_to_pce(self):
- matrix_calc = dem_utils.MatrixCalculator(self.scenario, self.num_processors)
- # Calculate PCEs for trucks
- periods = ["EA", "AM", "MD", "PM", "EV"]
- mat_trucks = ['TRK_L']
- pce_values = [1.3]
- for period in periods:
- with matrix_calc.trace_run("Period %s" % period):
- for name, pce in zip(mat_trucks, pce_values):
- demand_name = 'mf%s_%s' % (period, name)
- matrix_calc.add(demand_name, '(%s_VEH * %s).max.0' % (demand_name, pce))
+ # #add cvm truck vehicles to light-heavy trucks
+ # for key, value in mapping.iteritems():
+ # period = value["period"]
+ # cvm_vehs = ['L','M','H']
+ # if key == "CVM_%s:INT" % period:
+ # for veh in cvm_vehs:
+ # key_new = "CVM_%s:%sNT" % (period, veh)
+ # value_new = mapping[key_new]
+ # if value_new["share"] != 0.0:
+ # cvm_array = table[key_new].values.reshape((4947, 4947))
+ # cvm_array = cvm_array/scale_factor
+ # cvm_array = cvm_array * value_new["scale"]
+ # value["array"] = value["array"] + (cvm_array * value_new["share"])
+ # matrix_unique = {}
+ # with _m.logbook_trace('Save SOV matrix and convert CV and truck vehicle demand to PCEs for assignment'):
+ # for key, value in mapping.iteritems():
+ # matrix = emmebank.matrix(value["dest"])
+ # array = value["array"] * value["pce"]
+ # if (matrix in matrix_unique.keys()):
+ # array = array + emmebank.matrix(value["dest"]).get_numpy_data(scenario)
+ # matrix.set_numpy_data(array, scenario)
+ # matrix_unique[matrix] = 1
+
+ # @_m.logbook_trace('Convert light truck vehicle demand to PCEs for assignment')
+ # def convert_light_trucks_to_pce(self):
+ # matrix_calc = dem_utils.MatrixCalculator(self.scenario, self.num_processors)
+ # # Calculate PCEs for trucks
+ # periods = ["EA", "AM", "MD", "PM", "EV"]
+ # mat_trucks = ['TRK_L']
+ # pce_values = [1.3]
+ # for period in periods:
+ # with matrix_calc.trace_run("Period %s" % period):
+ # for name, pce in zip(mat_trucks, pce_values):
+ # demand_name = 'mf%s_%s' % (period, name)
+ # matrix_calc.add(demand_name, '(%s_VEH * %s).max.0' % (demand_name, pce))
@_m.logbook_trace('Add aggregate demand')
def add_aggregate_demand(self):
@@ -489,9 +569,9 @@ def add_aggregate_demand(self):
assign_mode = modes_assign[mode]
params = {'p': period, 'm': mode, 'v': vot, 'am': assign_mode}
matrix_calc.add("mf%s_%s_%s" % (period, assign_mode, vot),
- "mf%(p)s_%(am)s_%(v)s "
- "+ (1.0/3.0)*mf%(p)s_%(m)s_EIWORK "
- "+ (1.0/3.0)*mf%(p)s_%(m)s_EINONWORK" % params)
+ "mf%(p)s_%(am)s_%(v)s "
+ "+ (1.0/3.0)*mf%(p)s_%(m)s_EIWORK "
+ "+ (1.0/3.0)*mf%(p)s_%(m)s_EINONWORK" % params)
# External - external faster with single-processor as number of O-D pairs is so small (12 X 12)
# External-external trips do not have transpnder
diff --git a/src/main/emme/toolbox/master_run.py b/src/main/emme/toolbox/master_run.py
index 6a91f16e0..0cf451a87 100644
--- a/src/main/emme/toolbox/master_run.py
+++ b/src/main/emme/toolbox/master_run.py
@@ -61,6 +61,7 @@
import inro.modeller as _m
import inro.emme.database.emmebank as _eb
+import inro.emme.desktop.app as _app
import traceback as _traceback
import glob as _glob
@@ -75,6 +76,8 @@
import socket as _socket
import sys
import os
+import uuid
+import yaml
import pandas as pd
import numpy as np
@@ -82,6 +85,9 @@
import datetime
import pyodbc
import win32com.client as win32
+import shutil
+
+import multiprocessing
_join = os.path.join
_dir = os.path.dirname
@@ -122,6 +128,7 @@ def __init__(self):
"num_processors", "select_link"
]
self._log_level = "ENABLED"
+ self.LOCAL_ROOT = "C:\\abm_runs"
def page(self):
self.load_properties()
@@ -247,26 +254,25 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
create_transit_connector = modeller.tool("sandag.assignment.create_transit_connector")
transit_assign = modeller.tool("sandag.assignment.transit_assignment")
run_truck = modeller.tool("sandag.model.truck.run_truck_model")
- external_internal = modeller.tool("sandag.model.external_internal")
- external_external = modeller.tool("sandag.model.external_external")
import_auto_demand = modeller.tool("sandag.import.import_auto_demand")
import_transit_demand = modeller.tool("sandag.import.import_transit_demand")
- export_transit_skims = modeller.tool("sandag.export.export_transit_skims")
+ # export_transit_skims = modeller.tool("sandag.export.export_transit_skims")
export_for_transponder = modeller.tool("sandag.export.export_for_transponder")
export_network_data = modeller.tool("sandag.export.export_data_loader_network")
export_matrix_data = modeller.tool("sandag.export.export_data_loader_matrices")
- export_tap_adjacent_lines = modeller.tool("sandag.export.export_tap_adjacent_lines")
export_for_commercial_vehicle = modeller.tool("sandag.export.export_for_commercial_vehicle")
validation = modeller.tool("sandag.validation.validation")
file_manager = modeller.tool("sandag.utilities.file_manager")
utils = modeller.module('sandag.utilities.demand')
load_properties = modeller.tool('sandag.utilities.properties')
+ run_summary = modeller.tool("sandag.utilities.run_summary")
self.username = username
self.password = password
props = load_properties(_join(main_directory, "conf", "sandag_abm.properties"))
props.set_year_specific_properties(_join(main_directory, "input", "parametersByYears.csv"))
+ props.set_year_specific_properties(_join(main_directory, "input", "filesByYears.csv"))
props.save()
# Log current state of props file for debugging of UI / file sync issues
attributes = dict((name, props["RunModel." + name]) for name in self._run_model_names)
@@ -280,17 +286,19 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
raise Exception(error_text % name)
scenarioYear = str(props["scenarioYear"])
+ # geographyID = str(props["geographyID"])
startFromIteration = props["RunModel.startFromIteration"]
- precision = props["RunModel.MatrixPrecision"]
+ # precision = props["RunModel.MatrixPrecision"]
minSpaceOnC = props["RunModel.minSpaceOnC"]
sample_rate = props["sample_rates"]
end_iteration = len(sample_rate)
- scale_factor = props["cvm.scale_factor"]
- visualizer_reference_path = props["visualizer.reference.path"]
- visualizer_output_file = props["visualizer.output"]
- visualizer_reference_label = props["visualizer.reference.label"]
- visualizer_build_label = props["visualizer.build.label"]
+ #scale_factor = props["cvm.scale_factor"]
+ # visualizer_reference_path = props["visualizer.reference.path"]
+ # visualizer_output_file = props["visualizer.output"]
+ # visualizer_reference_label = props["visualizer.reference.label"]
+ # visualizer_build_label = props["visualizer.build.label"]
mgraInputFile = props["mgra.socec.file"]
+ fafInputFile = props["faf.file"]
period_ids = list(enumerate(periods, start=int(scenario_id) + 1))
@@ -307,36 +315,52 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
skipBikeLogsums = props["RunModel.skipBikeLogsums"]
skipBuildNetwork = props["RunModel.skipBuildNetwork"]
skipHighwayAssignment = props["RunModel.skipHighwayAssignment"]
- skipTransitConnector = props["RunModel.skipTransitConnector"]
skipTransitSkimming = props["RunModel.skipTransitSkimming"]
+ skipTransitConnector = props["RunModel.skipTransitConnector"]
skipTransponderExport = props["RunModel.skipTransponderExport"]
- skipCoreABM = props["RunModel.skipCoreABM"]
- skipOtherSimulateModel = props["RunModel.skipOtherSimulateModel"]
- skipMAASModel = props["RunModel.skipMAASModel"]
+ skipABMPreprocessing = props["RunModel.skipABMPreprocessing"]
+ skipABMResident = props["RunModel.skipABMResident"]
+ skipABMAirport = props["RunModel.skipABMAirport"]
+ skipABMXborderWait = props["RunModel.skipABMXborderWait"]
+ skipABMXborder = props["RunModel.skipABMXborder"]
+ skipABMVisitor = props["RunModel.skipABMVisitor"]
skipCTM = props["RunModel.skipCTM"]
skipEI = props["RunModel.skipEI"]
- skipExternal = props["RunModel.skipExternalExternal"]
+ skipExternal = props["RunModel.skipExternal"]
skipTruck = props["RunModel.skipTruck"]
+ external_internal = modeller.tool("sandag.model.external_internal")
+ external_external = modeller.tool("sandag.model.external_external")
skipTripTableCreation = props["RunModel.skipTripTableCreation"]
skipFinalHighwayAssignment = props["RunModel.skipFinalHighwayAssignment"]
+ skipFinalHighwayAssignmentStochastic = props["RunModel.skipFinalHighwayAssignmentStochastic"]
+ if skipFinalHighwayAssignmentStochastic == True:
+ makeFinalHighwayAssignmentStochastic = False
+ else:
+ makeFinalHighwayAssignmentStochastic = True
skipFinalTransitAssignment = props["RunModel.skipFinalTransitAssignment"]
skipVisualizer = props["RunModel.skipVisualizer"]
skipDataExport = props["RunModel.skipDataExport"]
+ skipDatalake = props["RunModel.skipDatalake"]
skipDataLoadRequest = props["RunModel.skipDataLoadRequest"]
skipDeleteIntermediateFiles = props["RunModel.skipDeleteIntermediateFiles"]
- skipTransitShed = props["RunModel.skipTransitShed"]
- transitShedThreshold = props["transitShed.threshold"]
- transitShedTOD = props["transitShed.TOD"]
+ # skipTransitShed = props["RunModel.skipTransitShed"]
+ # transitShedThreshold = props["transitShed.threshold"]
+ # transitShedTOD = props["transitShed.TOD"]
+
+ #check if visualizer.reference.path is valid in filesbyyears.csv
+ # if not os.path.exists(visualizer_reference_path):
+ # raise Exception("Visualizer reference %s does not exist. Check filesbyyears.csv." %(visualizer_reference_path))
if useLocalDrive:
+ folder_name = os.path.basename(main_directory)
+ if not os.path.exists(_join(self.LOCAL_ROOT, username, folder_name, "report")): # check free space only if it is a new run
+ self.check_free_space(minSpaceOnC)
+ # if initialization copy ALL files from remote
+ # else check file meta data and copy those that have changed
initialize = (skipInitialization == False and startFromIteration == 1)
local_directory = file_manager(
"DOWNLOAD", main_directory, username, scenario_id, initialize=initialize)
self._path = local_directory
- if not os.path.exists(_join(self._path, "output")): # check free space only if it is a new run
- self.check_free_space(minSpaceOnC)
- # if initialization copy ALL files from remote
- # else check file meta data and copy those that have changed
else:
self._path = main_directory
@@ -352,41 +376,116 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
external_zones = "1-12"
travel_modes = ["auto", "tran", "nmot", "othr"]
- core_abm_files = ["Trips*.omx", "InternalExternalTrips*.omx"]
+ core_abm_files = ["Trips*.omx"]
core_abm_files = [mode + name for name in core_abm_files for mode in travel_modes]
smm_abm_files = ["AirportTrips*.omx", "CrossBorderTrips*.omx", "VisitorTrips*.omx"]
smm_abm_files = [mode + name for name in smm_abm_files for mode in travel_modes]
+ smm_csv_files = ["airport_out.CBX.csv", "airport_out.SAN.csv", "crossBorderTours.csv", "crossBorderTrips.csv", "visitorTours.csv", "visitorTrips.csv"]
+ smm_abm_files.extend(smm_csv_files)
maas_abm_files = ["EmptyAVTrips.omx", "TNCVehicleTrips*.omx"]
relative_gap = props["convergence"]
- max_assign_iterations = 1000
+ max_assign_iterations = 100
mgra_lu_input_file = props["mgra.socec.file"]
+ #change emme databank dimensions based on number of select links - SANDAG ABM2+ Enhancements (06-28-2021)
+ num_select_links = 0
+ if select_link:
+ num_select_links = len(_json.loads(select_link))
+ change_dimensions = modeller.tool("inro.emme.data.database.change_database_dimensions")
+ dims = main_emmebank.dimensions
+ num_nodes = dims["regular_nodes"] + dims['centroids']
+ num_links = dims["links"]
+ num_turn_entries = dims["turn_entries"]
+ num_transit_lines = dims['transit_lines']
+ num_transit_segments = dims['transit_segments']
+ num_traffic_classes = 15
+
+ additional_node_extra_attributes = 4
+ additional_link_extra_attributes = 26
+ additional_line_extra_attributes = 4
+ additional_segment_extra_attributes = 12
+
+ extra_attribute_values = 18000000
+ extra_attribute_values += (num_nodes + 1) * additional_node_extra_attributes
+ extra_attribute_values += (num_links + 1) * additional_link_extra_attributes
+ extra_attribute_values += (num_transit_lines + 1)* additional_line_extra_attributes
+ extra_attribute_values += (num_transit_segments + 1) * additional_segment_extra_attributes
+
+ if num_select_links > 3:
+ extra_attribute_values += (num_select_links - 3) * ((num_links + 1) * (num_traffic_classes + 1) + (num_turn_entries + 1) * (num_traffic_classes))
+
+ if extra_attribute_values > dims["extra_attribute_values"] or dims["full_matrices"] < 9999:
+ dims["extra_attribute_values"] = extra_attribute_values
+ dims["full_matrices"] = 9999
+ #add logging for when this setp is run, add before and after attribute value
+ #change_dimensions(emmebank_dimensions=dims, emmebank=main_emmebank, keep_backup=False)
+ #replaced the above line with the below lines - suggested by Antoine, Bentley (2022-06-02)
+ if main_emmebank.scenario(1) is None:
+ main_emmebank.create_scenario(1)
+ change_dimensions(dims, main_emmebank, False)
+ # with open(_join(self._path, "logFiles", "select_link_log.txt"),"a+") as f:
+ # f.write("Num Select links {}\nExtra Attribute Value {}".format(num_select_links,extra_attribute_values))
+ # f.close()
+
+ for period in periods:
+ if os.path.exists(_join(self._path, "emme_project", "Database_transit_" + period, "emmebank")):
+ with _eb.Emmebank(_join(self._path, "emme_project", "Database_transit_" + period, "emmebank")) as transit_db:
+ transit_db_dims = transit_db.dimensions
+ num_nodes = transit_db_dims["regular_nodes"] + transit_db_dims['centroids']
+ num_links = transit_db_dims["links"]
+ num_turn_entries = transit_db_dims["turn_entries"]
+ num_transit_lines = transit_db_dims['transit_lines']
+ num_transit_segments = transit_db_dims['transit_segments']
+ num_traffic_classes = 15
+
+ extra_attribute_values = 18000000
+ extra_attribute_values += (num_nodes + 1) * additional_node_extra_attributes
+ extra_attribute_values += (num_links + 1) * additional_link_extra_attributes
+ extra_attribute_values += (num_transit_lines + 1)* additional_line_extra_attributes
+ extra_attribute_values += (num_transit_segments + 1) * additional_segment_extra_attributes
+
+ if num_select_links > 3:
+ extra_attribute_values += 18000000 + (num_select_links - 3) * ((num_links + 1) * (num_traffic_classes + 1) + (num_turn_entries + 1) * (num_traffic_classes))
+
+ if extra_attribute_values > transit_db_dims["extra_attribute_values"] or transit_db_dims["full_matrices"] < 9999:
+ transit_db_dims["extra_attribute_values"] = extra_attribute_values
+ transit_db_dims["full_matrices"] = 9999
+ #change_dimensions(emmebank_dimensions=transit_db_dims, emmebank=transit_db, keep_backup=False)
+ #replaced the above line with the below lines - suggested by Antoine, Bentley (2022-06-02)
+ if transit_db.scenario(1) is None:
+ transit_db.create_scenario(1)
+ change_dimensions(transit_db_dims, transit_db, False)
+
with _m.logbook_trace("Setup and initialization"):
self.set_global_logbook_level(props)
# Swap Server Configurations
- self.run_proc("serverswap.bat", [drive, path_no_drive, path_forward_slash], "Run ServerSwap")
- self.check_for_fatal(_join(self._path, "logFiles", "serverswap.log"),
- "ServerSwap failed! Open logFiles/serverswap.log for details.")
- self.run_proc("checkAtTransitNetworkConsistency.cmd", [drive, path_forward_slash],
- "Checking if AT and Transit Networks are consistent")
- self.check_for_fatal(_join(self._path, "logFiles", "AtTransitCheck_event.log"),
- "AT and Transit network consistency checking failed! Open AtTransitCheck_event.log for details.")
+ # self.run_proc("serverswap.bat", [drive, path_no_drive, path_forward_slash], "Run ServerSwap")
+ # self.check_for_fatal(_join(self._path, "logFiles", "serverswap.log"),
+ # "ServerSwap failed! Open logFiles/serverswap.log for details.")
+ # self.run_proc("checkAtTransitNetworkConsistency.cmd", [drive, path_forward_slash],
+ # "Checking if AT and Transit Networks are consistent")
+ # self.check_for_fatal(_join(self._path, "logFiles", "AtTransitCheck_event.log"),
+ # "AT and Transit network consistency checking failed! Open AtTransitCheck_event.log for details.")
+
+ #get number of households to pass on sample size to activitysim
+ householdFile = pd.read_csv(_join(self._path, "input", "synthetic_households_" + scenarioYear + "_base.csv"))
+ hh_resident_size = len(householdFile)
+ del(householdFile)
if startFromIteration == 1: # only run the setup / init steps if starting from iteration 1
if not skipWalkLogsums:
self.run_proc("runSandagWalkLogsums.cmd", [drive, path_forward_slash],
- "Walk - create AT logsums and impedances")
+ "Walk - create AT logsums and impedances", capture_output=True)
if not skipCopyWalkImpedance:
- self.copy_files(["walkMgraEquivMinutes.csv", "walkMgraTapEquivMinutes.csv"],
+ self.copy_files(["walkMgraEquivMinutes.csv", "microMgraEquivMinutes.csv"],
input_dir, output_dir)
if not skip4Ds:
- run4Ds(path=self._path, int_radius=0.65, ref_path=visualizer_reference_path)
+ run4Ds(path=self._path, int_radius=0.65, ref_path='visualizer_reference_path')
-
- mgraFile = 'mgra13_based_input' + str(scenarioYear) + '.csv'
+ mgraFile = 'mgra15_based_input_' + str(scenarioYear) + '_base.csv' # Should be read in from properties? -JJF
self.complete_work(scenarioYear, input_dir, output_dir, mgraFile, "walkMgraEquivMinutes.csv")
if not skipBuildNetwork:
@@ -410,7 +509,6 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
if not skipInputChecker:
input_checker(path=self._path)
- export_tap_adjacent_lines(_join(output_dir, "tapLines.csv"), base_scenario)
# parse vehicle availablility file by time-of-day
availability_file = "vehicle_class_availability.csv"
availabilities = self.parse_availability_file(_join(input_dir, availability_file), periods)
@@ -446,15 +544,21 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
traffic_components.append("traffic_demand")
init_matrices(traffic_components, periods, base_scenario, deleteAllMatrices)
- transit_scenario = init_transit_db(base_scenario, add_database=not useLocalDrive)
- transit_emmebank = transit_scenario.emmebank
- transit_components = ["transit_skims"]
- if not skipCopyWarmupTripTables:
- transit_components.append("transit_demand")
- init_matrices(transit_components, periods, transit_scenario, deleteAllMatrices)
+ transit_scenario_dict = {}
+ transit_emmebank_dict = {}
+ for period in periods:
+ transit_scenario_dict[period] = init_transit_db(base_scenario, period, add_database=not useLocalDrive)
+ transit_emmebank_dict[period] = transit_scenario_dict[period].emmebank
+ transit_components = ["transit_skims"]
+ if not skipCopyWarmupTripTables:
+ transit_components.append("transit_demand")
+ init_matrices(transit_components, [period], transit_scenario_dict[period], deleteAllMatrices)
else:
- transit_emmebank = _eb.Emmebank(_join(self._path, "emme_project", "Database_transit", "emmebank"))
- transit_scenario = transit_emmebank.scenario(base_scenario.number)
+ transit_scenario_dict = {}
+ transit_emmebank_dict = {}
+ for period in periods:
+ transit_emmebank_dict[period] = _eb.Emmebank(_join(self._path, "emme_project", "Database_transit_" + period, "emmebank"))
+ transit_scenario_dict[period] = transit_emmebank_dict[period].scenario(base_scenario.number)
if not skipCopyWarmupTripTables:
# import seed auto demand and seed truck demand
@@ -462,30 +566,31 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
omx_file = _join(input_dir, "trip_%s.omx" % period)
import_demand(omx_file, "AUTO", period, base_scenario)
import_demand(omx_file, "TRUCK", period, base_scenario)
-
+
if not skipBikeLogsums:
self.run_proc("runSandagBikeLogsums.cmd", [drive, path_forward_slash],
"Bike - create AT logsums and impedances")
if not skipCopyBikeLogsum:
self.copy_files(["bikeMgraLogsum.csv", "bikeTazLogsum.csv"], input_dir, output_dir)
-
+
else:
base_scenario = main_emmebank.scenario(scenario_id)
- transit_emmebank = _eb.Emmebank(_join(self._path, "emme_project", "Database_transit", "emmebank"))
- transit_scenario = transit_emmebank.scenario(base_scenario.number)
+ transit_scenario_dict = {}
+ transit_emmebank_dict = {}
+ for period in periods:
+ transit_emmebank_dict[period] = _eb.Emmebank(_join(self._path, "emme_project", "Database_transit_" + period, "emmebank"))
+ transit_scenario_dict[period] = transit_emmebank_dict[period].scenario(base_scenario.number)
# Check that setup files were generated
- self.run_proc("CheckOutput.bat", [drive + path_no_drive, 'Setup'], "Check for outputs")
+ # self.run_proc("CheckOutput.bat", [drive + path_no_drive, 'Setup'], "Check for outputs")
# Note: iteration indexes from 0, msa_iteration indexes from 1
for iteration in range(startFromIteration - 1, end_iteration):
msa_iteration = iteration + 1
with _m.logbook_trace("Iteration %s" % msa_iteration):
- if not skipCoreABM[iteration] or not skipOtherSimulateModel[iteration] or not skipMAASModel[iteration]:
- self.run_proc("runMtxMgr.cmd", [drive, drive + path_no_drive], "Start matrix manager")
- self.run_proc("runDriver.cmd", [drive, drive + path_no_drive], "Start JPPF Driver")
- self.run_proc("StartHHAndNodes.cmd", [drive, path_no_drive],
- "Start HH Manager, JPPF Driver, and nodes")
+ #create a folder to store skims
+ if not os.path.exists(_join(output_dir, "skims")):
+ os.mkdir(_join(output_dir, "skims"))
if not skipHighwayAssignment[iteration]:
# run traffic assignment
@@ -494,60 +599,97 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
self.run_traffic_assignments(
base_scenario, period_ids, msa_iteration, relative_gap,
max_assign_iterations, num_processors)
- self.run_proc("CreateD2TAccessFile.bat", [drive, path_forward_slash],
- "Create drive to transit access file", capture_output=True)
if not skipTransitSkimming[iteration]:
# run transit assignment
# export transit skims
with _m.logbook_trace("Transit assignments and skims"):
+
for number, period in period_ids:
src_period_scenario = main_emmebank.scenario(number)
transit_assign_scen = build_transit_scen(
- period=period, base_scenario=src_period_scenario,
- transit_emmebank=transit_emmebank,
- scenario_id=src_period_scenario.id,
- scenario_title="%s %s transit assign" % (base_scenario.title, period),
- data_table_name=scenarioYear, overwrite=True)
-
- if iteration==0:
- create_transit_connector(transit_assign_scen)
-
- transit_assign(period, transit_assign_scen, data_table_name=scenarioYear,
- skims_only=True, num_processors=num_processors)
-
- omx_file = _join(output_dir, "transit_skims.omx")
- export_transit_skims(omx_file, periods, transit_scenario)
+ period=period, base_scenario=src_period_scenario,
+ transit_emmebank=transit_emmebank_dict[period],
+ scenario_id=src_period_scenario.id,
+ scenario_title="%s %s transit assign" % (base_scenario.title, period),
+ data_table_name=scenarioYear, overwrite=True)
+
+ if (not skipTransitConnector) and (msa_iteration == 1):
+ if not os.path.exists(_join(input_dir, "transit_connectors")):
+ os.mkdir(_join(input_dir, "transit_connectors"))
+ # #in case of new network, create transit connectors from scratch, and export them to the input folder for future runs/iterations
+ # create_transit_connector(period, transit_assign_scen, create_connector_flag=True)
+ # else:
+ # #this would import connectors from the input/transit_connectors folder, and not create them from scratch
+ # create_transit_connector(period, transit_assign_scen, create_connector_flag=False)
+
+ # Run transit assignment in separate process
+ # Running in same process slows OMX skim export for unknown reason
+ # transit_emmebank need to be closed and re-opened to be accessed by separate process
+ transit_emmebank_dict = self.run_transit_assignments(transit_emmebank_dict, scenarioYear, output_dir, ((not skipTransitConnector) and (msa_iteration == 1)), main_directory)
+ for period in periods:
+ transit_scenario_dict[period] = transit_emmebank_dict[period].scenario(base_scenario.number)
+ # _m.Modeller().desktop.refresh_data()
+
+ # #output transit skims by period
+ # for number, period in period_ids:
+ # transit_scenario = transit_emmebank.scenario(number)
+ # omx_file = _join(output_dir, "skims", "transit_skims_" + period + ".omx")
+ # export_transit_skims(omx_file, [period], transit_scenario, big_to_zero=False)
if not skipTransponderExport[iteration]:
am_scenario = main_emmebank.scenario(base_scenario.number + 2)
export_for_transponder(output_dir, num_processors, am_scenario)
- # For each step move trip matrices so run will stop if ctramp model
- # doesn't produced csv/omx files for assignment
- # also needed as CT-RAMP does not overwrite existing files
- if not skipCoreABM[iteration]:
- self.remove_prev_iter_files(core_abm_files, output_dir, iteration)
+ if msa_iteration==1:
+ self.run_proc("runSandag_ScenManagement.cmd",
+ [main_directory, str(props["scenarioYear"])],
+ "Running Scenario Management", capture_output=True)
+
+ if not skipABMPreprocessing[iteration]:
self.run_proc(
- "runSandagAbm_SDRM.cmd",
- [drive, drive + path_forward_slash, sample_rate[iteration], msa_iteration],
- "Java-Run CT-RAMP", capture_output=True)
- if not skipOtherSimulateModel[iteration]:
- self.remove_prev_iter_files(smm_abm_files, output_dir, iteration)
+ "runSandagAbm_Preprocessing.cmd",
+ [drive, drive + path_forward_slash, msa_iteration, scenarioYear],
+ "Creating all the required files to run the ActivitySim models", capture_output=True)
+ if not skipABMResident[iteration]:
self.run_proc(
- "runSandagAbm_SMM.cmd",
- [drive, drive + path_forward_slash, sample_rate[iteration], msa_iteration],
- "Java-Run airport model, visitor model, cross-border model", capture_output=True)
-
- if not skipMAASModel[iteration]:
- self.remove_prev_iter_files(maas_abm_files, output_dir, iteration)
+ "runSandagAbm_ActivitySimResident.cmd",
+ [drive, drive + path_forward_slash, int(sample_rate[iteration] * hh_resident_size), msa_iteration],
+ "Running ActivitySim resident model", capture_output=True)
+ if not skipABMAirport[iteration]:
+ hh_airport_size = {}
+ for airport in ["san", "cbx"]:
+ householdFile = pd.read_csv(_join(self._path, "input", "households_airport.{}.csv".format(airport)))
+ hh_airport_size[airport] = len(householdFile)
+ del(householdFile)
self.run_proc(
- "runSandagAbm_MAAS.cmd",
- [drive, drive + path_forward_slash, sample_rate[iteration], msa_iteration],
- "Java-Run AV allocation model and TNC routing model", capture_output=True)
+ "runSandagAbm_ActivitySimAirport.cmd",
+ [drive, drive + path_forward_slash, int(sample_rate[iteration] * hh_airport_size["san"]), int(sample_rate[iteration] * hh_airport_size["cbx"])],
+ "Running ActivitySim airport models", capture_output=True)
+ if (not skipABMXborderWait) and (iteration == 0):
+ self.run_proc(
+ "runSandagAbm_ActivitySimXborderWaitModel.cmd",
+ [drive, drive + path_forward_slash],
+ "Running ActivitySim wait time models", capture_output=True)
+ if not skipABMXborder[iteration]:
+ householdFile = pd.read_csv(_join(self._path, "input", "households_xborder.csv"))
+ hh_xborder_size = len(householdFile)
+ del(householdFile)
+ self.run_proc(
+ "runSandagAbm_ActivitySimXborder.cmd",
+ [drive, drive + path_forward_slash, int(sample_rate[iteration] * hh_xborder_size)],
+ "Running ActivitySim crossborder model", capture_output=True)
+ if not skipABMVisitor[iteration]:
+ householdFile = pd.read_csv(_join(self._path, "input", "households_visitor.csv"))
+ hh_visitor_size = len(householdFile)
+ del(householdFile)
+ self.run_proc(
+ "runSandagAbm_ActivitySimVisitor.cmd",
+ [drive, drive + path_forward_slash, int(sample_rate[iteration] * hh_visitor_size)],
+ "Running ActivitySim visitor model", capture_output=True)
if not skipCTM[iteration]:
- export_for_commercial_vehicle(output_dir, base_scenario)
+ #export_for_commercial_vehicle(output_dir + '/skims', base_scenario)
self.run_proc(
"cvm.bat",
[drive, path_no_drive],
@@ -556,7 +698,10 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
external_zones = "1-12"
if not skipTruck[iteration]:
# run truck model (generate truck trips)
- run_truck(True, input_dir, input_truck_dir, num_processors, base_scenario)
+ self.run_proc(
+ "htm.bat",
+ [drive, path_no_drive, fafInputFile, mgraInputFile, "traffic_skims_PM"],
+ "Heavy truck model", capture_output=True)
# run EI model "US to SD External Trip Model"
if not skipEI[iteration]:
external_internal(input_dir, base_scenario)
@@ -564,11 +709,11 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
if not skipExternal[iteration]:
external_external(input_dir, external_zones, base_scenario)
+
# import demand from all sub-market models from CT-RAMP and
# add CV trips to auto demand
- # add EE and EI trips to auto demand
if not skipTripTableCreation[iteration]:
- import_auto_demand(output_dir, external_zones, num_processors, base_scenario)
+ import_auto_demand(output_dir + '/assignment', external_zones, num_processors, base_scenario)
if not skipFinalHighwayAssignment:
with _m.logbook_trace("Final traffic assignments"):
@@ -576,70 +721,93 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
final_iteration = 4
self.run_traffic_assignments(
base_scenario, period_ids, final_iteration, relative_gap, max_assign_iterations,
- num_processors, select_link)
+ num_processors, select_link, makeFinalHighwayAssignmentStochastic, input_dir)
+ self.run_proc(
+ "runSandagAbm_Preprocessing.cmd",
+ [drive, drive + path_forward_slash, final_iteration, scenarioYear],
+ "Adding DIST skim", capture_output=True)
if not skipFinalTransitAssignment:
- import_transit_demand(output_dir, transit_scenario)
+ import_transit_demand(output_dir + '/assignment', transit_scenario_dict)
with _m.logbook_trace("Final transit assignments"):
# Final iteration includes the transit skims per ABM-1072
for number, period in period_ids:
src_period_scenario = main_emmebank.scenario(number)
transit_assign_scen = build_transit_scen(
period=period, base_scenario=src_period_scenario,
- transit_emmebank=transit_emmebank, scenario_id=src_period_scenario.id,
- scenario_title="%s - %s transit assign" % (base_scenario.title, period),
+ transit_emmebank=transit_emmebank_dict[period],
+ scenario_id=src_period_scenario.id,
+ scenario_title="%s %s transit assign" % (base_scenario.title, period),
data_table_name=scenarioYear, overwrite=True)
- transit_assign(period, transit_assign_scen, data_table_name=scenarioYear,
- num_processors=num_processors)
- omx_file = _join(output_dir, "transit_skims.omx")
- export_transit_skims(omx_file, periods, transit_scenario, big_to_zero=True)
- if not skipTransitShed:
- # write walk and drive transit sheds
- self.run_proc("runtransitreporter.cmd", [drive, path_forward_slash, transitShedThreshold, transitShedTOD],
- "Create walk and drive transit sheds",
- capture_output=True)
+ #this would import connectors from the input/transit_connectors folder, and not create them from scratch
+ # create_transit_connector(period, transit_assign_scen, create_connector_flag=False)
+
+ # Run transit assignment in separate process
+ # Running in same process slows OMX skim export for unknown reason
+ # transit_emmebank need to be closed and re-opened to be accessed by separate process
+ transit_emmebank_dict = self.run_transit_assignments(transit_emmebank_dict, scenarioYear, output_dir, False, main_directory)
+ for period in periods:
+ transit_scenario_dict[period] = transit_emmebank_dict[period].scenario(base_scenario.number)
+ # _m.Modeller().desktop.refresh_data()
+
+ # #output transit skims by period
+ # for number, period in period_ids:
+ # transit_scenario = transit_emmebank.scenario(number)
+ # omx_file = _join(output_dir, "skims", "transit_skims_" + period + ".omx")
+ # export_transit_skims(omx_file, [period], transit_scenario, big_to_zero=False)
+
+ # if not skipTransitShed:
+ # # write walk and drive transit sheds
+ # self.run_proc("runtransitreporter.cmd", [drive, path_forward_slash, transitShedThreshold, transitShedTOD],
+ # "Create walk and drive transit sheds",
+ # capture_output=True)
if not skipVisualizer:
self.run_proc("RunViz.bat",
- [drive, path_no_drive, visualizer_reference_path, visualizer_output_file, "NO", visualizer_reference_label, visualizer_build_label, mgraInputFile],
+ [drive, drive + path_forward_slash],
"HTML Visualizer", capture_output=True)
if not skipDataExport:
+
# export network and matrix results from Emme directly to T if using local drive
output_directory = _join(self._path, "output")
- export_network_data(self._path, scenario_id, main_emmebank, transit_emmebank, num_processors)
- export_matrix_data(output_directory, base_scenario, transit_scenario)
+ export_network_data(self._path, scenario_id, main_emmebank, transit_emmebank_dict, num_processors)
+ export_matrix_data(output_directory, base_scenario)
# export core ABM data
# Note: uses relative project structure, so cannot redirect to T drive
- self.run_proc("DataExporter.bat", [drive, path_no_drive], "Export core ABM data",capture_output=True)
- #Validation for 2016 scenario
+ # self.run_proc("DataExporter.bat", [drive, path_no_drive], "Export core ABM data",capture_output=True)
+ # aggregate_models = {}
+ # for agg_model in ['eetrip', 'eitrip', 'trucktrip']:#TODO ['commercialVehicleTrips','internalExternalTrips']:
+ # aggregate_models[agg_model] = str(os.path.join(self._path,'report',agg_model+'.csv'))
+ # gen_utils.DataLakeExporter(ScenarioPath=self._path).write_to_datalake(aggregate_models)
+ self.run_proc(
+ "export_hwy_shape.cmd",
+ [drive, drive + path_forward_slash],
+ "Exporting highway shapefile", capture_output=True)
+
+ if not skipDatalake:
+ self.write_metadata(main_directory, scenario_title, select_link, username, scenarioYear, sample_rate)
+ self.run_proc(
+ "write_to_datalake.cmd",
+ [drive, drive + path_forward_slash],
+ "Writing model output to datalake", capture_output=True)
+
+ #Validation for 2022 scenario
if scenarioYear == "2016":
- validation(self._path, main_emmebank, base_scenario)
- ### CL: Below step is temporarily used to update validation output files. When Gregor complete Upload procedure, below step should be removed. 05/31/20
- self.run_proc("ExcelUpdate.bat", # forced to update excel links
- [drive, path_no_drive, scenarioYear, 0],
- "Excel Update",
- capture_output=True)
-
-
-
- # UPLOAD DATA AND SWITCH PATHS
- if useLocalDrive:
- file_manager("UPLOAD", main_directory, username, scenario_id,
- delete_local_files=not skipDeleteIntermediateFiles)
- self._path = main_directory
- drive, path_no_drive = os.path.splitdrive(self._path)
- init_transit_db.add_database(
- _eb.Emmebank(_join(main_directory, "emme_project", "Database_transit", "emmebank")))
+ validation(self._path, main_emmebank, base_scenario) # to create source_EMME.xlsx
- if not skipDataLoadRequest:
- start_db_time = datetime.datetime.now() # record the time to search for request id in the load request table, YMA, 1/23/2019
- # start_db_time = start_db_time + datetime.timedelta(minutes=0)
+ # #Create Worksheet for ABM Validation using PowerBI Visualization #JY: can be uncommented if deciding to incorporate PowerBI vis in ABM workflow
+ # self.run_proc("VisPowerBI.bat", # forced to update excel links
+ # [drive, path_no_drive, scenarioYear, 0],
+ # "VisPowerBI",
+ # capture_output=True)
- self.run_proc("DataLoadRequest.bat",
- [drive + path_no_drive, end_iteration, scenarioYear, sample_rate[end_iteration - 1]],
- "Data load request")
+ ### CL: Below step is temporarily used to update validation output files. When Gregor complete Upload procedure, below step should be removed. 05/31/20
+ # self.run_proc("ExcelUpdate.bat", # forced to update excel links
+ # [drive, path_no_drive, scenarioYear, 0],
+ # "ExcelUpdate",
+ # capture_output=True)
### ES: Commented out until this segment is updated to reference new database. 9/10/20 ###
# add segments below for auto-reporting, YMA, 1/23/2019
@@ -676,6 +844,31 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
# "Excel Update",
# capture_output=True)
+ # # terminate all java processes
+ # _subprocess.call("taskkill /F /IM java.exe")
+
+ # # close all DOS windows
+ # _subprocess.call("taskkill /F /IM cmd.exe")
+
+ # UPLOAD DATA AND SWITCH PATHS
+ if useLocalDrive:
+ file_manager("UPLOAD", main_directory, username, scenario_id,
+ delete_local_files=not skipDeleteIntermediateFiles)
+ self._path = main_directory
+ drive, path_no_drive = os.path.splitdrive(self._path)
+ # self._path = main_directory
+ # drive, path_no_drive = os.path.splitdrive(self._path)
+ for period in periods:
+ init_transit_db.add_database(
+ _eb.Emmebank(_join(main_directory, "emme_project", "Database_transit_" + period, "emmebank")))
+
+ if not skipDataLoadRequest:
+ start_db_time = datetime.datetime.now() # record the time to search for request id in the load request table, YMA, 1/23/2019
+ # start_db_time = start_db_time + datetime.timedelta(minutes=0)
+ # self.run_proc("DataLoadRequest.bat",
+ # [drive + path_no_drive, end_iteration, scenarioYear, sample_rate[end_iteration - 1], geographyID],
+ # "Data load request")
+
# delete trip table files in iteration sub folder if model finishes without errors
if not useLocalDrive and not skipDeleteIntermediateFiles:
for msa_iteration in range(startFromIteration, end_iteration + 1):
@@ -683,11 +876,8 @@ def __call__(self, main_directory, scenario_id, scenario_title, emmebank_title,
["auto*Trips*.omx", "tran*Trips*.omx", "nmot*.omx", "othr*.omx", "trip*.omx"],
_join(output_dir, "iter%s" % (msa_iteration)))
- # terminate all java processes
- _subprocess.call("taskkill /F /IM java.exe")
-
- # close all DOS windows
- _subprocess.call("taskkill /F /IM cmd.exe")
+ # record run time
+ run_summary(path=self._path)
def set_global_logbook_level(self, props):
self._log_level = props.get("RunModel.LogbookLevel", "ENABLED")
@@ -706,8 +896,83 @@ def set_global_logbook_level(self, props):
except KeyError:
raise Exception("properties.RunModel.LogLevel: value must be one of %s" % ",".join(log_states.keys()))
+ def run_transit_assignments(self, transit_emmebank_dict, scenarioYear, output_dir, create_connector_flag, main_directory_original):
+
+ scenario_id = 100
+ periods = ["EA", "AM", "MD", "PM", "EV"]
+ period_ids = list(enumerate(periods, start=int(scenario_id) + 1))
+
+ transit_processors = (multiprocessing.cpu_count() - 1) // 5
+
+ transit_emmebank_path_dict = {}
+
+ processes = []
+
+ with _m.logbook_trace("Running all period transit assignmens"):
+ for number, period in period_ids:
+
+ transit_emmebank_path_dict[period] = transit_emmebank_dict[period].path
+ emme_project_dir = _dir(_dir(transit_emmebank_path_dict[period]))
+ main_directory = _dir(emme_project_dir)
+
+ if os.path.exists(_join(emme_project_dir, "transit_assign_dummy_project_" + period)):
+ shutil.rmtree(_join(emme_project_dir, "transit_assign_dummy_project_" + period))
+ project_path = _app.create_project(emme_project_dir, "transit_assign_dummy_project_" + period)
+ dummy_desktop = _app.start_dedicated(visible=False, user_initials="SD", project=project_path)
+ dummy_desktop.add_modeller_toolbox(_join(main_directory_original, "emme_project", "Scripts", "sandag_toolbox.mtbx"))
+ data_explorer = dummy_desktop.data_explorer()
+ db = data_explorer.add_database(transit_emmebank_dict[period].path)
+ db.open()
+
+ project_table_db = _m.Modeller().desktop.project.data_tables()
+ data = project_table_db.table("%s_transit_passes" % scenarioYear).get_data()
+ dummy_project_table_db = dummy_desktop.project.data_tables()
+ dummy_project_table_db.create_table("%s_transit_passes" % scenarioYear, data, overwrite=True)
+
+ dummy_desktop.project.save()
+ dummy_desktop.close()
+ transit_emmebank_dict[period].dispose()
+
+ _time.sleep(2)
+
+ script = _join(main_directory, "python", "emme", "run_transit_assignment.py")
+ args = [sys.executable, script, "--root_dir", '"%s"' % main_directory, "--project_path", '"%s"' % project_path,
+ "--period", '"%s"' % period, "--number", '"%s"' % number, "--proc", '"%s"' % transit_processors,
+ "--output_dir", '"%s"' % output_dir]
+ if create_connector_flag:
+ args.append("--create_connector_flag")
+ p = _subprocess.Popen(args, shell=True)
+ processes.append({
+ "p": p,
+ "period": period
+ })
+ _time.sleep(2)
+
+ # NOTE: could remove project when done
+ #shutil.rmtree(project_dir)
+ # NOTE: need to pass back re-opened objects
+
+ for p in processes:
+ report = _m.PageBuilder(title="Command report")
+ out, err = p["p"].communicate()
+ self.add_html(report, 'Output: