diff --git a/src/asim/configs/resident/summarize.csv b/src/asim/configs/resident/summarize.csv new file mode 100644 index 000000000..bfc1dfc3a --- /dev/null +++ b/src/asim/configs/resident/summarize.csv @@ -0,0 +1,116 @@ +Description,Output,Expression +# These summaries are checked by test module +,households_count,persons_merged[['household_id']].nunique().rename('households') +,trips_by_mode_count,trips_merged.groupby('trip_mode')[['number_of_participants']].sum().T + +# Calculate total VMT by summing auto_distance from tours_merged +# (auto_distance is calculated by an expression in summarize_preprocessor.csv) +# Initially save as a temporary variable so it can be reused +,_total_vmt,trips_merged[['auto_distance']].sum() +# Then save to CSV +,total_vmt,_total_vmt.rename('vmt') + +# Calculate vmt per capita +# (All outputs to CSV have to be a Pandas Series or DataFrame) +,vmt_per_capita,"pd.Series(_total_vmt / len(persons_merged), name='vmt_per_capita')" + +# Calculate vmt per capita by home taz +,_vmt_per_home_taz,trips_merged.groupby('home_zone_id').auto_distance.sum() +,_person_per_home_taz,persons_merged.groupby('home_zone_id').size() +,_vmt_per_capita_by_home_taz,(_vmt_per_home_taz/_person_per_home_taz).fillna(0) +,vmt_per_capita_by_home_taz,_vmt_per_capita_by_home_taz.rename('vmt_per_capita_by_home_taz').reset_index() + +# Calculate vmt per capita by work taz +,_vmt_per_work_taz,trips_merged.groupby('workplace_zone_id').auto_distance.sum() +,_person_per_work_taz,persons_merged.groupby('workplace_zone_id').size() +,vmt_per_capita_by_work_taz,(_vmt_per_work_taz/_person_per_work_taz).fillna(0).rename('vmt_per_capita_by_work_taz').reset_index() + +# Count persons +,persons_count,persons_merged[['household_id']].count().rename('persons') + +# Count person-tours +,person_tours,"trips_merged[['tour_id', 'number_of_participants']].drop_duplicates()[['number_of_participants']].sum().rename('tours')" + +# Count person-trips +,person_trips,trips_merged[['number_of_participants']].sum().rename('trips') + +# Count tours +,tours_count,tours_merged.reset_index()[['tour_id']].count().rename('tours') + +# Count trips +,trips_count,trips_merged.reset_index()[['trip_id']].count().rename('trips') + +# Count tours per household +,_tours,"trips_merged[['tour_id', 'number_of_participants']].drop_duplicates()['number_of_participants'].sum()" +,_households,persons_merged['household_id'].nunique() +,tours_per_household_count,"pd.Series(_tours / _households, name='tours_per_household')" + +# Count trips per household +,_trips,trips_merged['number_of_participants'].sum() +,trips_per_household_count,"pd.Series(_trips / _households, name='trips_per_household')" + +# Count trips by major mode +#,trips_by_major_mode_count,trips_merged.groupby('major_trip_mode')[['number_of_participants']].sum().T + +# Count trips by income category and major mode +,_trips_with_income,"pd.merge(trips_merged, persons_merged['income_category'], left_on='person_id', right_index=True)" +,trip_by_income_category_major_mode,"_trips_with_income.groupby(['income_category', 'major_trip_mode']).size().unstack(-1).reset_index()" + +# Count trips by purpose +,trips_by_purpose_count,trips_merged.groupby('primary_purpose_trip')[['number_of_participants']].sum().T + +# Count trips by purpose and departure time +,trip_purpose_by_time_of_day,"trips_merged.groupby(['depart','primary_purpose_trip'])['number_of_participants'].sum().unstack(-1).reset_index()" + +# Count trips with each combination of tour mode and trip mode (for Sankey) +,tour_mode_to_trip_mode,"trips_merged.groupby(['tour_mode','trip_mode']).size().rename('trips').reset_index()" + +# Count work tours by time of day +,_work_tours,trips_merged[trips_merged['tour_type'] == 'work'] +,work_tours_tod_count,_work_tours.groupby('tour_id').depart.min().reset_index().groupby('depart').size().sort_index().rename('tours').reset_index() + +# Count school tours by time of day +,_school_tours,trips_merged[trips_merged['tour_type'] == 'school'] +,school_tours_tod_count,_school_tours.groupby('tour_id').depart.min().reset_index().groupby('depart').size().sort_index().rename('tours').reset_index() + +# Count non-manditory tours by time of day +,_non_mandatory_tours,trips_merged[trips_merged.tour_category == 'non_mandatory'] +,non_mandatory_tours_tod_count,_non_mandatory_tours.groupby('tour_id').depart.min().reset_index().groupby('depart').size().sort_index().rename('tours').reset_index() + +# TAZ population density quintiles +,_taz_pop_dens,"land_use['pop']/land_use.acres" +,taz_population_density_quintiles,"quantiles(_taz_pop_dens, 5, '{rank}').rename('pop_dens_quintile').reset_index()" + +# Calculate share of taz population that is low income by decile +# (Output deciles by specifying '{rank}' as the label format in the quantile function) +,_low_income_pop_by_taz,persons_merged[persons_merged.income < 50000].groupby('home_zone_id').size() +,_total_pop_by_taz,persons_merged.groupby('home_zone_id').size() +,_proportion_low_income_by_taz,"_low_income_pop_by_taz / _total_pop_by_taz" +,_proportion_low_income_deciles,"quantiles(_proportion_low_income_by_taz, 10, '{rank}')" +,low_income_share_by_taz_deciles,"_proportion_low_income_deciles.rename('low_income_share_by_taz_deciles').reset_index()" + +# Count persons by income category +# (income_category is calculated by an expression in summarize_preprocessor.csv) +#,persons_by_income_category,persons_merged.groupby('income_category')[['income_category']].count().T + +# Calculate vmt per capita quintiles by taz +# (Output quintiles by specifying '{rank}' as the label format in the quantile function) +,_vmt_per_capita_quintiles,"quantiles(_vmt_per_capita_by_home_taz, 5, '{rank}')" +,vmt_per_capita_by_home_taz_quintiles,"_vmt_per_capita_quintiles.rename('vmt_per_capita_by_home_taz_quintiles').reset_index()" + +# Counts of non-motorized trips by 0.25-mile distance bins +,_non_motorized_distances,(trips_merged.walk_distance + trips_merged.bike_distance) +,_non_motorized_trips,trips_merged.major_trip_mode == 'Non-Motorized' +,_non_motorized_trip_distances,_non_motorized_distances[_non_motorized_trips] +,_counts_of_non_motorized_trips_by_distance_bin,"spaced_intervals(_non_motorized_trip_distances, 0, 0.25).value_counts()" +,non_motorized_trip_distance_bins,"_counts_of_non_motorized_trips_by_distance_bin.sort_index().rename('trips').reset_index()" + +# Counts of trips by income and travel time category +#,trips_by_income_and_travel_time_category,"trips_merged.groupby(['trip_income_category','total_time_category']).size().rename('trips').unstack(-2).reset_index()" + + + + + + + diff --git a/src/asim/configs/resident/summarize.yaml b/src/asim/configs/resident/summarize.yaml new file mode 100644 index 000000000..175ede7fd --- /dev/null +++ b/src/asim/configs/resident/summarize.yaml @@ -0,0 +1,260 @@ +SPECIFICATION: summarize.csv +OUTPUT: summarize + +# Set to True to export pipeline tables for expression development +EXPORT_PIPELINE_TABLES: False + +preprocessor: + DF: trips_merged + SPEC: summarize_preprocessor.csv + # TABLES: + +persons_merged: + + BIN: + # Manually-specified bins + - column: income + label: income_category + type: manual_breaks + bin_breaks: + - 0 + - 25000 + - 50000 + - 75000 + - 100000 + - 999999 + bin_labels: + - Very Low Income ($0-$25k) + - Low Income ($25k-$50k) + - Medium Income ($50k-$75k) + - High Income ($75k-$100k) + - Very High Income (>$100k) + + # Breaks column into quantiles + - column: income + label: income_quintile + type: quantiles + bins: 5 + label_format: ${left:,.2f} - ${right:,.2f} # 'left' and 'right' are bin boundaries + + # Breaks column into bins with a specified width + - column: income + label: income_intervals_10000 + type: spaced_intervals + lower_bound: min # can be set to float + interval: 10000 + label_format: ${left:,.2f} - ${right:,.2f} # 'left' and 'right' are bin boundaries + + # Breaks column into equally-spaced bins between min and max values + - column: income + label: income_intervals_equal + type: equal_intervals + bins: 10 + label_format: ${left:,.2f} - ${right:,.2f} # 'left' and 'right' are bin boundaries + +trips_merged: + + BIN: + - column: income + label: trip_income_category # TODO: Figure out why this can't have the same name as a slicer for persons_merged + type: manual_breaks + bin_breaks: + - 0 + - 25000 + - 50000 + - 75000 + - 100000 + - 999999 + bin_labels: + - Very Low Income ($0-$25k) + - Low Income ($25k-$50k) + - Medium Income ($50k-$75k) + - High Income ($75k-$100k) + - Very High Income (>$100k) + + - column: total_time + label: total_time_category + type: spaced_intervals + lower_bound: 0 # can be set to float + interval: 5 + label_format: "{left:,.2f} - {right:,.2f}" # 'left' and 'right' are bin boundaries + + + AGGREGATE: + - column: trip_mode + label: major_trip_mode + map: + DRIVEALONEFREE: SOV + DRIVEALONEPAY: SOV + SHARED2FREE: HOV + SHARED2PAY: HOV + SHARED3FREE: HOV + SHARED3PAY: HOV + WALK_LOC: Transit + WALK_LRF: Transit + WALK_EXP: Transit + WALK_HVY: Transit + WALK_COM: Transit + DRIVE_LOC: Transit + DRIVE_LRF: Transit + DRIVE_EXP: Transit + DRIVE_HVY: Transit + DRIVE_COM: Transit + DRIVEACCESS: Transit + WALK: Non-Motorized + BIKE: Non-Motorized + TAXI: Ride Hail + TNC_SINGLE: Ride Hail + TNC_SHARED: Ride Hail + - column: trip_mode + label: major_access_trip_mode + map: + DRIVEALONEFREE: SOV + DRIVEALONEPAY: SOV + SHARED2FREE: HOV + SHARED2PAY: HOV + SHARED3FREE: HOV + SHARED3PAY: HOV + WALK_LOC: Walk to Transit + WALK_LRF: Walk to Transit + WALK_EXP: Walk to Transit + WALK_HVY: Walk to Transit + WALK_COM: Walk to Transit + DRIVE_LOC: Drive to Transit + DRIVE_LRF: Drive to Transit + DRIVE_EXP: Drive to Transit + DRIVE_HVY: Drive to Transit + DRIVE_COM: Drive to Transit + WALK: Non-Motorized + BIKE: Non-Motorized + TAXI: Ride Hail + TNC_SINGLE: Ride Hail + TNC_SHARED: Ride Hail + + + + +# preprocessor: +# DF: trips_mergerd +# SPEC: summarize_preprocessor.csv +# # TABLES: + +# persons_merged: +# SLICERS: +# # Manually-specified bins +# - column: income +# label: income_category +# type: manual_breaks +# bin_breaks: +# - 0 +# - 25000 +# - 50000 +# - 75000 +# - 100000 +# - 999999 +# bin_labels: +# - Very Low Income ($0-$25k) +# - Low Income ($25k-$50k) +# - Medium Income ($50k-$75k) +# - High Income ($75k-$100k) +# - Very High Income (>$100k) + +# # Breaks column into quantiles +# - column: income +# label: income_quintile +# type: quantiles +# bins: 5 +# label_format: ${left:,.2f} - ${right:,.2f} # 'left' and 'right' are bin boundaries + +# # Breaks column into bins with a specified width +# - column: income +# label: income_intervals_10000 +# type: spaced_intervals +# lower_bound: min # can be set to float +# interval: 10000 +# label_format: ${left:,.2f} - ${right:,.2f} # 'left' and 'right' are bin boundaries + +# # Breaks column into equally-spaced bins between min and max values +# - column: income +# label: income_intervals_equal +# type: equal_intervals +# bins: 10 +# label_format: ${left:,.2f} - ${right:,.2f} # 'left' and 'right' are bin boundaries + +# trips_merged: +# SLICERS: +# - column: income +# label: trip_income_category # TODO: Figure out why this can't have the same name as a slicer for persons_merged +# type: manual_breaks +# bin_breaks: +# - 0 +# - 25000 +# - 50000 +# - 75000 +# - 100000 +# - 999999 +# bin_labels: +# - Very Low Income ($0-$25k) +# - Low Income ($25k-$50k) +# - Medium Income ($50k-$75k) +# - High Income ($75k-$100k) +# - Very High Income (>$100k) + +# - column: total_time +# label: total_time_category +# type: spaced_intervals +# lower_bound: 0 # can be set to float +# interval: 5 +# label_format: "{left:,.2f} - {right:,.2f}" # 'left' and 'right' are bin boundaries + + +# AGGREGATE: +# - column: trip_mode +# label: major_trip_mode +# map: +# DRIVEALONEFREE: SOV +# DRIVEALONEPAY: SOV +# SHARED2FREE: HOV +# SHARED2PAY: HOV +# SHARED3FREE: HOV +# SHARED3PAY: HOV +# WALK_LOC: Transit +# WALK_LRF: Transit +# WALK_EXP: Transit +# WALK_HVY: Transit +# WALK_COM: Transit +# DRIVE_LOC: Transit +# DRIVE_LRF: Transit +# DRIVE_EXP: Transit +# DRIVE_HVY: Transit +# DRIVE_COM: Transit +# DRIVEACCESS: Transit +# WALK: Non-Motorized +# BIKE: Non-Motorized +# TAXI: Ride Hail +# TNC_SINGLE: Ride Hail +# TNC_SHARED: Ride Hail +# - column: trip_mode +# label: major_access_trip_mode +# map: +# DRIVEALONEFREE: SOV +# DRIVEALONEPAY: SOV +# SHARED2FREE: HOV +# SHARED2PAY: HOV +# SHARED3FREE: HOV +# SHARED3PAY: HOV +# WALK_LOC: Walk to Transit +# WALK_LRF: Walk to Transit +# WALK_EXP: Walk to Transit +# WALK_HVY: Walk to Transit +# WALK_COM: Walk to Transit +# DRIVE_LOC: Drive to Transit +# DRIVE_LRF: Drive to Transit +# DRIVE_EXP: Drive to Transit +# DRIVE_HVY: Drive to Transit +# DRIVE_COM: Drive to Transit +# WALK: Non-Motorized +# BIKE: Non-Motorized +# TAXI: Ride Hail +# TNC_SINGLE: Ride Hail +# TNC_SHARED: Ride Hail diff --git a/src/asim/configs/resident/summarize_preprocessor.csv b/src/asim/configs/resident/summarize_preprocessor.csv new file mode 100644 index 000000000..0669b2991 --- /dev/null +++ b/src/asim/configs/resident/summarize_preprocessor.csv @@ -0,0 +1,434 @@ +Description,Target,Expression + +## Constants +,_WALK_SPEED,3 +,_BIKE_SPEED,12 + +,_SHORT_WALK, 0.333 # miles + +,_SINGLE_TNC_WAIT_TIME, 8.4 # minutes +,_SHARED_TNC_WAIT_TIME, 11.0 # minutes +,_TAXI_WAIT_TIME, 13.3 # minutes + +,_TAXI_BASE_FARE, 2.20 # $ +,_TAXI_COST_PER_MILE, 2.30 # $ +,_TAXI_COST_PER_MINUTE, 0.10 # $ + +,_TNC_SINGLE_BASE_FARE, 2.20 # $ +,_TNC_SINGLE_COST_PER_MILE, 1.33 # $ +,_TNC_SINGLE_COST_PER_MINUTE, 0.24 # $ +,_TNC_SINGLE_COST_MINIMUM, 7.20 # $ + +,_TNC_SHARED_BASE_FARE, 2.20 # $ +,_TNC_SHARED_COST_PER_MILE, 0.53 # $ +,_TNC_SHARED_COST_PER_MINUTE, 0.10 # $ +,_TNC_SHARED_COST_MINIMUM, 3.00 # $ +,_TNC_SHARED_IVT_FACTOR, 1.5 # $ + +## Distances +# Auto distance +,_sov_tr_l_dist,trip_odt_skims['SOV_TR_L_DIST'] +,_sov_tr_m_dist,trip_odt_skims['SOV_TR_M_DIST'] +,_sov_tr_h_dist,trip_odt_skims['SOV_TR_H_DIST'] +,_sov_nt_l_dist,trip_odt_skims['SOV_NT_L_DIST'] +,_sov_nt_m_dist,trip_odt_skims['SOV_NT_M_DIST'] +,_sov_nt_h_dist,trip_odt_skims['SOV_NT_H_DIST'] +,_hov2_l_dist,trip_odt_skims['HOV2_L_DIST'] +,_hov2_m_dist,trip_odt_skims['HOV2_M_DIST'] +,_hov2_h_dist,trip_odt_skims['HOV2_H_DIST'] +,_hov3_l_dist,trip_odt_skims['HOV3_L_DIST'] +,_hov3_m_dist,trip_odt_skims['HOV3_M_DIST'] +,_hov3_h_dist,trip_odt_skims['HOV3_H_DIST'] +##### what to do w/ tolldist? HOVdist? +,_sov_tr_l_tolldist,trip_odt_skims['SOV_TR_L_TOLLDIST'] +,_sov_tr_m_tolldist,trip_odt_skims['SOV_TR_M_TOLLDIST'] +,_sov_tr_h_tolldist,trip_odt_skims['SOV_TR_H_TOLLDIST'] +,_sov_nt_l_tolldist,trip_odt_skims['SOV_NT_L_TOLLDIST'] +,_sov_nt_m_tolldist,trip_odt_skims['SOV_NT_M_TOLLDIST'] +,_sov_nt_h_tolldist,trip_odt_skims['SOV_NT_H_TOLLDIST'] +,_hov2_l_tolldist,trip_odt_skims['HOV2_L_TOLLDIST'] +,_hov2_m_tolldist,trip_odt_skims['HOV2_M_TOLLDIST'] +,_hov2_h_tolldist,trip_odt_skims['HOV2_H_TOLLDIST'] +,_hov3_l_tolldist,trip_odt_skims['HOV3_L_TOLLDIST'] +,_hov3_m_tolldist,trip_odt_skims['HOV3_M_TOLLDIST'] +,_hov3_h_tolldist,trip_odt_skims['HOV3_H_TOLLDIST'] +,_hov2_l_hovdist,trip_odt_skims['HOV2_L_HOVDIST'] +,_hov2_m_hovdist,trip_odt_skims['HOV2_M_HOVDIST'] +,_hov2_h_hovdist,trip_odt_skims['HOV2_H_HOVDIST'] +,_hov3_l_hovdist,trip_odt_skims['HOV3_L_HOVDIST'] +,_hov3_m_hovdist,trip_odt_skims['HOV3_M_HOVDIST'] +,_hov3_h_hovdist,trip_odt_skims['HOV3_H_HOVDIST'] + +# Transit auto access/egress distance (miles x 100) +#####,_drv_com_wlk_ddist,trip_odt_skims['DRV_COM_WLK_DDIST']/100 +#####,_drv_exp_wlk_ddist,trip_odt_skims['DRV_EXP_WLK_DDIST']/100 +#####,_drv_hvy_wlk_ddist,trip_odt_skims['DRV_HVY_WLK_DDIST']/100 +#####,_drv_loc_wlk_ddist,trip_odt_skims['DRV_LOC_WLK_DDIST']/100 +#####,_drv_lrf_wlk_ddist,trip_odt_skims['DRV_LRF_WLK_DDIST']/100 + +# Bike distance +#####,_bike_dist,trip_od_skims['DISTBIKE'] CHECK +,_bike_dist,trip_od_skims['DIST'] + +# Walk distance +#####,_walk_dist,trip_od_skims['DISTWALK'] CHECK +,_walk_dist,trip_od_skims['DIST'] + +## Times +# Auto time +##### loses toll times +,_sov_tr_l_time,trip_odt_skims['SOV_TR_L_TIME'] +,_sov_tr_m_time,trip_odt_skims['SOV_TR_M_TIME'] +,_sov_tr_h_time,trip_odt_skims['SOV_TR_H_TIME'] +,_sov_nt_l_time,trip_odt_skims['SOV_NT_L_TIME'] +,_sov_nt_m_time,trip_odt_skims['SOV_NT_M_TIME'] +,_sov_nt_h_time,trip_odt_skims['SOV_NT_H_TIME'] +,_hov2_l_time,trip_odt_skims['HOV2_L_TIME'] +,_hov2_m_time,trip_odt_skims['HOV2_M_TIME'] +,_hov2_h_time,trip_odt_skims['HOV2_H_TIME'] +,_hov3_l_time,trip_odt_skims['HOV3_L_TIME'] +,_hov3_m_time,trip_odt_skims['HOV3_M_TIME'] +,_hov3_h_time,trip_odt_skims['HOV3_H_TIME'] + + +# Transit vehicle time +,_knrin_loc_wlk_totivt,trip_odt_skims['KNRIN_LOC_TOTALIVTT'] +,_knrin_mix_wlk_totivt,trip_odt_skims['KNRIN_MIX_TOTALIVTT'] +,_knrin_prm_wlk_totivt,trip_odt_skims['KNRIN_PRM_TOTALIVTT'] +,_pnrin_loc_wlk_totivt,trip_odt_skims['PNRIN_LOC_TOTALIVTT'] +,_pnrin_mix_wlk_totivt,trip_odt_skims['PNRIN_MIX_TOTALIVTT'] +,_pnrin_prm_wlk_totivt,trip_odt_skims['PNRIN_PRM_TOTALIVTT'] +,_tncin_loc_wlk_totivt,trip_odt_skims['TNCIN_LOC_TOTALIVTT'] +,_tncin_mix_wlk_totivt,trip_odt_skims['TNCIN_MIX_TOTALIVTT'] +,_tncin_prm_wlk_totivt,trip_odt_skims['TNCIN_PRM_TOTALIVTT'] +,_knrout_loc_wlk_totivt,trip_odt_skims['KNROUT_LOC_TOTALIVTT'] +,_knrout_mix_wlk_totivt,trip_odt_skims['KNROUT_MIX_TOTALIVTT'] +,_knrout_prm_wlk_totivt,trip_odt_skims['KNROUT_PRM_TOTALIVTT'] +,_pnrout_loc_wlk_totivt,trip_odt_skims['PNROUT_LOC_TOTALIVTT'] +,_pnrout_mix_wlk_totivt,trip_odt_skims['PNROUT_MIX_TOTALIVTT'] +,_pnrout_prm_wlk_totivt,trip_odt_skims['PNROUT_PRM_TOTALIVTT'] +,_tncout_loc_wlk_totivt,trip_odt_skims['TNCOUT_LOC_TOTALIVTT'] +,_tncout_mix_wlk_totivt,trip_odt_skims['TNCOUT_MIX_TOTALIVTT'] +,_tncout_prm_wlk_totivt,trip_odt_skims['TNCOUT_PRM_TOTALIVTT'] +,_walk_loc_wlk_totivt,trip_odt_skims['WALK_LOC_TOTALIVTT'] +,_walk_mix_wlk_totivt,trip_odt_skims['WALK_MIX_TOTALIVTT'] +,_walk_prm_wlk_totivt,trip_odt_skims['WALK_PRM_TOTALIVTT'] +,_knrin_loc_wlk_dwell,trip_odt_skims['KNRIN_LOC_DWELLTIME'] +,_pnrin_loc_wlk_dwell,trip_odt_skims['PNRIN_LOC_DWELLTIME'] +,_tncin_loc_wlk_dwell,trip_odt_skims['TNCIN_LOC_DWELLTIME'] +,_knrout_loc_wlk_dwell,trip_odt_skims['KNROUT_LOC_DWELLTIME'] +,_pnrout_loc_wlk_dwell,trip_odt_skims['PNROUT_LOC_DWELLTIME'] +,_tncout_loc_wlk_dwell,trip_odt_skims['TNCOUT_LOC_DWELLTIME'] +,_walk_loc_wlk_dwell,trip_odt_skims['WALK_LOC_DWELLTIME'] + + +# Initial wait time (FIRSTWAIT) +,_knrin_loc_wlk_iwait,trip_odt_skims['KNRIN_LOC_FIRSTWAIT'] +,_knrin_mix_wlk_iwait,trip_odt_skims['KNRIN_MIX_FIRSTWAIT'] +,_knrin_prm_wlk_iwait,trip_odt_skims['KNRIN_PRM_FIRSTWAIT'] +,_pnrin_loc_wlk_iwait,trip_odt_skims['PNRIN_LOC_FIRSTWAIT'] +,_pnrin_mix_wlk_iwait,trip_odt_skims['PNRIN_MIX_FIRSTWAIT'] +,_pnrin_prm_wlk_iwait,trip_odt_skims['PNRIN_PRM_FIRSTWAIT'] +,_tncin_loc_wlk_iwait,trip_odt_skims['TNCIN_LOC_FIRSTWAIT'] +,_tncin_mix_wlk_iwait,trip_odt_skims['TNCIN_MIX_FIRSTWAIT'] +,_tncin_prm_wlk_iwait,trip_odt_skims['TNCIN_PRM_FIRSTWAIT'] +,_knrout_loc_wlk_iwait,trip_odt_skims['KNROUT_LOC_FIRSTWAIT'] +,_knrout_mix_wlk_iwait,trip_odt_skims['KNROUT_MIX_FIRSTWAIT'] +,_knrout_prm_wlk_iwait,trip_odt_skims['KNROUT_PRM_FIRSTWAIT'] +,_pnrout_loc_wlk_iwait,trip_odt_skims['PNROUT_LOC_FIRSTWAIT'] +,_pnrout_mix_wlk_iwait,trip_odt_skims['PNROUT_MIX_FIRSTWAIT'] +,_pnrout_prm_wlk_iwait,trip_odt_skims['PNROUT_PRM_FIRSTWAIT'] +,_tncout_loc_wlk_iwait,trip_odt_skims['TNCOUT_LOC_FIRSTWAIT'] +,_tncout_mix_wlk_iwait,trip_odt_skims['TNCOUT_MIX_FIRSTWAIT'] +,_tncout_prm_wlk_iwait,trip_odt_skims['TNCOUT_PRM_FIRSTWAIT'] +,_walk_loc_wlk_iwait,trip_odt_skims['WALK_LOC_FIRSTWAIT'] +,_walk_mix_wlk_iwait,trip_odt_skims['WALK_MIX_FIRSTWAIT'] +,_walk_prm_wlk_iwait,trip_odt_skims['WALK_PRM_FIRSTWAIT'] + +# Transfer wait time (XWAIT) +,_knrin_loc_wlk_xwait,trip_odt_skims['KNRIN_LOC_XFERWAIT'] +,_knrin_mix_wlk_xwait,trip_odt_skims['KNRIN_MIX_XFERWAIT'] +,_knrin_prm_wlk_xwait,trip_odt_skims['KNRIN_PRM_XFERWAIT'] +,_pnrin_loc_wlk_xwait,trip_odt_skims['PNRIN_LOC_XFERWAIT'] +,_pnrin_mix_wlk_xwait,trip_odt_skims['PNRIN_MIX_XFERWAIT'] +,_pnrin_prm_wlk_xwait,trip_odt_skims['PNRIN_PRM_XFERWAIT'] +,_tncin_loc_wlk_xwait,trip_odt_skims['TNCIN_LOC_XFERWAIT'] +,_tncin_mix_wlk_xwait,trip_odt_skims['TNCIN_MIX_XFERWAIT'] +,_tncin_prm_wlk_xwait,trip_odt_skims['TNCIN_PRM_XFERWAIT'] +,_knrout_loc_wlk_xwait,trip_odt_skims['KNROUT_LOC_XFERWAIT'] +,_knrout_mix_wlk_xwait,trip_odt_skims['KNROUT_MIX_XFERWAIT'] +,_knrout_prm_wlk_xwait,trip_odt_skims['KNROUT_PRM_XFERWAIT'] +,_pnrout_loc_wlk_xwait,trip_odt_skims['PNROUT_LOC_XFERWAIT'] +,_pnrout_mix_wlk_xwait,trip_odt_skims['PNROUT_MIX_XFERWAIT'] +,_pnrout_prm_wlk_xwait,trip_odt_skims['PNROUT_PRM_XFERWAIT'] +,_tncout_loc_wlk_xwait,trip_odt_skims['TNCOUT_LOC_XFERWAIT'] +,_tncout_mix_wlk_xwait,trip_odt_skims['TNCOUT_MIX_XFERWAIT'] +,_tncout_prm_wlk_xwait,trip_odt_skims['TNCOUT_PRM_XFERWAIT'] +,_walk_loc_wlk_xwait,trip_odt_skims['WALK_LOC_XFERWAIT'] +,_walk_mix_wlk_xwait,trip_odt_skims['WALK_MIX_XFERWAIT'] +,_walk_prm_wlk_xwait,trip_odt_skims['WALK_PRM_XFERWAIT'] + +# Walk access time (WACC) (for all transit modes) +,_wlk_wacc,_SHORT_WALK / _WALK_SPEED * 60 # Constant assumption of short walk access + +# Auxiliary walk time (WAUX) +#####,_drv_com_wlk_waux,trip_odt_skims['DRV_COM_WLK_WAUX']/100 +#####,_drv_exp_wlk_waux,trip_odt_skims['DRV_EXP_WLK_WAUX']/100 +#####,_drv_hvy_wlk_waux,trip_odt_skims['DRV_HVY_WLK_WAUX']/100 +#####,_drv_loc_wlk_waux,trip_odt_skims['DRV_LOC_WLK_WAUX']/100 +#####,_drv_lrf_wlk_waux,trip_odt_skims['DRV_LRF_WLK_WAUX']/100 +#####,_wlk_com_wlk_waux,trip_odt_skims['WLK_COM_WLK_WAUX']/100 +#####,_wlk_exp_wlk_waux,trip_odt_skims['WLK_EXP_WLK_WAUX']/100 +#####,_wlk_hvy_wlk_waux,trip_odt_skims['WLK_HVY_WLK_WAUX']/100 +#####,_wlk_loc_wlk_waux,trip_odt_skims['WLK_LOC_WLK_WAUX']/100 +#####,_wlk_lrf_wlk_waux,trip_odt_skims['WLK_LRF_WLK_WAUX']/100 + +# Walk egress time (WEGR) (for all transit modes) +,_wlk_wegr,_SHORT_WALK / _WALK_SPEED * 60 # Constant assumption of short walk egress + +# Drive access/egress time - ACC column used bc https://github.com/sandag/abm/wiki/output-files#transit_skimsomx +##### SHOULD THIS INCLUDE _EGR column as well? +,_knrin_loc_wlk_acc,trip_odt_skims['KNRIN_LOC_ACC'] +,_knrin_mix_wlk_acc,trip_odt_skims['KNRIN_MIX_ACC'] +,_knrin_prm_wlk_acc,trip_odt_skims['KNRIN_PRM_ACC'] +,_pnrin_loc_wlk_acc,trip_odt_skims['PNRIN_LOC_ACC'] +,_pnrin_mix_wlk_acc,trip_odt_skims['PNRIN_MIX_ACC'] +,_pnrin_prm_wlk_acc,trip_odt_skims['PNRIN_PRM_ACC'] +,_tncin_loc_wlk_acc,trip_odt_skims['TNCIN_LOC_ACC'] +,_tncin_mix_wlk_acc,trip_odt_skims['TNCIN_MIX_ACC'] +,_tncin_prm_wlk_acc,trip_odt_skims['TNCIN_PRM_ACC'] +,_knrout_loc_wlk_acc,trip_odt_skims['KNROUT_LOC_ACC'] +,_knrout_mix_wlk_acc,trip_odt_skims['KNROUT_MIX_ACC'] +,_knrout_prm_wlk_acc,trip_odt_skims['KNROUT_PRM_ACC'] +,_pnrout_loc_wlk_acc,trip_odt_skims['PNROUT_LOC_ACC'] +,_pnrout_mix_wlk_acc,trip_odt_skims['PNROUT_MIX_ACC'] +,_pnrout_prm_wlk_acc,trip_odt_skims['PNROUT_PRM_ACC'] +,_tncout_loc_wlk_acc,trip_odt_skims['TNCOUT_LOC_ACC'] +,_tncout_mix_wlk_acc,trip_odt_skims['TNCOUT_MIX_ACC'] +,_tncout_prm_wlk_acc,trip_odt_skims['TNCOUT_PRM_ACC'] +,_walk_loc_wlk_acc,trip_odt_skims['WALK_LOC_ACC'] +,_walk_mix_wlk_acc,trip_odt_skims['WALK_MIX_ACC'] +,_walk_prm_wlk_acc,trip_odt_skims['WALK_PRM_ACC'] +,_knrin_loc_wlk_egr,trip_odt_skims['KNRIN_LOC_EGR'] +,_knrin_mix_wlk_egr,trip_odt_skims['KNRIN_MIX_EGR'] +,_knrin_prm_wlk_egr,trip_odt_skims['KNRIN_PRM_EGR'] +,_pnrin_loc_wlk_egr,trip_odt_skims['PNRIN_LOC_EGR'] +,_pnrin_mix_wlk_egr,trip_odt_skims['PNRIN_MIX_EGR'] +,_pnrin_prm_wlk_egr,trip_odt_skims['PNRIN_PRM_EGR'] +,_tncin_loc_wlk_egr,trip_odt_skims['TNCIN_LOC_EGR'] +,_tncin_mix_wlk_egr,trip_odt_skims['TNCIN_MIX_EGR'] +,_tncin_prm_wlk_egr,trip_odt_skims['TNCIN_PRM_EGR'] +,_knrout_loc_wlk_egr,trip_odt_skims['KNROUT_LOC_EGR'] +,_knrout_mix_wlk_egr,trip_odt_skims['KNROUT_MIX_EGR'] +,_knrout_prm_wlk_egr,trip_odt_skims['KNROUT_PRM_EGR'] +,_pnrout_loc_wlk_egr,trip_odt_skims['PNROUT_LOC_EGR'] +,_pnrout_mix_wlk_egr,trip_odt_skims['PNROUT_MIX_EGR'] +,_pnrout_prm_wlk_egr,trip_odt_skims['PNROUT_PRM_EGR'] +,_tncout_loc_wlk_egr,trip_odt_skims['TNCOUT_LOC_EGR'] +,_tncout_mix_wlk_egr,trip_odt_skims['TNCOUT_MIX_EGR'] +,_tncout_prm_wlk_egr,trip_odt_skims['TNCOUT_PRM_EGR'] +,_walk_loc_wlk_egr,trip_odt_skims['WALK_LOC_EGR'] +,_walk_mix_wlk_egr,trip_odt_skims['WALK_MIX_EGR'] +,_walk_prm_wlk_egr,trip_odt_skims['WALK_PRM_EGR'] + +## Costs +# Private auto tolls +# Bridge +#####,_sov_btoll,trip_odt_skims['SOV_BTOLL'] +#####,_hov2_btoll,trip_odt_skims['HOV2_BTOLL'] +#####,_hov3_btoll,trip_odt_skims['HOV3_BTOLL'] +#####,_sovtoll_btoll,trip_odt_skims['SOVTOLL_BTOLL'] +#####,_hov2toll_btoll,trip_odt_skims['HOV2TOLL_BTOLL'] +#####,_hov3toll_btoll,trip_odt_skims['HOV3TOLL_BTOLL'] +# Value +#####,_sovtoll_vtoll,trip_odt_skims['SOVTOLL_VTOLL'] +#####,_hov2toll_vtoll,trip_odt_skims['HOV2TOLL_VTOLL'] +#####,_hov3toll_vtoll,trip_odt_skims['HOV3TOLL_VTOLL'] +,_sov_tr_l_vtoll,trip_odt_skims['SOV_TR_L_TOLLCOST'] +,_sov_tr_m_vtoll,trip_odt_skims['SOV_TR_M_TOLLCOST'] +,_sov_tr_h_vtoll,trip_odt_skims['SOV_TR_H_TOLLCOST'] +,_sov_nt_l_vtoll,trip_odt_skims['SOV_NT_L_TOLLCOST'] +,_sov_nt_m_vtoll,trip_odt_skims['SOV_NT_M_TOLLCOST'] +,_sov_nt_h_vtoll,trip_odt_skims['SOV_NT_H_TOLLCOST'] +,_hov2_l_vtoll,trip_odt_skims['HOV2_L_TOLLCOST'] +,_hov2_m_vtoll,trip_odt_skims['HOV2_M_TOLLCOST'] +,_hov2_h_vtoll,trip_odt_skims['HOV2_H_TOLLCOST'] +,_hov3_l_vtoll,trip_odt_skims['HOV3_L_TOLLCOST'] +,_hov3_m_vtoll,trip_odt_skims['HOV3_M_TOLLCOST'] +,_hov3_h_vtoll,trip_odt_skims['HOV3_H_TOLLCOST'] + +# Transit fares +,_knrin_loc_wlk_far,trip_odt_skims['KNRIN_LOC_FARE'] +,_knrin_mix_wlk_far,trip_odt_skims['KNRIN_MIX_FARE'] +,_knrin_prm_wlk_far,trip_odt_skims['KNRIN_PRM_FARE'] +,_pnrin_loc_wlk_far,trip_odt_skims['PNRIN_LOC_FARE'] +,_pnrin_mix_wlk_far,trip_odt_skims['PNRIN_MIX_FARE'] +,_pnrin_prm_wlk_far,trip_odt_skims['PNRIN_PRM_FARE'] +###### how are costs of TNC handled? skims are not clear +,_tncin_loc_wlk_far,trip_odt_skims['TNCIN_LOC_FARE'] +,_tncin_mix_wlk_far,trip_odt_skims['TNCIN_MIX_FARE'] +,_tncin_prm_wlk_far,trip_odt_skims['TNCIN_PRM_FARE'] +,_knrout_loc_wlk_far,trip_odt_skims['KNROUT_LOC_FARE'] +,_knrout_mix_wlk_far,trip_odt_skims['KNROUT_MIX_FARE'] +,_knrout_prm_wlk_far,trip_odt_skims['KNROUT_PRM_FARE'] +,_pnrout_loc_wlk_far,trip_odt_skims['PNROUT_LOC_FARE'] +,_pnrout_mix_wlk_far,trip_odt_skims['PNROUT_MIX_FARE'] +,_pnrout_prm_wlk_far,trip_odt_skims['PNROUT_PRM_FARE'] +,_tncout_loc_wlk_far,trip_odt_skims['TNCOUT_LOC_FARE'] +,_tncout_mix_wlk_far,trip_odt_skims['TNCOUT_MIX_FARE'] +,_tncout_prm_wlk_far,trip_odt_skims['TNCOUT_PRM_FARE'] +,_walk_loc_wlk_far,trip_odt_skims['WALK_LOC_FARE'] +,_walk_mix_wlk_far,trip_odt_skims['WALK_MIX_FARE'] +,_walk_prm_wlk_far,trip_odt_skims['WALK_PRM_FARE'] + +## Mode Indicators +# Private Auto +,_sov_mode,trips_merged['trip_mode'] == 'DRIVEALONE' +,_hov2_mode,trips_merged['trip_mode'] == 'SHARED2' +,_hov3_mode,trips_merged['trip_mode'] == 'SHARED3' + +# Taxi/TNC +,_taxi_mode,trips_merged['trip_mode'] == 'TAXI' +,_tnc_single_mode,trips_merged['trip_mode'] == 'TNC_SINGLE' +,_tnc_shared_mode,trips_merged['trip_mode'] == 'TNC_SHARED' + +# Transit +,_knr_loc_mode,trips_merged['trip_mode'] == 'ZNR_LOC' +##KNR_MIX does not seem to exist in output summaries +,_knr_mix_mode,trips_merged['trip_mode'] == 'KNR_MIX' +,_knr_prm_mode,trips_merged['trip_mode'] == 'KNR_PRM' +,_pnr_loc_mode,trips_merged['trip_mode'] == 'PNR_LOC' +,_pnr_mix_mode,trips_merged['trip_mode'] == 'PNR_MIX' +,_pnr_prm_mode,trips_merged['trip_mode'] == 'PNR_PRM' +,_walk_loc_mode,trips_merged['trip_mode'] == 'WALK_LOC' +,_walk_mix_mode,trips_merged['trip_mode'] == 'WALK_MIX' +,_walk_prm_mode,trips_merged['trip_mode'] == 'WALK_PRM' +,_tnc_loc_mode,trips_merged['trip_mode'] == 'TNC_LOC' +,_tnc_mix_mode,trips_merged['trip_mode'] == 'TNC_MIX' +,_tnc_prm_mode,trips_merged['trip_mode'] == 'TNC_PRM' +,_sch_bus_mode,trips_merged['trip_mode'] == 'SCH_BUS' + + +# Bike +,_bike_mode,trips_merged['trip_mode'] == 'BIKE' + +# Walk +,_walk_mode,trips_merged['trip_mode'] == 'WALK' + +### Calcs +## Time +# Auto +##### check the summation of in_ and out_ values +,_knrin_acc_auto_time,(_knr_loc_mode * _knrin_loc_wlk_acc) + (_knr_mix_mode * _knrin_mix_wlk_acc) + (_knr_prm_mode * _knrin_prm_wlk_acc) +,_knrout_acc_auto_time,(_knr_loc_mode * _knrout_loc_wlk_acc) + (_knr_mix_mode * _knrout_mix_wlk_acc) + (_knr_prm_mode * _knrout_prm_wlk_acc) +,_pnrin_acc_auto_time,(_pnr_loc_mode * _pnrin_loc_wlk_acc) + (_pnr_mix_mode * _pnrin_mix_wlk_acc) + (_pnr_prm_mode * _pnrin_prm_wlk_acc) +,_pnrout_acc_auto_time,(_pnr_loc_mode * _pnrout_loc_wlk_acc) + (_pnr_mix_mode * _pnrout_mix_wlk_acc) + (_pnr_prm_mode * _pnrout_prm_wlk_acc) +,_tncin_acc_transit_auto_time,(_tnc_loc_mode * _tncin_loc_wlk_acc) + (_tnc_mix_mode * _tncin_mix_wlk_acc) + (_tnc_prm_mode * _tncin_prm_wlk_acc) +,_tncout_acc_transit_auto_time,(_tnc_loc_mode * _tncout_loc_wlk_acc) + (_tnc_mix_mode * _tncout_mix_wlk_acc) + (_tnc_prm_mode * _tncout_prm_wlk_acc) +,_knrin_egr_auto_time,(_knr_loc_mode * _knrin_loc_wlk_egr) + (_knr_mix_mode * _knrin_mix_wlk_egr) + (_knr_prm_mode * _knrin_prm_wlk_egr) +,_knrout_egr_auto_time,(_knr_loc_mode * _knrout_loc_wlk_egr) + (_knr_mix_mode * _knrout_mix_wlk_egr) + (_knr_prm_mode * _knrout_prm_wlk_egr) +,_pnrin_egr_auto_time,(_pnr_loc_mode * _pnrin_loc_wlk_egr) + (_pnr_mix_mode * _pnrin_mix_wlk_egr) + (_pnr_prm_mode * _pnrin_prm_wlk_egr) +,_pnrout_egr_auto_time,(_pnr_loc_mode * _pnrout_loc_wlk_egr) + (_pnr_mix_mode * _pnrout_mix_wlk_egr) + (_pnr_prm_mode * _pnrout_prm_wlk_egr) +,_tncin_egr_transit_auto_time,(_tnc_loc_mode * _tncin_loc_wlk_egr) + (_tnc_mix_mode * _tncin_mix_wlk_egr) + (_tnc_prm_mode * _tncin_prm_wlk_egr) +,_tncout_egr_transit_auto_time,(_tnc_loc_mode * _tncout_loc_wlk_egr) + (_tnc_mix_mode * _tncout_mix_wlk_egr) + (_tnc_prm_mode * _tncout_prm_wlk_egr) +,_acc_auto_time,_knrin_acc_auto_time + _knrout_acc_auto_time + _pnrin_acc_auto_time + _pnrout_acc_auto_time + _tncin_acc_transit_auto_time + _tncout_acc_transit_auto_time +,_egr_auto_time,_knrin_egr_auto_time + _knrout_egr_auto_time + _pnrin_egr_auto_time + _pnrout_egr_auto_time + _tncin_egr_transit_auto_time + _tncout_egr_transit_auto_time +,_transit_auto_time,_acc_auto_time + _egr_auto_time + +##### use hov_m_time instead of hov2_time for tnc calcs +,_tnc_single_time,(_tnc_single_mode * _hov2_m_time) +,_tnc_shared_time,(_tnc_shared_mode * _hov3_m_time * _TNC_SHARED_IVT_FACTOR) +,_taxi_time,(_taxi_mode * _hov2_m_time) +,_sov_tr_time,(_sov_mode * _sov_tr_l_time) + (_sov_mode * _sov_tr_m_time) + (_sov_mode * _sov_tr_h_time) +,_sov_nt_time,(_sov_mode * _sov_nt_l_time) + (_sov_mode * _sov_nt_m_time) + (_sov_mode * _sov_nt_h_time) +,_hov2_time,(_hov2_mode * _hov2_l_time) + (_hov2_mode * _hov2_m_time) + (_hov2_mode * _hov2_h_time) +,_hov3_time,(_hov3_mode * _hov3_l_time) + (_hov3_mode * _hov3_m_time) + (_hov3_mode * _hov3_h_time) +,auto_time,_sov_tr_time + _sov_nt_time + _hov2_time + _hov3_time + _transit_auto_time + _tnc_single_time + _tnc_shared_time + _taxi_time +# Transit Vehicle +,_knrin_totivt,(_knr_loc_mode * _knrin_loc_wlk_totivt) + (_knr_mix_mode * _knrin_mix_wlk_totivt) + (_knr_prm_mode * _knrin_prm_wlk_totivt) +,_knrout_totivt,(_knr_loc_mode * _knrout_loc_wlk_totivt) + (_knr_mix_mode * _knrout_mix_wlk_totivt) + (_knr_prm_mode * _knrout_prm_wlk_totivt) +,_pnrin_totivt,(_pnr_loc_mode * _pnrin_loc_wlk_totivt) + (_pnr_mix_mode * _pnrin_mix_wlk_totivt) + (_pnr_prm_mode * _pnrin_prm_wlk_totivt) +,_pnrout_totivt,(_pnr_loc_mode * _pnrout_loc_wlk_totivt) + (_pnr_mix_mode * _pnrout_mix_wlk_totivt) + (_pnr_prm_mode * _pnrout_prm_wlk_totivt) +,_tncin_transit_totivt,(_tnc_loc_mode * _tncin_loc_wlk_totivt) + (_tnc_mix_mode * _tncin_mix_wlk_totivt) + (_tnc_prm_mode * _tncin_prm_wlk_totivt) +,_tncout_transit_totivt,(_tnc_loc_mode * _tncout_loc_wlk_totivt) + (_tnc_mix_mode * _tncout_mix_wlk_totivt) + (_tnc_prm_mode * _tncout_prm_wlk_totivt) +,_walk_transit_totivt,(_walk_loc_mode * _walk_loc_wlk_totivt) + (_walk_mix_mode * _walk_mix_wlk_totivt) + (_walk_prm_mode * _walk_prm_wlk_totivt) +,_dwell_in_ivt,(_knr_loc_mode * _knrin_loc_wlk_dwell) + (_pnr_loc_mode * _pnrin_loc_wlk_dwell) + (_tnc_loc_mode * _tncin_loc_wlk_dwell) +,_dwell_out_ivt,(_knr_loc_mode * _knrout_loc_wlk_dwell) + (_pnr_loc_mode * _pnrout_loc_wlk_dwell) + (_tnc_loc_mode * _tncout_loc_wlk_dwell) +,_dwell_time,_dwell_in_ivt + _dwell_out_ivt + (_walk_loc_mode * _walk_loc_wlk_dwell) +,transit_vehicle_time,_knrin_totivt + _knrout_totivt + _pnrin_totivt + _pnrout_totivt + _tncin_transit_totivt + _tncout_transit_totivt + _walk_transit_totivt + _dwell_time +# Wait +,_knrin_iwait,(_knr_loc_mode * _knrin_loc_wlk_iwait) + (_knr_mix_mode * _knrin_mix_wlk_iwait) + (_knr_prm_mode * _knrin_prm_wlk_iwait) +,_knrout_iwait,(_knr_loc_mode * _knrout_loc_wlk_iwait) + (_knr_mix_mode * _knrout_mix_wlk_iwait) + (_knr_prm_mode * _knrout_prm_wlk_iwait) +,_pnrin_iwait,(_pnr_loc_mode * _pnrin_loc_wlk_iwait) + (_pnr_mix_mode * _pnrin_mix_wlk_iwait) + (_pnr_prm_mode * _pnrin_prm_wlk_iwait) +,_pnrout_iwait,(_pnr_loc_mode * _pnrout_loc_wlk_iwait) + (_pnr_mix_mode * _pnrout_mix_wlk_iwait) + (_pnr_prm_mode * _pnrout_prm_wlk_iwait) +,_tncin_transit_iwait,(_tnc_loc_mode * _tncin_loc_wlk_iwait) + (_tnc_mix_mode * _tncin_mix_wlk_iwait) + (_tnc_prm_mode * _tncin_prm_wlk_iwait) +,_tncout_transit_iwait,(_tnc_loc_mode * _tncout_loc_wlk_iwait) + (_tnc_mix_mode * _tncout_mix_wlk_iwait) + (_tnc_prm_mode * _tncout_prm_wlk_iwait) +,_walk_transit_iwait,(_walk_loc_mode * _walk_loc_wlk_iwait) + (_walk_mix_mode * _walk_mix_wlk_iwait) + (_walk_prm_mode * _walk_prm_wlk_iwait) +,_transit_initial_wait_time,_knrin_iwait + _knrout_iwait + _pnrin_iwait + _pnrout_iwait + _tncin_transit_iwait + _tncout_transit_iwait + _walk_transit_iwait +,_knrin_xwait,(_knr_loc_mode * _knrin_loc_wlk_xwait) + (_knr_mix_mode * _knrin_mix_wlk_xwait) + (_knr_prm_mode * _knrin_prm_wlk_xwait) +,_knrout_xwait,(_knr_loc_mode * _knrout_loc_wlk_xwait) + (_knr_mix_mode * _knrout_mix_wlk_xwait) + (_knr_prm_mode * _knrout_prm_wlk_xwait) +,_pnrin_xwait,(_pnr_loc_mode * _pnrin_loc_wlk_xwait) + (_pnr_mix_mode * _pnrin_mix_wlk_xwait) + (_pnr_prm_mode * _pnrin_prm_wlk_xwait) +,_pnrout_xwait,(_pnr_loc_mode * _pnrout_loc_wlk_xwait) + (_pnr_mix_mode * _pnrout_mix_wlk_xwait) + (_pnr_prm_mode * _pnrout_prm_wlk_xwait) +,_tncin_transit_xwait,(_tnc_loc_mode * _tncin_loc_wlk_xwait) + (_tnc_mix_mode * _tncin_mix_wlk_xwait) + (_tnc_prm_mode * _tncin_prm_wlk_xwait) +,_tncout_transit_xwait,(_tnc_loc_mode * _tncout_loc_wlk_xwait) + (_tnc_mix_mode * _tncout_mix_wlk_xwait) + (_tnc_prm_mode * _tncout_prm_wlk_xwait) +,_walk_transit_xwait,(_walk_loc_mode * _walk_loc_wlk_xwait) + (_walk_mix_mode * _walk_mix_wlk_xwait) + (_walk_prm_mode * _walk_prm_wlk_xwait) +,_transit_transfer_wait_time,_knrin_xwait + _knrout_xwait + _pnrin_xwait + _pnrout_xwait + _tncin_transit_xwait + _tncout_transit_xwait + _walk_transit_xwait +,wait_time,_transit_initial_wait_time + _transit_transfer_wait_time + (_taxi_mode * _TAXI_WAIT_TIME) + (_tnc_single_mode * _SINGLE_TNC_WAIT_TIME) + (_tnc_shared_mode + _SHARED_TNC_WAIT_TIME) +# Walk +,_transit_walk_access_time,(_walk_loc_mode * _wlk_wacc) + (_walk_mix_mode * _wlk_wacc) + (_walk_prm_mode * _wlk_wacc) +##### is auxiliary walk transfer walk? this column is in the database +#####,_transit_walk_aux_time,(_drive_com_mode * _drv_com_wlk_waux) + (_drive_exp_mode * _drv_exp_wlk_waux) + (_drive_hvy_mode * _drv_hvy_wlk_waux) + (_drive_loc_mode * _drv_loc_wlk_waux) + (_drive_lrf_mode * _drv_lrf_wlk_waux) + (_walk_com_mode * _wlk_com_wlk_waux) + (_walk_exp_mode * _wlk_exp_wlk_waux) + (_walk_hvy_mode * _wlk_hvy_wlk_waux) + (_walk_loc_mode * _wlk_loc_wlk_waux) + (_walk_lrf_mode * _wlk_lrf_wlk_waux) +,_transit_walk_aux_time,0 +,_knr_egress_time,(_knr_loc_mode * _wlk_wegr) + (_knr_mix_mode * _wlk_wegr) + (_knr_prm_mode * _wlk_wegr) +,_pnr_egress_time,(_pnr_loc_mode * _wlk_wegr) + (_pnr_mix_mode * _wlk_wegr) + (_pnr_prm_mode * _wlk_wegr) +,_tnc_transit_egress_time,(_tnc_loc_mode * _wlk_wegr) + (_tnc_mix_mode * _wlk_wegr) + (_tnc_prm_mode * _wlk_wegr) +,_walk_transit_egress_time,(_walk_loc_mode * _wlk_wegr) + (_walk_mix_mode * _wlk_wegr) + (_walk_prm_mode * _wlk_wegr) +,_transit_walk_egress_time,_knr_egress_time + _pnr_egress_time + _tnc_transit_egress_time + _walk_transit_egress_time +,walk_time,(_walk_mode * _walk_dist / _WALK_SPEED * 60) + _transit_walk_access_time + _transit_walk_aux_time + _transit_walk_egress_time +# Bike +,bike_time,_bike_mode * _bike_dist / _BIKE_SPEED * 60 +# Total +,total_time,auto_time + transit_vehicle_time + wait_time + walk_time + bike_time + +## Distance +# Auto +,_tnc_single_distance,(_tnc_single_mode * _hov2_m_dist) +,_tnc_shared_distance,(_tnc_shared_mode * _hov3_m_dist) # Doesn't account for VMT savings from sharing +,_taxi_distance,(_taxi_mode * _hov2_m_dist) +##### check that HOVDIST is not included in DIST +#####auto_distance is missing # Transit auto access/eggress distance (miles x 100) [DDIST in previous] +,_sov_tr_dist,(_sov_mode * _sov_tr_l_dist) + (_sov_mode * _sov_tr_m_dist) + (_sov_mode * _sov_tr_h_dist) +,_sov_nt_dist,(_sov_mode * _sov_nt_l_dist) + (_sov_mode * _sov_nt_m_dist) + (_sov_mode * _sov_nt_h_dist) +,_hov2_dist,(_hov2_mode * _hov2_l_dist) + (_hov2_mode * _hov2_m_dist) + (_hov2_mode * _hov2_h_dist) +,_hov3_dist,(_hov3_mode * _hov3_l_dist) + (_hov3_mode * _hov3_m_dist) + (_hov3_mode * _hov3_h_dist) +,_sov_tr_tolldist,(_sov_mode * _sov_tr_l_tolldist) + (_sov_mode * _sov_tr_m_tolldist) + (_sov_mode * _sov_tr_h_tolldist) +,_sov_nt_tolldist,(_sov_mode * _sov_nt_l_tolldist) + (_sov_mode * _sov_nt_m_tolldist) + (_sov_mode * _sov_nt_h_tolldist) +,_hov2_tolldist,(_hov2_mode * _hov2_l_tolldist) + (_hov2_mode * _hov2_m_tolldist) + (_hov2_mode * _hov2_h_tolldist) +,_hov3_tolldist,(_hov3_mode * _hov3_l_tolldist) + (_hov3_mode * _hov3_m_tolldist) + (_hov3_mode * _hov3_h_tolldist) +,auto_distance,_sov_tr_dist + _sov_nt_dist + _hov2_dist + _hov3_dist + _sov_tr_tolldist + _sov_nt_tolldist + _hov2_tolldist + _hov3_tolldist + _tnc_single_distance + _tnc_shared_distance + _taxi_distance + +# Walk +,walk_distance,(walk_time / 60 * _WALK_SPEED) +# Bike +,bike_distance,_bike_mode * _bike_dist + +## Cost +#####this excludes cost of operation of automobiles +,_knrin_cost,(_knr_loc_mode * _knrin_loc_wlk_far) + (_knr_mix_mode * _knrin_mix_wlk_far) + (_knr_prm_mode * _knrin_prm_wlk_far) +,_knrout_cost,(_knr_loc_mode * _knrout_loc_wlk_far) + (_knr_mix_mode * _knrout_mix_wlk_far) + (_knr_prm_mode * _knrout_prm_wlk_far) +,_pnrin_cost,(_pnr_loc_mode * _pnrin_loc_wlk_far) + (_pnr_mix_mode * _pnrin_mix_wlk_far) + (_pnr_prm_mode * _pnrin_prm_wlk_far) +,_pnrout_cost,(_pnr_loc_mode * _pnrout_loc_wlk_far) + (_pnr_mix_mode * _pnrout_mix_wlk_far) + (_pnr_prm_mode * _pnrout_prm_wlk_far) +,_tncin_transit_cost,(_tnc_loc_mode * _tncin_loc_wlk_far) + (_tnc_mix_mode * _tncin_mix_wlk_far) + (_tnc_prm_mode * _tncin_prm_wlk_far) +,_tncout_transit_cost,(_tnc_loc_mode * _tncout_loc_wlk_far) + (_tnc_mix_mode * _tncout_mix_wlk_far) + (_tnc_prm_mode * _tncout_prm_wlk_far) +,_walk_transit_cost,(_walk_loc_mode * _walk_loc_wlk_far) + (_walk_mix_mode * _walk_mix_wlk_far) + (_walk_prm_mode * _walk_prm_wlk_far) +,_transit_fare_cost,_knrin_cost + _knrout_cost + _pnrin_cost + _pnrout_cost + _tncin_transit_cost + _tncout_transit_cost + _walk_transit_cost +,_tnc_single_cost,"_TNC_SINGLE_BASE_FARE + np.maximum((_tnc_single_distance * _TAXI_COST_PER_MILE) + (_tnc_single_time * _TNC_SINGLE_COST_PER_MINUTE), _TNC_SINGLE_COST_MINIMUM)" +,_tnc_shared_cost,"_TNC_SHARED_BASE_FARE + np.maximum((_tnc_shared_distance * _TNC_SINGLE_COST_PER_MILE) + (_tnc_shared_time * _TNC_SHARED_COST_PER_MINUTE), _TNC_SHARED_COST_MINIMUM)" +,_taxi_cost,_TAXI_BASE_FARE + (_taxi_distance * _TNC_SHARED_COST_PER_MILE) + (_taxi_time * _TAXI_COST_PER_MINUTE) +,fare_cost,_transit_fare_cost + _tnc_single_cost + _tnc_shared_cost + _taxi_cost +,_sov_tr_vtoll,(_sov_mode * _sov_tr_l_vtoll) + (_sov_mode * _sov_tr_m_vtoll) + (_sov_mode * _sov_tr_h_vtoll) +,_sov_nt_vtoll,(_sov_mode * _sov_nt_l_vtoll) + (_sov_mode * _sov_nt_m_vtoll) + (_sov_mode * _sov_nt_h_vtoll) +,_hov2_vtoll,(_hov2_mode * _hov2_l_vtoll) + (_hov2_mode * _hov2_m_vtoll) + (_hov2_mode * _hov2_h_vtoll) +,_hov3_vtoll,(_hov3_mode * _hov3_l_vtoll) + (_hov3_mode * _hov3_m_vtoll) + (_hov3_mode * _hov3_h_vtoll) +,toll_cost, _sov_tr_vtoll + _sov_nt_vtoll + _hov2_vtoll + _hov3_vtoll + (_tnc_single_mode * _hov2_m_vtoll) + (_tnc_shared_mode * _hov3_m_vtoll) + (_taxi_mode * _hov2_m_vtoll) +,total_cost,fare_cost + toll_cost \ No newline at end of file