diff --git a/example/configs/settings.yaml b/example/configs/settings.yaml index 4f0bbbbc1..7420f2f75 100644 --- a/example/configs/settings.yaml +++ b/example/configs/settings.yaml @@ -45,7 +45,7 @@ use_shadow_pricing: False # trace household id; comment out or leave empty for no trace # households with all tour types # [ 728370 1234067 1402924 1594625 1595333 1747572 1896849 1931818 2222690 2344951 2677154] -trace_hh_id: 701664 +trace_hh_id: 2223759 # trace origin, destination in accessibility calculation; comment out or leave empty for no trace # trace_od: [5, 11] diff --git a/example/configs/tour_mode_choice.csv b/example/configs/tour_mode_choice.csv index 5389e2c91..b46658e8c 100644 --- a/example/configs/tour_mode_choice.csv +++ b/example/configs/tour_mode_choice.csv @@ -1,306 +1,342 @@ -Description,Expression,DRIVEALONEFREE,DRIVEALONEPAY,SHARED2FREE,SHARED2PAY,SHARED3FREE,SHARED3PAY,WALK,BIKE,WALK_LOC,WALK_LRF,WALK_EXP,WALK_HVY,WALK_COM,DRIVE_LOC,DRIVE_LRF,DRIVE_EXP,DRIVE_HVY,DRIVE_COM -#Drive alone no toll,,,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable,sov_available == False,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable for zero auto households,auto_ownership == 0,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable for persons less than 16,age < 16,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable for joint tours,is_joint == True,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable if didn't drive to work,is_atwork_subtour & ~work_tour_is_SOV,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - In-vehicle time,@c_ivt*(odt_skims['SOV_TIME'] + dot_skims['SOV_TIME']),1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Terminal time,@c_walktimeshort * 2 * df.terminal_time,1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Operating cost ,@df.c_cost * costPerMile * (odt_skims['SOV_DIST'] + dot_skims['SOV_DIST']),1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Parking cost ,c_cost * daily_parking_cost,1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Bridge toll ,@df.c_cost * (odt_skims['SOV_BTOLL'] + dot_skims['SOV_BTOLL']),1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Person is between 16 and 19 years old,@c_age1619_da * ((df.age >= 16) & (df.age <= 19)),1,,,,,,,,,,,,,,,,, -#Drive alone toll,,,,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable,sovtoll_available == False,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable for zero auto households,auto_ownership == 0,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable for persons less than 16,age < 16,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable for joint tours,is_joint == True,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable if didn't drive to work,is_atwork_subtour & ~work_tour_is_SOV,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - In-vehicle time,@c_ivt*(odt_skims['SOVTOLL_TIME'] + dot_skims['SOVTOLL_TIME']),,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Operating cost,@df.c_cost * costPerMile * (odt_skims['SOVTOLL_DIST'] + dot_skims['SOVTOLL_DIST']),,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Parking cost,c_cost * daily_parking_cost,,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Bridge toll,@df.c_cost * (odt_skims['SOVTOLL_BTOLL'] + dot_skims['SOVTOLL_BTOLL']),,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Value toll,@df.c_cost * (odt_skims['SOVTOLL_VTOLL'] + dot_skims['SOVTOLL_VTOLL']),,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Person is between 16 and 19 years old,@c_age1619_da * ((df.age >= 16) & (df.age <= 19)),,1,,,,,,,,,,,,,,,, -#Shared ride 2,,,,,,,,,,,,,,,,,,, -SHARED2FREE - Unavailable,hov2_available == False,,,-999,,,,,,,,,,,,,,, -SHARED2FREE - Unavailable based on party size,is_joint & (number_of_participants > 2),,,-999,,,,,,,,,,,,,,, -SHARED2FREE - In-vehicle time,@c_ivt * (odt_skims['HOV2_TIME'] + dot_skims['HOV2_TIME']),,,1,,,,,,,,,,,,,,, -SHARED2FREE - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,,1,,,,,,,,,,,,,,, -SHARED2FREE - Operating cost,@df.c_cost * costPerMile * (odt_skims['HOV2_DIST'] + dot_skims['HOV2_DIST']),,,1,,,,,,,,,,,,,,, -SHARED2FREE - Parking cost,@df.c_cost * df.daily_parking_cost / costShareSr2,,,1,,,,,,,,,,,,,,, -SHARED2FREE - Bridge toll,@df.c_cost * (odt_skims['HOV2_BTOLL'] + dot_skims['HOV2_BTOLL']) / costShareSr2,,,1,,,,,,,,,,,,,,, -SHARED2FREE - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,1,,,,,,,,,,,,,,, -SHARED2FREE - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,1,,,,,,,,,,,,,,, -SHARED2FREE - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,1,,,,,,,,,,,,,,, -#Shared ride 2 toll,,,,,,,,,,,,,,,,,,, -SHARED2PAY - Unavailable,hov2toll_available == False,,,,-999,,,,,,,,,,,,,, -SHARED2PAY - Unavailable based on party size,is_joint & (number_of_participants > 2),,,,-999,,,,,,,,,,,,,, -SHARED2PAY - In-vehicle time,@c_ivt * (odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2TOLL_TIME']),,,,1,,,,,,,,,,,,,, -SHARED2PAY - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,,,1,,,,,,,,,,,,,, -SHARED2PAY - Operating cost,@df.c_cost * costPerMile * (odt_skims['HOV2TOLL_DIST'] + dot_skims['HOV2TOLL_DIST']),,,,1,,,,,,,,,,,,,, -SHARED2PAY - Parking cost,@df.c_cost * df.daily_parking_cost / costShareSr2,,,,1,,,,,,,,,,,,,, -SHARED2PAY - Bridge toll,@df.c_cost * (odt_skims['HOV2TOLL_BTOLL'] + dot_skims['HOV2TOLL_BTOLL']) / costShareSr2,,,,1,,,,,,,,,,,,,, -SHARED2PAY - Value toll,@df.c_cost * (odt_skims['HOV2TOLL_VTOLL'] + dot_skims['HOV2TOLL_VTOLL']) / costShareSr2,,,,1,,,,,,,,,,,,,, -SHARED2PAY - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,1,,,,,,,,,,,,,, -SHARED2PAY - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,1,,,,,,,,,,,,,, -SHARED2PAY - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,1,,,,,,,,,,,,,, -#Shared ride 3+,,,,,,,,,,,,,,,,,,, -SHARED3FREE - Unavailable,hov3_available == False,,,,,-999,,,,,,,,,,,,, -SHARED3FREE - In-vehicle time,@c_ivt * (odt_skims['HOV3_TIME'] + dot_skims['HOV3_TIME']),,,,,1,,,,,,,,,,,,, -SHARED3FREE - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,,,,1,,,,,,,,,,,,, -SHARED3FREE - Operating cost,@df.c_cost * costPerMile * (odt_skims['HOV3_DIST'] + dot_skims['HOV3_DIST']),,,,,1,,,,,,,,,,,,, -SHARED3FREE - Parking cost,@df.c_cost * df.daily_parking_cost / costShareSr3,,,,,1,,,,,,,,,,,,, -SHARED3FREE - Bridge toll,@df.c_cost * (odt_skims['HOV3_BTOLL'] + dot_skims['HOV3_BTOLL']) / costShareSr3,,,,,1,,,,,,,,,,,,, -SHARED3FREE - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,,1,,,,,,,,,,,,, -SHARED3FREE - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,,1,,,,,,,,,,,,, -SHARED3FREE - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,,1,,,,,,,,,,,,, -#Shared ride 3+ toll,,,,,,,,,,,,,,,,,,, -SHARED3PAY - Unavailable,hov3toll_available == False,,,,,,-999,,,,,,,,,,,, -SHARED3PAY - In-vehicle time,@c_ivt * (odt_skims['HOV3TOLL_TIME'] + dot_skims['HOV3TOLL_TIME']),,,,,,1,,,,,,,,,,,, -SHARED3PAY - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,,,,,1,,,,,,,,,,,, -SHARED3PAY - Operating cost,@df.c_cost * costPerMile * (odt_skims['HOV3TOLL_DIST'] + dot_skims['HOV3TOLL_DIST']),,,,,,1,,,,,,,,,,,, -SHARED3PAY - Parking cost,@df.c_cost * df.daily_parking_cost / costShareSr3,,,,,,1,,,,,,,,,,,, -SHARED3PAY - Bridge toll,@df.c_cost * (odt_skims['HOV3TOLL_BTOLL'] + dot_skims['HOV3TOLL_BTOLL']) / costShareSr3,,,,,,1,,,,,,,,,,,, -SHARED3PAY - Value toll,@df.c_cost * (odt_skims['HOV3TOLL_VTOLL'] + dot_skims['HOV3TOLL_VTOLL']) / costShareSr3,,,,,,1,,,,,,,,,,,, -SHARED3PAY - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,,,1,,,,,,,,,,,, -SHARED3PAY - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,,,1,,,,,,,,,,,, -SHARED3PAY - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,,,1,,,,,,,,,,,, -#Walk,,,,,,,,,,,,,,,,,,, -#FIXME - skims aren't symmetrical, so we have to make sure they can get back,,,,,,,,,,,,,,,,,, -WALK - Time up to 2 miles,@c_walktimeshort * (od_skims['DISTWALK'].clip(upper=walkThresh) + od_skims.reverse('DISTWALK').clip(upper=walkThresh))*60/walkSpeed,,,,,,,1,,,,,,,,,,, -WALK - Time beyond 2 of a miles,@c_walktimelong * ((od_skims['DISTWALK'] - walkThresh).clip(lower=0) + (od_skims.reverse('DISTWALK') - walkThresh).clip(lower=0))*60/walkSpeed,,,,,,,1,,,,,,,,,,, -WALK - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,1,,,,,,,,,,, -WALK - Topology,@c_topology_walk * df.dest_topology,,,,,,,1,,,,,,,,,,, -#Bike,,,,,,,,,,,,,,,,,,, -#FIXME - skims aren't symmetrical, so we have to make sure they can get back,,,,,,,,,,,,,,,,,, -BIKE - Unavailable if didn't bike to work,is_atwork_subtour & ~work_tour_is_bike,,,,,,,,-999,,,,,,,,,, -BIKE - Time up to 6 miles,@c_biketimeshort * (od_skims['DISTBIKE'].clip(upper=bikeThresh) + od_skims.reverse('DISTBIKE').clip(upper=bikeThresh))*60/bikeSpeed,,,,,,,,1,,,,,,,,,, -BIKE - Time beyond 6 of a miles,@c_biketimelong * ((od_skims['DISTBIKE']-bikeThresh).clip(lower=0) + (od_skims.reverse('DISTBIKE')-bikeThresh).clip(lower=0))*60/bikeSpeed,,,,,,,,1,,,,,,,,,, -BIKE - Destination zone densityIndex,@c_density_index*df.density_index,,,,,,,,1,,,,,,,,,, -BIKE - Topology,@c_topology_bike * df.dest_topology,,,,,,,,1,,,,,,,,,, -#Walk to Local,,,,,,,,,,,,,,,,,,, -WALK_LOC - Unavailable,walk_local_available == False,,,,,,,,,-999,,,,,,,,, -WALK_LOC - In-vehicle time,@c_ivt * (odt_skims['WLK_LOC_WLK_TOTIVT']/100 + dot_skims['WLK_LOC_WLK_TOTIVT']/100),,,,,,,,,1,,,,,,,,, -WALK_LOC - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_LOC_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_LOC_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,1,,,,,,,,, -WALK_LOC - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_LOC_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_LOC_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,1,,,,,,,,, -WALK_LOC - transfer wait time,@c_xwait * (odt_skims['WLK_LOC_WLK_XWAIT']/100 + dot_skims['WLK_LOC_WLK_XWAIT']/100),,,,,,,,,1,,,,,,,,, -WALK_LOC - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_LOC_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_LOC_WLK_BOARDS']-1).clip(0)),,,,,,,,,1,,,,,,,,, -WALK_LOC - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,1,,,,,,,,, -WALK_LOC - Walk egress time,@c_wegr * 2 * df.destination_walk_time,,,,,,,,,1,,,,,,,,, -WALK_LOC - Walk other time,@c_waux * (odt_skims['WLK_LOC_WLK_WAUX']/100 + dot_skims['WLK_LOC_WLK_WAUX']/100),,,,,,,,,1,,,,,,,,, -WALK_LOC - Fare,@df.c_cost * (odt_skims['WLK_LOC_WLK_FAR'] + dot_skims['WLK_LOC_WLK_FAR']),,,,,,,,,1,,,,,,,,, -WALK_LOC - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,1,,,,,,,,, -WALK_LOC - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,1,,,,,,,,, -WALK_LOC - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,1,,,,,,,,, -#Walk to Light rail/Ferry,,,,,,,,,,,,,,,,,,, -WALK_LRF - Unavailable,walk_lrf_available == False,,,,,,,,,,-999,,,,,,,, -WALK_LRF - In-vehicle time,@c_ivt * (odt_skims['WLK_LRF_WLK_TOTIVT']/100 + dot_skims['WLK_LRF_WLK_TOTIVT']/100),,,,,,,,,,1,,,,,,,, -WALK_LRF - In-vehicle time on Light Rail (incremental w/ ivt),@(c_ivt_lrt-c_ivt) * (odt_skims['WLK_LRF_WLK_KEYIVT']/100 + dot_skims['WLK_LRF_WLK_KEYIVT']/100),,,,,,,,,,1,,,,,,,, -WALK_LRF - In-vehicle time on Ferry (incremental w/keyivt),@(c_ivt_ferry-c_ivt_lrt) * (odt_skims['WLK_LRF_WLK_FERRYIVT']/100 + dot_skims['WLK_LRF_WLK_FERRYIVT']/100),,,,,,,,,,1,,,,,,,, -WALK_LRF - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_LRF_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_LRF_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,1,,,,,,,, -WALK_LRF - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_LRF_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_LRF_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,1,,,,,,,, -WALK_LRF - transfer wait time,@c_xwait * (odt_skims['WLK_LRF_WLK_XWAIT']/100 + dot_skims['WLK_LRF_WLK_XWAIT']/100),,,,,,,,,,1,,,,,,,, -WALK_LRF - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_LRF_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_LRF_WLK_BOARDS']-1).clip(0)),,,,,,,,,,1,,,,,,,, -WALK_LRF - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,,1,,,,,,,, -WALK_LRF - Walk egress time,@c_wegr * 2 * df.destination_walk_time,,,,,,,,,,1,,,,,,,, -WALK_LRF - Walk other time,@c_waux * (odt_skims['WLK_LRF_WLK_WAUX']/100 + dot_skims['WLK_LRF_WLK_WAUX']/100),,,,,,,,,,1,,,,,,,, -WALK_LRF - Fare,@df.c_cost * (odt_skims['WLK_LRF_WLK_FAR'] + dot_skims['WLK_LRF_WLK_FAR']),,,,,,,,,,1,,,,,,,, -WALK_LRF - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,1,,,,,,,, -WALK_LRF - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,1,,,,,,,, -WALK_LRF - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,1,,,,,,,, -#Walk to Express bus,,,,,,,,,,,,,,,,,,, -WALK_EXP - Unavailable,walk_express_available == False,,,,,,,,,,,-999,,,,,,, -WALK_EXP - In-vehicle time,@c_ivt * (odt_skims['WLK_EXP_WLK_TOTIVT']/100 + dot_skims['WLK_EXP_WLK_TOTIVT']/100),,,,,,,,,,,1,,,,,,, -WALK_EXP - In-vehicle time on Express bus (incremental w/ ivt),@(c_ivt_exp-c_ivt) * (odt_skims['WLK_EXP_WLK_KEYIVT']/100 + dot_skims['WLK_EXP_WLK_KEYIVT']/100),,,,,,,,,,,1,,,,,,, -WALK_EXP - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_EXP_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_EXP_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,1,,,,,,, -WALK_EXP - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_EXP_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_EXP_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,1,,,,,,, -WALK_EXP - transfer wait time,@c_xwait * (odt_skims['WLK_EXP_WLK_XWAIT']/100 + dot_skims['WLK_EXP_WLK_XWAIT']/100),,,,,,,,,,,1,,,,,,, -WALK_EXP - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_EXP_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_EXP_WLK_BOARDS']-1).clip(0)),,,,,,,,,,,1,,,,,,, -WALK_EXP - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,,,1,,,,,,, -WALK_EXP - Walk egress time,@c_wegr * 2 * df.destination_walk_time,,,,,,,,,,,1,,,,,,, -WALK_EXP - Walk other time,@c_waux * (odt_skims['WLK_EXP_WLK_WAUX']/100 + dot_skims['WLK_EXP_WLK_WAUX']/100),,,,,,,,,,,1,,,,,,, -WALK_EXP - Fare,@df.c_cost * (odt_skims['WLK_EXP_WLK_FAR'] + dot_skims['WLK_EXP_WLK_FAR']),,,,,,,,,,,1,,,,,,, -WALK_EXP - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,1,,,,,,, -WALK_EXP - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,1,,,,,,, -WALK_EXP - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,,1,,,,,,, -#Walk to Heavy Rail,,,,,,,,,,,,,,,,,,, -WALK_HVY - Unavailable,walk_heavyrail_available == False,,,,,,,,,,,,-999,,,,,, -WALK_HVY - In-vehicle time,@c_ivt * (odt_skims['WLK_HVY_WLK_TOTIVT']/100 + dot_skims['WLK_HVY_WLK_TOTIVT']/100),,,,,,,,,,,,1,,,,,, -WALK_HVY - In-vehicle time on heavy rail (incremental w/ ivt),@(c_ivt_hvy-c_ivt) * (odt_skims['WLK_HVY_WLK_KEYIVT']/100 + dot_skims['WLK_HVY_WLK_KEYIVT']/100),,,,,,,,,,,,1,,,,,, -WALK_HVY - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_HVY_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_HVY_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,1,,,,,, -WALK_HVY - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_HVY_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_HVY_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,1,,,,,, -WALK_HVY - transfer wait time,@c_xwait * (odt_skims['WLK_HVY_WLK_XWAIT']/100 + dot_skims['WLK_HVY_WLK_XWAIT']/100),,,,,,,,,,,,1,,,,,, -WALK_HVY - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_HVY_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_HVY_WLK_BOARDS']-1).clip(0)),,,,,,,,,,,,1,,,,,, -WALK_HVY - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,,,,1,,,,,, -WALK_HVY - Walk egress time,@c_wegr * 2 *df.destination_walk_time,,,,,,,,,,,,1,,,,,, -WALK_HVY - Walk other time,@c_waux * (odt_skims['WLK_HVY_WLK_WAUX']/100 + dot_skims['WLK_HVY_WLK_WAUX']/100),,,,,,,,,,,,1,,,,,, -WALK_HVY - Fare,@df.c_cost * (odt_skims['WLK_HVY_WLK_FAR'] + dot_skims['WLK_HVY_WLK_FAR']),,,,,,,,,,,,1,,,,,, -WALK_HVY - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,1,,,,,, -WALK_HVY - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,1,,,,,, -WALK_HVY - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,,,1,,,,,, -#Walk to Commuter rail,,,,,,,,,,,,,,,,,,, -WALK_COM - Unavailable,walk_commuter_available == False,,,,,,,,,,,,,-999,,,,, -WALK_COM - In-vehicle time,@c_ivt * (odt_skims['WLK_COM_WLK_TOTIVT']/100 + dot_skims['WLK_COM_WLK_TOTIVT']/100),,,,,,,,,,,,,1,,,,, -WALK_COM - In-vehicle time on commuter rail (incremental w/ ivt),@(c_ivt_com-c_ivt) * (odt_skims['WLK_COM_WLK_KEYIVT']/100 + dot_skims['WLK_COM_WLK_KEYIVT']/100),,,,,,,,,,,,,1,,,,, -WALK_COM - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_COM_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_COM_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,1,,,,, -WALK_COM - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_COM_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_COM_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,1,,,,, -WALK_COM - transfer wait time,@c_xwait * (odt_skims['WLK_COM_WLK_XWAIT']/100 + dot_skims['WLK_COM_WLK_XWAIT']/100),,,,,,,,,,,,,1,,,,, -WALK_COM - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_COM_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_COM_WLK_BOARDS']-1).clip(0)),,,,,,,,,,,,,1,,,,, -WALK_COM - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,,,,,1,,,,, -WALK_COM - Walk egress time,@c_wegr * 2 * df.destination_walk_time,,,,,,,,,,,,,1,,,,, -WALK_COM - Walk other time,@c_waux * (odt_skims['WLK_COM_WLK_WAUX']/100 + dot_skims['WLK_COM_WLK_WAUX']/100),,,,,,,,,,,,,1,,,,, -WALK_COM - Fare,@df.c_cost * (odt_skims['WLK_COM_WLK_FAR'] + dot_skims['WLK_COM_WLK_FAR']),,,,,,,,,,,,,1,,,,, -WALK_COM - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,1,,,,, -WALK_COM - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,1,,,,, -WALK_COM - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,1,,,,, -#Drive to Local,,,,,,,,,,,,,,,,,,, -DRIVE_LOC - Unavailable,drive_local_available == False,,,,,,,,,,,,,,-999,,,, -DRIVE_LOC - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,-999,,,, -DRIVE_LOC - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,-999,,,, -DRIVE_LOC - In-vehicle time,@c_ivt * (odt_skims['DRV_LOC_WLK_TOTIVT']/100 + dot_skims['WLK_LOC_DRV_TOTIVT']/100),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_LOC_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_LOC_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_LOC_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_LOC_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - transfer wait time,@c_xwait * (odt_skims['DRV_LOC_WLK_XWAIT']/100 + dot_skims['WLK_LOC_DRV_XWAIT']/100),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - number of transfers,@c_xfers_wlk * ((odt_skims['DRV_LOC_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_LOC_DRV_BOARDS']-1).clip(0)),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Drive time,@c_dtim * (odt_skims['DRV_LOC_WLK_DTIM']/100 + dot_skims['WLK_LOC_DRV_DTIM']/100),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Walk access time,@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Walk egress time (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Walk other time,@c_waux * (odt_skims['DRV_LOC_WLK_WAUX']/100 + dot_skims['WLK_LOC_DRV_WAUX']/100),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_LOC_WLK_FAR'] + dot_skims['WLK_LOC_DRV_FAR']) + ((odt_skims['DRV_LOC_WLK_DDIST']/100+dot_skims['WLK_LOC_DRV_DDIST']/100) * costPerMile)),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Ratio of drive access distance to OD distance,@c_dacc_ratio * ((odt_skims['DRV_LOC_WLK_DDIST']/100+ dot_skims['WLK_LOC_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,1,,,, -#Drive to Light Rail/Ferry ,,,,,,,,,,,,,,,,,,, -DRIVE_LRF - Unavailable,drive_lrf_available == False,,,,,,,,,,,,,,,-999,,, -DRIVE_LRF - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,-999,,, -DRIVE_LRF - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,-999,,, -DRIVE_LRF - In-vehicle time,@c_ivt * (odt_skims['DRV_LRF_WLK_TOTIVT']/100 + dot_skims['WLK_LRF_DRV_TOTIVT']/100),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - In-vehicle time on Light Rail (incremental w/ ivt),@(c_ivt_lrt-c_ivt)*(odt_skims['DRV_LRF_WLK_KEYIVT']/100 + dot_skims['WLK_LRF_DRV_KEYIVT']/100),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - In-vehicle time on Ferry (incremental w/ keyivt),@(c_ivt_ferry-c_ivt_lrt)*(odt_skims['DRV_LRF_WLK_FERRYIVT']/100 + dot_skims['WLK_LRF_DRV_FERRYIVT']/100),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_LRF_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_LRF_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_LRF_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_LRF_DRV_IWAIT']/100-waitThresh).clip(0)) ,,,,,,,,,,,,,,,1,,, -DRIVE_LRF - transfer wait time,@c_xwait * (odt_skims['DRV_LRF_WLK_XWAIT']/100 + dot_skims['WLK_LRF_DRV_XWAIT']/100),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - number of transfers,@c_xfers_drv * (odt_skims['DRV_LRF_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Drive time,@c_dtim * (odt_skims['DRV_LRF_WLK_DTIM']/100 + dot_skims['WLK_LRF_DRV_DTIM']/100),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Walk access time (at attraction end),@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Walk egress time (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Walk other time,@c_waux * (odt_skims['DRV_LRF_WLK_WAUX']/100 + dot_skims['WLK_LRF_DRV_WAUX']/100),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_LRF_WLK_FAR']+dot_skims['WLK_LRF_DRV_FAR']) + ((odt_skims['DRV_LRF_WLK_DDIST']/100+dot_skims['WLK_LRF_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Ratio of drive access distance to OD distance,@c_dacc_ratio * ((odt_skims['DRV_LRF_WLK_DDIST']/100+ dot_skims['WLK_LRF_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,1,,, -#Drive to Express bus,,,,,,,,,,,,,,,,,,, -DRIVE_EXP - Unavailable,drive_express_available == False,,,,,,,,,,,,,,,,-999,, -DRIVE_EXP - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,-999,, -DRIVE_EXP - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,-999,, -DRIVE_EXP - In-vehicle time,@c_ivt * (odt_skims['DRV_EXP_WLK_TOTIVT']/100 + dot_skims['WLK_EXP_DRV_TOTIVT']/100),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - In-vehicle time on Express bus (incremental w/ ivt),@(c_ivt_exp-c_ivt) * (odt_skims['DRV_EXP_WLK_KEYIVT']/100 + dot_skims['WLK_EXP_DRV_KEYIVT']/100),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_EXP_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_EXP_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_EXP_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_EXP_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - transfer wait time,@c_xwait * (odt_skims['DRV_EXP_WLK_XWAIT']/100 + dot_skims['WLK_EXP_DRV_XWAIT']/100),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - number of transfers,@c_xfers_drv * ((odt_skims['DRV_EXP_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_EXP_DRV_BOARDS']-1).clip(0)),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Drive time,@c_dtim * (odt_skims['DRV_EXP_WLK_DTIM']/100 + dot_skims['WLK_EXP_DRV_DTIM']/100),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Walk access time (at attraction end),@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Walk egress ime (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Walk other time,@c_waux * (odt_skims['DRV_EXP_WLK_WAUX']/100 + dot_skims['WLK_EXP_DRV_WAUX']/100),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_EXP_WLK_FAR']+dot_skims['WLK_EXP_DRV_FAR']) + ((odt_skims['DRV_EXP_WLK_DDIST']/100+dot_skims['WLK_EXP_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Ratio of drive access distance to OD distance,@c_dacc_ratio * ((odt_skims['DRV_EXP_WLK_DDIST']/100+ dot_skims['WLK_EXP_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,1,, -#Drive to Heavy Rail,,,,,,,,,,,,,,,,,,, -DRIVE_HVY - Unavailable,drive_heavyrail_available == False,,,,,,,,,,,,,,,,,-999, -DRIVE_HVY - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,,-999, -DRIVE_HVY - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,,-999, -DRIVE_HVY - In-vehicle time,@c_ivt * (odt_skims['DRV_HVY_WLK_TOTIVT']/100 + dot_skims['WLK_HVY_DRV_TOTIVT']/100),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - In-vehicle time on heavy rail (incremental w/ ivt),@(c_ivt_hvy-c_ivt) * (odt_skims['DRV_HVY_WLK_KEYIVT']/100 + dot_skims['WLK_HVY_DRV_KEYIVT']/100),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_HVY_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_HVY_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_HVY_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_HVY_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - transfer wait time,@c_xwait * (odt_skims['DRV_HVY_WLK_XWAIT']/100 + dot_skims['WLK_HVY_DRV_XWAIT']/100),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - number of transfers,@c_xfers_drv * ((odt_skims['DRV_HVY_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_HVY_DRV_BOARDS']-1).clip(0)),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Drive time,@c_dtim * (odt_skims['DRV_HVY_WLK_DTIM']/100 + dot_skims['WLK_HVY_DRV_DTIM']/100),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Walk access time (at attraction end),@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Walk egress time (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Walk other time,@c_waux * (odt_skims['DRV_HVY_WLK_WAUX']/100 + dot_skims['WLK_HVY_DRV_WAUX']/100),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_HVY_WLK_FAR']+dot_skims['WLK_HVY_DRV_FAR']) + ((odt_skims['DRV_HVY_WLK_DDIST']/100+dot_skims['WLK_HVY_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Ratio of drive access distance to OD distance,@c_dacc_ratio * (odt_skims['DRV_HVY_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,,1, -#Drive to Commuter Rail,,,,,,,,,,,,,,,,,,, -DRIVE_COM - Unavailable,drive_commuter_available == False,,,,,,,,,,,,,,,,,,-999 -DRIVE_COM - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,,,-999 -DRIVE_COM - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,,,-999 -DRIVE_COM - In-vehicle time,@c_ivt * (odt_skims['DRV_COM_WLK_TOTIVT']/100 + dot_skims['WLK_COM_DRV_TOTIVT']/100),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - In-vehicle time on commuter rail (incremental w/ ivt),@(c_ivt_com-c_ivt) * (odt_skims['DRV_COM_WLK_KEYIVT']/100 + dot_skims['WLK_COM_DRV_KEYIVT']/100),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_COM_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_COM_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_COM_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_COM_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - transfer wait time,@c_xwait * (odt_skims['DRV_COM_WLK_XWAIT']/100 + dot_skims['WLK_COM_DRV_XWAIT']/100),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - number of transfers,@c_xfers_drv * ((odt_skims['DRV_COM_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_COM_DRV_BOARDS']-1).clip(0)),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Drive time,@c_dtim * (odt_skims['DRV_COM_WLK_DTIM']/100 + dot_skims['WLK_COM_DRV_DTIM']/100),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Walk access time (at attraction end),@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Walk egress time (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Walk other time,@c_waux * (odt_skims['DRV_COM_WLK_WAUX']/100 + dot_skims['WLK_COM_DRV_WAUX']/100),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_COM_WLK_FAR']+dot_skims['WLK_COM_DRV_FAR']) + ((odt_skims['DRV_COM_WLK_DDIST']/100+dot_skims['WLK_COM_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Ratio of drive access distance to OD distance,@c_dacc_ratio * ((odt_skims['DRV_COM_WLK_DDIST']/100 + dot_skims['WLK_COM_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,,,1 -#indiv tour ASCs,,,,,,,,,,,,,,,,,,, -Walk ASC - Zero auto,@walk_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,1,,,,,,,,,,, -Walk ASC - Auto deficient,@walk_ASC_auto_decicient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,1,,,,,,,,,,, -Walk ASC - Auto deficient,@walk_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,1,,,,,,,,,,, -Bike ASC - Zero auto,@bike_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,1,,,,,,,,,, -Bike ASC - Auto deficient,@bike_ASC_auto_decicient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,1,,,,,,,,,, -Bike ASC - Auto deficient,@bike_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,1,,,,,,,,,, -Shared ride 2 ASC - Zero auto,@sr2_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,1,1,,,,,,,,,,,,,, -Shared ride 2 ASC - Auto deficient,@sr2_ASC_auto_decicient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,1,1,,,,,,,,,,,,,, -Shared ride 2 ASC - Auto deficient,@sr2_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,1,1,,,,,,,,,,,,,, -Shared ride 3+ - Zero auto,@sr3p_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,1,1,,,,,,,,,,,, -Shared ride 3+ - Auto deficient,@sr3p_ASC_auto_decicient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,1,1,,,,,,,,,,,, -Shared ride 3+ - Auto deficient,@sr3p_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,1,1,,,,,,,,,,,, -Walk to Transit - Zero auto,@walk_transit_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,,1,1,1,1,1,,,,, -Walk to Transit - Auto deficient,@walk_transit_ASC_auto_decicient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,1,1,1,1,1,,,,, -Walk to Transit - Auto deficient,@walk_transit_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,,1,1,1,1,1,,,,, -Drive to Transit - Zero auto,@drive_transit_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,,,,,,,1,1,1,1,1 -Drive to Transit - Auto deficient,@drive_transit_ASC_auto_decicient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,1,1,1,1,1 -Drive to Transit - Auto deficient,@drive_transit_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,1,1,1,1,1 -#joint tour ASCs,,,,,,,,,,,,,,,,,,, -Joint - Walk ASC - Zero auto,@joint_walk_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,1,,,,,,,,,,, -Joint - Walk ASC - Auto deficient,@joint_walk_ASC_auto_decicient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,1,,,,,,,,,,, -Joint - Walk ASC - Auto deficient,@joint_walk_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,1,,,,,,,,,,, -Joint - Bike ASC - Zero auto,@joint_bike_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,1,,,,,,,,,, -Joint - Bike ASC - Auto deficient,@joint_bike_ASC_auto_decicient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,1,,,,,,,,,, -Joint - Bike ASC - Auto deficient,@joint_bike_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,1,,,,,,,,,, -Joint - Shared ride 2 ASC - Zero auto,@joint_sr2_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,1,1,,,,,,,,,,,,,, -Joint - Shared ride 2 ASC - Auto deficient,@joint_sr2_ASC_auto_decicient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,1,1,,,,,,,,,,,,,, -Joint - Shared ride 2 ASC - Auto deficient,@joint_sr2_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,1,1,,,,,,,,,,,,,, -Joint - Shared ride 3+ - Zero auto,@joint_sr3p_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,1,1,,,,,,,,,,,, -Joint - Shared ride 3+ - Auto deficient,@joint_sr3p_ASC_auto_decicient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,1,1,,,,,,,,,,,, -Joint - Shared ride 3+ - Auto deficient,@joint_sr3p_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,1,1,,,,,,,,,,,, -Joint - Walk to Transit - Zero auto,@joint_walk_transit_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,,1,1,1,1,1,,,,, -Joint - Walk to Transit - Auto deficient,@joint_walk_transit_ASC_auto_decicient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,1,1,1,1,1,,,,, -Joint - Walk to Transit - Auto deficient,@joint_walk_transit_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,,1,1,1,1,1,,,,, -Joint - Drive to Transit - Zero auto,@joint_drive_transit_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,,,,,,,1,1,1,1,1 -Joint - Drive to Transit - Auto deficient,@joint_drive_transit_ASC_auto_decicient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,1,1,1,1,1 -Joint - Drive to Transit - Auto deficient,@joint_drive_transit_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,1,1,1,1,1 -Local bus ASC,@local_bus_ASC,,,,,,,,,1,,,,,1,,,, -Walk to Light Rail ASC,@walk_light_rail_ASC * (df.walk_ferry_available == False),,,,,,,,,,1,,,,,,,, -Drive to Light Rail ASC,@drive_light_rail_ASC * (df.drive_ferry_available == False),,,,,,,,,,,,,,,1,,, -Walk to Ferry ASC,@walk_ferry_ASC * df.walk_ferry_available,,,,,,,,,,1,,,,,,,, -Drive to Ferry ASC,@drive_ferry_ASC * df.drive_ferry_available,,,,,,,,,,,,,,,1,,, -Express Bus ASC,@express_bus_ASC,,,,,,,,,,,1,,,,,1,, -Heavy Rail ASC,@heavy_rail_ASC,,,,,,,,,,,,1,,,,,1, -Commuter Rail,@commuter_rail_ASC,,,,,,,,,,,,,1,,,,,1 -Walk to Transit dest CBD,@walk_transit_CBD_ASC * df.destination_in_cbd,,,,,,,,,1,1,1,1,1,,,,, -Drive to Transit dest CBD,@drive_transit_CBD_ASC * df.destination_in_cbd,,,,,,,,,,,,,,1,1,1,1,1 -Drive to Transit - distance penalty,@(c_drvtrn_distpen_0*(1-od_skims['DIST']/c_drvtrn_distpen_max)).clip(upper=0),,,,,,,,,,,,,,1,1,1,1,1 -# FIXME - skims aren't symmetrical, so we have to make sure they can get back,,,,,,,,,,,,,,,,,, -Walk not available for long distances,@od_skims.max('DISTWALK') > 3,,,,,,,-999,,,,,,,,,,, -Bike not available for long distances,@od_skims.max('DISTBIKE') > 8,,,,,,,,-999,,,,,,,,,, -Drive alone not available for escort tours,is_escort,-999,-999,,,,,,,,,,,,,,,, +Description,Expression,DRIVEALONEFREE,DRIVEALONEPAY,SHARED2FREE,SHARED2PAY,SHARED3FREE,SHARED3PAY,WALK,BIKE,WALK_LOC,WALK_LRF,WALK_EXP,WALK_HVY,WALK_COM,DRIVE_LOC,DRIVE_LRF,DRIVE_EXP,DRIVE_HVY,DRIVE_COM,TAXI,TNC_SINGLE,TNC_SHARED +#Drive alone no toll,,,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable,sov_available == False,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable for zero auto households,auto_ownership == 0,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable for persons less than 16,age < 16,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable for joint tours,is_joint == True,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable if didn't drive to work,is_atwork_subtour & ~work_tour_is_SOV,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - In-vehicle time,@c_ivt*(odt_skims['SOV_TIME'] + dot_skims['SOV_TIME']),1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Terminal time,@c_walktimeshort * 2 * df.terminal_time,1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Operating cost,@df.c_cost * costPerMile * (odt_skims['SOV_DIST'] + dot_skims['SOV_DIST']),1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Parking cost,c_cost * daily_parking_cost,1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Bridge toll,@df.c_cost * (odt_skims['SOV_BTOLL'] + dot_skims['SOV_BTOLL']),1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Person is between 16 and 19 years old,@c_age1619_da * ((df.age >= 16) & (df.age <= 19)),1,,,,,,,,,,,,,,,,,,,, +#Drive alone toll,,,,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable,sovtoll_available == False,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable for zero auto households,auto_ownership == 0,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable for persons less than 16,age < 16,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable for joint tours,is_joint == True,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable if didn't drive to work,is_atwork_subtour & ~work_tour_is_SOV,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - In-vehicle time,@c_ivt*(odt_skims['SOVTOLL_TIME'] + dot_skims['SOVTOLL_TIME']),,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Operating cost,@df.c_cost * costPerMile * (odt_skims['SOVTOLL_DIST'] + dot_skims['SOVTOLL_DIST']),,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Parking cost,c_cost * daily_parking_cost,,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Bridge toll,@df.c_cost * (odt_skims['SOVTOLL_BTOLL'] + dot_skims['SOVTOLL_BTOLL']),,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Value toll,@df.c_cost * (odt_skims['SOVTOLL_VTOLL'] + dot_skims['SOVTOLL_VTOLL']),,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Person is between 16 and 19 years old,@c_age1619_da * ((df.age >= 16) & (df.age <= 19)),,1,,,,,,,,,,,,,,,,,,, +#Shared ride 2,,,,,,,,,,,,,,,,,,,,,, +SHARED2FREE - Unavailable,hov2_available == False,,,-999,,,,,,,,,,,,,,,,,, +SHARED2FREE - Unavailable based on party size,is_joint & (number_of_participants > 2),,,-999,,,,,,,,,,,,,,,,,, +SHARED2FREE - In-vehicle time,@c_ivt * (odt_skims['HOV2_TIME'] + dot_skims['HOV2_TIME']),,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Operating cost,@df.c_cost * costPerMile * (odt_skims['HOV2_DIST'] + dot_skims['HOV2_DIST']),,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Parking cost,@df.c_cost * df.daily_parking_cost / costShareSr2,,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Bridge toll,@df.c_cost * (odt_skims['HOV2_BTOLL'] + dot_skims['HOV2_BTOLL']) / costShareSr2,,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,1,,,,,,,,,,,,,,,,,, +#Shared ride 2 toll,,,,,,,,,,,,,,,,,,,,,, +SHARED2PAY - Unavailable,hov2toll_available == False,,,,-999,,,,,,,,,,,,,,,,, +SHARED2PAY - Unavailable based on party size,is_joint & (number_of_participants > 2),,,,-999,,,,,,,,,,,,,,,,, +SHARED2PAY - In-vehicle time,@c_ivt * (odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2TOLL_TIME']),,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Operating cost,@df.c_cost * costPerMile * (odt_skims['HOV2TOLL_DIST'] + dot_skims['HOV2TOLL_DIST']),,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Parking cost,@df.c_cost * df.daily_parking_cost / costShareSr2,,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Bridge toll,@df.c_cost * (odt_skims['HOV2TOLL_BTOLL'] + dot_skims['HOV2TOLL_BTOLL']) / costShareSr2,,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Value toll,@df.c_cost * (odt_skims['HOV2TOLL_VTOLL'] + dot_skims['HOV2TOLL_VTOLL']) / costShareSr2,,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,1,,,,,,,,,,,,,,,,, +#Shared ride 3+,,,,,,,,,,,,,,,,,,,,,, +SHARED3FREE - Unavailable,hov3_available == False,,,,,-999,,,,,,,,,,,,,,,, +SHARED3FREE - In-vehicle time,@c_ivt * (odt_skims['HOV3_TIME'] + dot_skims['HOV3_TIME']),,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Operating cost,@df.c_cost * costPerMile * (odt_skims['HOV3_DIST'] + dot_skims['HOV3_DIST']),,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Parking cost,@df.c_cost * df.daily_parking_cost / costShareSr3,,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Bridge toll,@df.c_cost * (odt_skims['HOV3_BTOLL'] + dot_skims['HOV3_BTOLL']) / costShareSr3,,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,,1,,,,,,,,,,,,,,,, +#Shared ride 3+ toll,,,,,,,,,,,,,,,,,,,,,, +SHARED3PAY - Unavailable,hov3toll_available == False,,,,,,-999,,,,,,,,,,,,,,, +SHARED3PAY - In-vehicle time,@c_ivt * (odt_skims['HOV3TOLL_TIME'] + dot_skims['HOV3TOLL_TIME']),,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Terminal time,@c_walktimeshort * 2 * df.terminal_time,,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Operating cost,@df.c_cost * costPerMile * (odt_skims['HOV3TOLL_DIST'] + dot_skims['HOV3TOLL_DIST']),,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Parking cost,@df.c_cost * df.daily_parking_cost / costShareSr3,,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Bridge toll,@df.c_cost * (odt_skims['HOV3TOLL_BTOLL'] + dot_skims['HOV3TOLL_BTOLL']) / costShareSr3,,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Value toll,@df.c_cost * (odt_skims['HOV3TOLL_VTOLL'] + dot_skims['HOV3TOLL_VTOLL']) / costShareSr3,,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,,,1,,,,,,,,,,,,,,, +#Walk,,,,,,,,,,,,,,,,,,,,,, +#FIXME - skims aren't symmetrical,so we have to make sure they can get back,,,,,,,,,,,,,,,,,,,,, +WALK - Time up to 2 miles,@c_walktimeshort * (od_skims['DISTWALK'].clip(upper=walkThresh) + od_skims.reverse('DISTWALK').clip(upper=walkThresh))*60/walkSpeed,,,,,,,1,,,,,,,,,,,,,, +WALK - Time beyond 2 of a miles,@c_walktimelong * ((od_skims['DISTWALK'] - walkThresh).clip(lower=0) + (od_skims.reverse('DISTWALK') - walkThresh).clip(lower=0))*60/walkSpeed,,,,,,,1,,,,,,,,,,,,,, +WALK - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,1,,,,,,,,,,,,,, +WALK - Topology,@c_topology_walk * df.dest_topology,,,,,,,1,,,,,,,,,,,,,, +#Bike,,,,,,,,,,,,,,,,,,,,,, +#FIXME - skims aren't symmetrical,so we have to make sure they can get back,,,,,,,,,,,,,,,,,,,,, +BIKE - Unavailable if didn't bike to work,is_atwork_subtour & ~work_tour_is_bike,,,,,,,,-999,,,,,,,,,,,,, +BIKE - Time up to 6 miles,@c_biketimeshort * (od_skims['DISTBIKE'].clip(upper=bikeThresh) + od_skims.reverse('DISTBIKE').clip(upper=bikeThresh))*60/bikeSpeed,,,,,,,,1,,,,,,,,,,,,, +BIKE - Time beyond 6 of a miles,@c_biketimelong * ((od_skims['DISTBIKE']-bikeThresh).clip(lower=0) + (od_skims.reverse('DISTBIKE')-bikeThresh).clip(lower=0))*60/bikeSpeed,,,,,,,,1,,,,,,,,,,,,, +BIKE - Destination zone densityIndex,@c_density_index*df.density_index,,,,,,,,1,,,,,,,,,,,,, +BIKE - Topology,@c_topology_bike * df.dest_topology,,,,,,,,1,,,,,,,,,,,,, +#Walk to Local,,,,,,,,,,,,,,,,,,,,,, +WALK_LOC - Unavailable,walk_local_available == False,,,,,,,,,-999,,,,,,,,,,,, +WALK_LOC - In-vehicle time,@c_ivt * (odt_skims['WLK_LOC_WLK_TOTIVT']/100 + dot_skims['WLK_LOC_WLK_TOTIVT']/100),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_LOC_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_LOC_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_LOC_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_LOC_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - transfer wait time,@c_xwait * (odt_skims['WLK_LOC_WLK_XWAIT']/100 + dot_skims['WLK_LOC_WLK_XWAIT']/100),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_LOC_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_LOC_WLK_BOARDS']-1).clip(0)),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Walk egress time,@c_wegr * 2 * df.destination_walk_time,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Walk other time,@c_waux * (odt_skims['WLK_LOC_WLK_WAUX']/100 + dot_skims['WLK_LOC_WLK_WAUX']/100),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Fare,@df.c_cost * (odt_skims['WLK_LOC_WLK_FAR'] + dot_skims['WLK_LOC_WLK_FAR']),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,1,,,,,,,,,,,, +#Walk to Light rail/Ferry,,,,,,,,,,,,,,,,,,,,,, +WALK_LRF - Unavailable,walk_lrf_available == False,,,,,,,,,,-999,,,,,,,,,,, +WALK_LRF - In-vehicle time,@c_ivt * (odt_skims['WLK_LRF_WLK_TOTIVT']/100 + dot_skims['WLK_LRF_WLK_TOTIVT']/100),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - In-vehicle time on Light Rail (incremental w/ ivt),@(c_ivt_lrt-c_ivt) * (odt_skims['WLK_LRF_WLK_KEYIVT']/100 + dot_skims['WLK_LRF_WLK_KEYIVT']/100),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - In-vehicle time on Ferry (incremental w/keyivt),@(c_ivt_ferry-c_ivt_lrt) * (odt_skims['WLK_LRF_WLK_FERRYIVT']/100 + dot_skims['WLK_LRF_WLK_FERRYIVT']/100),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_LRF_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_LRF_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_LRF_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_LRF_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - transfer wait time,@c_xwait * (odt_skims['WLK_LRF_WLK_XWAIT']/100 + dot_skims['WLK_LRF_WLK_XWAIT']/100),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_LRF_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_LRF_WLK_BOARDS']-1).clip(0)),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Walk egress time,@c_wegr * 2 * df.destination_walk_time,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Walk other time,@c_waux * (odt_skims['WLK_LRF_WLK_WAUX']/100 + dot_skims['WLK_LRF_WLK_WAUX']/100),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Fare,@df.c_cost * (odt_skims['WLK_LRF_WLK_FAR'] + dot_skims['WLK_LRF_WLK_FAR']),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,1,,,,,,,,,,, +#Walk to Express bus,,,,,,,,,,,,,,,,,,,,,, +WALK_EXP - Unavailable,walk_express_available == False,,,,,,,,,,,-999,,,,,,,,,, +WALK_EXP - In-vehicle time,@c_ivt * (odt_skims['WLK_EXP_WLK_TOTIVT']/100 + dot_skims['WLK_EXP_WLK_TOTIVT']/100),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - In-vehicle time on Express bus (incremental w/ ivt),@(c_ivt_exp-c_ivt) * (odt_skims['WLK_EXP_WLK_KEYIVT']/100 + dot_skims['WLK_EXP_WLK_KEYIVT']/100),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_EXP_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_EXP_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_EXP_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_EXP_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - transfer wait time,@c_xwait * (odt_skims['WLK_EXP_WLK_XWAIT']/100 + dot_skims['WLK_EXP_WLK_XWAIT']/100),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_EXP_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_EXP_WLK_BOARDS']-1).clip(0)),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Walk egress time,@c_wegr * 2 * df.destination_walk_time,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Walk other time,@c_waux * (odt_skims['WLK_EXP_WLK_WAUX']/100 + dot_skims['WLK_EXP_WLK_WAUX']/100),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Fare,@df.c_cost * (odt_skims['WLK_EXP_WLK_FAR'] + dot_skims['WLK_EXP_WLK_FAR']),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,,1,,,,,,,,,, +#Walk to Heavy Rail,,,,,,,,,,,,,,,,,,,,,, +WALK_HVY - Unavailable,walk_heavyrail_available == False,,,,,,,,,,,,-999,,,,,,,,, +WALK_HVY - In-vehicle time,@c_ivt * (odt_skims['WLK_HVY_WLK_TOTIVT']/100 + dot_skims['WLK_HVY_WLK_TOTIVT']/100),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - In-vehicle time on heavy rail (incremental w/ ivt),@(c_ivt_hvy-c_ivt) * (odt_skims['WLK_HVY_WLK_KEYIVT']/100 + dot_skims['WLK_HVY_WLK_KEYIVT']/100),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_HVY_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_HVY_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_HVY_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_HVY_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - transfer wait time,@c_xwait * (odt_skims['WLK_HVY_WLK_XWAIT']/100 + dot_skims['WLK_HVY_WLK_XWAIT']/100),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_HVY_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_HVY_WLK_BOARDS']-1).clip(0)),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Walk egress time,@c_wegr * 2 *df.destination_walk_time,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Walk other time,@c_waux * (odt_skims['WLK_HVY_WLK_WAUX']/100 + dot_skims['WLK_HVY_WLK_WAUX']/100),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Fare,@df.c_cost * (odt_skims['WLK_HVY_WLK_FAR'] + dot_skims['WLK_HVY_WLK_FAR']),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,,,1,,,,,,,,, +#Walk to Commuter rail,,,,,,,,,,,,,,,,,,,,,, +WALK_COM - Unavailable,walk_commuter_available == False,,,,,,,,,,,,,-999,,,,,,,, +WALK_COM - In-vehicle time,@c_ivt * (odt_skims['WLK_COM_WLK_TOTIVT']/100 + dot_skims['WLK_COM_WLK_TOTIVT']/100),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - In-vehicle time on commuter rail (incremental w/ ivt),@(c_ivt_com-c_ivt) * (odt_skims['WLK_COM_WLK_KEYIVT']/100 + dot_skims['WLK_COM_WLK_KEYIVT']/100),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Short iwait time,@c_short_i_wait * ((odt_skims['WLK_COM_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_COM_WLK_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Long iwait time,@c_long_i_wait * ((odt_skims['WLK_COM_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_COM_WLK_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - transfer wait time,@c_xwait * (odt_skims['WLK_COM_WLK_XWAIT']/100 + dot_skims['WLK_COM_WLK_XWAIT']/100),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - number of transfers,@c_xfers_wlk * ((odt_skims['WLK_COM_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_COM_WLK_BOARDS']-1).clip(0)),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Walk access time,@c_wacc * 2 * df.origin_walk_time,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Walk egress time,@c_wegr * 2 * df.destination_walk_time,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Walk other time,@c_waux * (odt_skims['WLK_COM_WLK_WAUX']/100 + dot_skims['WLK_COM_WLK_WAUX']/100),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Fare,@df.c_cost * (odt_skims['WLK_COM_WLK_FAR'] + dot_skims['WLK_COM_WLK_FAR']),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,1,,,,,,,, +#Drive to Local,,,,,,,,,,,,,,,,,,,,,, +DRIVE_LOC - Unavailable,drive_local_available == False,,,,,,,,,,,,,,-999,,,,,,, +DRIVE_LOC - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,-999,,,,,,, +DRIVE_LOC - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,-999,,,,,,, +DRIVE_LOC - In-vehicle time,@c_ivt * (odt_skims['DRV_LOC_WLK_TOTIVT']/100 + dot_skims['WLK_LOC_DRV_TOTIVT']/100),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_LOC_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_LOC_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_LOC_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_LOC_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - transfer wait time,@c_xwait * (odt_skims['DRV_LOC_WLK_XWAIT']/100 + dot_skims['WLK_LOC_DRV_XWAIT']/100),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - number of transfers,@c_xfers_wlk * ((odt_skims['DRV_LOC_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_LOC_DRV_BOARDS']-1).clip(0)),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Drive time,@c_dtim * (odt_skims['DRV_LOC_WLK_DTIM']/100 + dot_skims['WLK_LOC_DRV_DTIM']/100),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Walk access time,@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Walk egress time (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Walk other time,@c_waux * (odt_skims['DRV_LOC_WLK_WAUX']/100 + dot_skims['WLK_LOC_DRV_WAUX']/100),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_LOC_WLK_FAR'] + dot_skims['WLK_LOC_DRV_FAR']) + ((odt_skims['DRV_LOC_WLK_DDIST']/100+dot_skims['WLK_LOC_DRV_DDIST']/100) * costPerMile)),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Ratio of drive access distance to OD distance,@c_dacc_ratio * ((odt_skims['DRV_LOC_WLK_DDIST']/100+ dot_skims['WLK_LOC_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,1,,,,,,, +#Drive to Light Rail/Ferry,,,,,,,,,,,,,,,,,,,,,, +DRIVE_LRF - Unavailable,drive_lrf_available == False,,,,,,,,,,,,,,,-999,,,,,, +DRIVE_LRF - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,-999,,,,,, +DRIVE_LRF - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,-999,,,,,, +DRIVE_LRF - In-vehicle time,@c_ivt * (odt_skims['DRV_LRF_WLK_TOTIVT']/100 + dot_skims['WLK_LRF_DRV_TOTIVT']/100),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - In-vehicle time on Light Rail (incremental w/ ivt),@(c_ivt_lrt-c_ivt)*(odt_skims['DRV_LRF_WLK_KEYIVT']/100 + dot_skims['WLK_LRF_DRV_KEYIVT']/100),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - In-vehicle time on Ferry (incremental w/ keyivt),@(c_ivt_ferry-c_ivt_lrt)*(odt_skims['DRV_LRF_WLK_FERRYIVT']/100 + dot_skims['WLK_LRF_DRV_FERRYIVT']/100),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_LRF_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_LRF_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_LRF_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_LRF_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - transfer wait time,@c_xwait * (odt_skims['DRV_LRF_WLK_XWAIT']/100 + dot_skims['WLK_LRF_DRV_XWAIT']/100),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - number of transfers,@c_xfers_drv * (odt_skims['DRV_LRF_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Drive time,@c_dtim * (odt_skims['DRV_LRF_WLK_DTIM']/100 + dot_skims['WLK_LRF_DRV_DTIM']/100),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Walk access time (at attraction end),@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Walk egress time (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Walk other time,@c_waux * (odt_skims['DRV_LRF_WLK_WAUX']/100 + dot_skims['WLK_LRF_DRV_WAUX']/100),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_LRF_WLK_FAR']+dot_skims['WLK_LRF_DRV_FAR']) + ((odt_skims['DRV_LRF_WLK_DDIST']/100+dot_skims['WLK_LRF_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Ratio of drive access distance to OD distance,@c_dacc_ratio * ((odt_skims['DRV_LRF_WLK_DDIST']/100+ dot_skims['WLK_LRF_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,1,,,,,, +#Drive to Express bus,,,,,,,,,,,,,,,,,,,,,, +DRIVE_EXP - Unavailable,drive_express_available == False,,,,,,,,,,,,,,,,-999,,,,, +DRIVE_EXP - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,-999,,,,, +DRIVE_EXP - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,-999,,,,, +DRIVE_EXP - In-vehicle time,@c_ivt * (odt_skims['DRV_EXP_WLK_TOTIVT']/100 + dot_skims['WLK_EXP_DRV_TOTIVT']/100),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - In-vehicle time on Express bus (incremental w/ ivt),@(c_ivt_exp-c_ivt) * (odt_skims['DRV_EXP_WLK_KEYIVT']/100 + dot_skims['WLK_EXP_DRV_KEYIVT']/100),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_EXP_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_EXP_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_EXP_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_EXP_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - transfer wait time,@c_xwait * (odt_skims['DRV_EXP_WLK_XWAIT']/100 + dot_skims['WLK_EXP_DRV_XWAIT']/100),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - number of transfers,@c_xfers_drv * ((odt_skims['DRV_EXP_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_EXP_DRV_BOARDS']-1).clip(0)),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Drive time,@c_dtim * (odt_skims['DRV_EXP_WLK_DTIM']/100 + dot_skims['WLK_EXP_DRV_DTIM']/100),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Walk access time (at attraction end),@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Walk egress ime (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Walk other time,@c_waux * (odt_skims['DRV_EXP_WLK_WAUX']/100 + dot_skims['WLK_EXP_DRV_WAUX']/100),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_EXP_WLK_FAR']+dot_skims['WLK_EXP_DRV_FAR']) + ((odt_skims['DRV_EXP_WLK_DDIST']/100+dot_skims['WLK_EXP_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Ratio of drive access distance to OD distance,@c_dacc_ratio * ((odt_skims['DRV_EXP_WLK_DDIST']/100+ dot_skims['WLK_EXP_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,1,,,,, +#Drive to Heavy Rail,,,,,,,,,,,,,,,,,,,,,, +DRIVE_HVY - Unavailable,drive_heavyrail_available == False,,,,,,,,,,,,,,,,,-999,,,, +DRIVE_HVY - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,,-999,,,, +DRIVE_HVY - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,,-999,,,, +DRIVE_HVY - In-vehicle time,@c_ivt * (odt_skims['DRV_HVY_WLK_TOTIVT']/100 + dot_skims['WLK_HVY_DRV_TOTIVT']/100),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - In-vehicle time on heavy rail (incremental w/ ivt),@(c_ivt_hvy-c_ivt) * (odt_skims['DRV_HVY_WLK_KEYIVT']/100 + dot_skims['WLK_HVY_DRV_KEYIVT']/100),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_HVY_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_HVY_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_HVY_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_HVY_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - transfer wait time,@c_xwait * (odt_skims['DRV_HVY_WLK_XWAIT']/100 + dot_skims['WLK_HVY_DRV_XWAIT']/100),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - number of transfers,@c_xfers_drv * ((odt_skims['DRV_HVY_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_HVY_DRV_BOARDS']-1).clip(0)),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Drive time,@c_dtim * (odt_skims['DRV_HVY_WLK_DTIM']/100 + dot_skims['WLK_HVY_DRV_DTIM']/100),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Walk access time (at attraction end),@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Walk egress time (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Walk other time,@c_waux * (odt_skims['DRV_HVY_WLK_WAUX']/100 + dot_skims['WLK_HVY_DRV_WAUX']/100),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_HVY_WLK_FAR']+dot_skims['WLK_HVY_DRV_FAR']) + ((odt_skims['DRV_HVY_WLK_DDIST']/100+dot_skims['WLK_HVY_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Ratio of drive access distance to OD distance,@c_dacc_ratio * (odt_skims['DRV_HVY_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,,1,,,, +#Drive to Commuter Rail,,,,,,,,,,,,,,,,,,,,,, +DRIVE_COM - Unavailable,drive_commuter_available == False,,,,,,,,,,,,,,,,,,-999,,, +DRIVE_COM - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,,,-999,,, +DRIVE_COM - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,,,-999,,, +DRIVE_COM - In-vehicle time,@c_ivt * (odt_skims['DRV_COM_WLK_TOTIVT']/100 + dot_skims['WLK_COM_DRV_TOTIVT']/100),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - In-vehicle time on commuter rail (incremental w/ ivt),@(c_ivt_com-c_ivt) * (odt_skims['DRV_COM_WLK_KEYIVT']/100 + dot_skims['WLK_COM_DRV_KEYIVT']/100),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Short iwait time,@c_short_i_wait * ((odt_skims['DRV_COM_WLK_IWAIT']/100).clip(upper=waitThresh) + (dot_skims['WLK_COM_DRV_IWAIT']/100).clip(upper=waitThresh)),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Long iwait time,@c_long_i_wait * ((odt_skims['DRV_COM_WLK_IWAIT']/100-waitThresh).clip(0) + (dot_skims['WLK_COM_DRV_IWAIT']/100-waitThresh).clip(0)),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - transfer wait time,@c_xwait * (odt_skims['DRV_COM_WLK_XWAIT']/100 + dot_skims['WLK_COM_DRV_XWAIT']/100),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - number of transfers,@c_xfers_drv * ((odt_skims['DRV_COM_WLK_BOARDS']-1).clip(0) + (dot_skims['WLK_COM_DRV_BOARDS']-1).clip(0)),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Drive time,@c_dtim * (odt_skims['DRV_COM_WLK_DTIM']/100 + dot_skims['WLK_COM_DRV_DTIM']/100),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Walk access time (at attraction end),@c_wacc * df.destination_walk_time,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Walk egress time (at attraction end),@c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Walk other time,@c_waux * (odt_skims['DRV_COM_WLK_WAUX']/100 + dot_skims['WLK_COM_DRV_WAUX']/100),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Fare and operating cost,@df.c_cost * ((odt_skims['DRV_COM_WLK_FAR']+dot_skims['WLK_COM_DRV_FAR']) + ((odt_skims['DRV_COM_WLK_DDIST']/100+dot_skims['WLK_COM_DRV_DDIST']/100) *costPerMile)),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Ratio of drive access distance to OD distance,@c_dacc_ratio * ((odt_skims['DRV_COM_WLK_DDIST']/100 + dot_skims['WLK_COM_DRV_DDIST']/100)/ (od_skims['DIST']*2)),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Destination zone densityIndex,@c_density_index * df.dest_density_index,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Topology,@c_topology_trn * df.dest_topology,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,,,1,,, +#Taxi,,,,,,,,,,,,,,,,,,,,,, +Taxi - In-vehicle time,@c_ivt * (odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2TOLL_TIME']),,,,,,,,,,,,,,,,,,,1,, +Taxi - Wait time,@c_ivt * 1.5 * df.totalWaitTaxi,,,,,,,,,,,,,,,,,,,1,, +Taxi - Tolls,@df.c_cost * (odt_skims['HOV2TOLL_VTOLL'] + dot_skims['HOV2TOLL_VTOLL']),,,,,,,,,,,,,,,,,,,1,, +Taxi - Bridge toll,@df.c_cost * (odt_skims['HOV2TOLL_BTOLL'] + dot_skims['HOV2TOLL_BTOLL']),,,,,,,,,,,,,,,,,,,1,, +Taxi - Fare,@df.c_cost * (Taxi_baseFare * 2 + (odt_skims['HOV2TOLL_DIST'] + dot_skims['HOV2TOLL_DIST']) * Taxi_costPerMile +(odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2TOLL_TIME']) * Taxi_costPerMinute)*100,,,,,,,,,,,,,,,,,,,1,, +#TNC Single,,,,,,,,,,,,,,,,,,,,,, +TNC Single - In-vehicle time,@c_ivt * (odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2TOLL_TIME']),,,,,,,,,,,,,,,,,,,,1, +TNC Single - Wait time,@c_ivt * 1.5 * df.totalWaitSingleTNC,,,,,,,,,,,,,,,,,,,,1, +TNC Single - Tolls,@df.c_cost * (odt_skims['HOV2TOLL_VTOLL'] + dot_skims['HOV2TOLL_VTOLL']),,,,,,,,,,,,,,,,,,,,1, +TNC Single - Bridge toll,@df.c_cost * (odt_skims['HOV2TOLL_BTOLL'] + dot_skims['HOV2TOLL_BTOLL']),,,,,,,,,,,,,,,,,,,,1, +TNC Single - Cost,"@df.c_cost * np.maximum(TNC_single_baseFare * 2 + (odt_skims['HOV2TOLL_DIST'] + dot_skims['HOV2TOLL_DIST']) * TNC_single_costPerMile + (odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2TOLL_TIME']) * TNC_single_costPerMinute, TNC_single_costMinimum) * 100",,,,,,,,,,,,,,,,,,,,1, +#TNC Shared,,,,,,,,,,,,,,,,,,,,,, +TNC Shared - In-vehicle time,@c_ivt * (odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2TOLL_TIME']) * TNC_shared_IVTFactor,,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Wait time,@c_ivt * 1.5 * df.totalWaitSharedTNC,,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Tolls,@df.c_cost * (odt_skims['HOV2TOLL_VTOLL'] + dot_skims['HOV2TOLL_VTOLL']),,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Bridge toll,@df.c_cost * (odt_skims['HOV2TOLL_BTOLL'] + dot_skims['HOV2TOLL_BTOLL']),,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Cost,"@df.c_cost * np.maximum(TNC_shared_baseFare * 2 + (odt_skims['HOV2TOLL_DIST'] + dot_skims['HOV2TOLL_DIST']) * TNC_shared_costPerMile + (odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2TOLL_TIME']) * TNC_shared_costPerMinute, TNC_shared_costMinimum) * 100",,,,,,,,,,,,,,,,,,,,,1 +#indiv tour ASCs,,,,,,,,,,,,,,,,,,,,,, +Walk ASC - Zero auto,@walk_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,1,,,,,,,,,,,,,, +Walk ASC - Auto deficient,@walk_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,1,,,,,,,,,,,,,, +Walk ASC - Auto sufficient,@walk_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,1,,,,,,,,,,,,,, +Bike ASC - Zero auto,@bike_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,1,,,,,,,,,,,,, +Bike ASC - Auto deficient,@bike_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,1,,,,,,,,,,,,, +Bike ASC - Auto sufficient,@bike_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,1,,,,,,,,,,,,, +Shared ride 2 ASC - Zero auto,@sr2_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,1,1,,,,,,,,,,,,,,,,, +Shared ride 2 ASC - Auto deficient,@sr2_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,1,1,,,,,,,,,,,,,,,,, +Shared ride 2 ASC - Auto sufficient,@sr2_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,1,1,,,,,,,,,,,,,,,,, +Shared ride 3+ - Zero auto,@sr3p_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,1,1,,,,,,,,,,,,,,, +Shared ride 3+ - Auto deficient,@sr3p_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,1,1,,,,,,,,,,,,,,, +Shared ride 3+ - Auto sufficient,@sr3p_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,1,1,,,,,,,,,,,,,,, +Walk to Transit - Zero auto,@walk_transit_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,,1,1,1,1,1,,,,,,,, +Walk to Transit - Auto deficient,@walk_transit_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,1,1,1,1,1,,,,,,,, +Walk to Transit - Auto sufficient,@walk_transit_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,,1,1,1,1,1,,,,,,,, +Drive to Transit - Zero auto,@drive_transit_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,,,,,,,1,1,1,1,1,,, +Drive to Transit - Auto deficient,@drive_transit_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,1,1,1,1,1,,, +Drive to Transit - Auto sufficient,@drive_transit_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,1,1,1,1,1,,, +Taxi - Zero auto,@taxi_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,,,,,,,,,,,,1,, +Taxi - Auto deficient,@taxi_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,,,,,,1,, +Taxi - Auto sufficient,@taxi_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,,,,,,1,, +TNC Single - Zero auto,@tnc_single_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,,,,,,,,,,,,,1, +TNC Single - Auto deficient,@tnc_single_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,,,,,,,1, +TNC Single - Auto sufficient,@tnc_single_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,,,,,,,1, +TNC Shared - Zero auto,@tnc_shared_ASC_no_auto * (df.is_indiv & (df.auto_ownership == 0)),,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Auto deficient,@tnc_shared_ASC_auto_deficient * (df.is_indiv & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Auto sufficient,@tnc_shared_ASC_auto_sufficient * (df.is_indiv & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,,,,,,,,1 +#joint tour ASCs,,,,,,,,,,,,,,,,,,,,,, +Joint - Walk ASC - Zero auto,@joint_walk_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,1,,,,,,,,,,,,,, +Joint - Walk ASC - Auto deficient,@joint_walk_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,1,,,,,,,,,,,,,, +Joint - Walk ASC - Auto sufficient,@joint_walk_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,1,,,,,,,,,,,,,, +Joint - Bike ASC - Zero auto,@joint_bike_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,1,,,,,,,,,,,,, +Joint - Bike ASC - Auto deficient,@joint_bike_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,1,,,,,,,,,,,,, +Joint - Bike ASC - Auto sufficient,@joint_bike_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,1,,,,,,,,,,,,, +Joint - Shared ride 2 ASC - Zero auto,@joint_sr2_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,1,1,,,,,,,,,,,,,,,,, +Joint - Shared ride 2 ASC - Auto deficient,@joint_sr2_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,1,1,,,,,,,,,,,,,,,,, +Joint - Shared ride 2 ASC - Auto sufficient,@joint_sr2_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,1,1,,,,,,,,,,,,,,,,, +Joint - Shared ride 3+ - Zero auto,@joint_sr3p_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,1,1,,,,,,,,,,,,,,, +Joint - Shared ride 3+ - Auto deficient,@joint_sr3p_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,1,1,,,,,,,,,,,,,,, +Joint - Shared ride 3+ - Auto sufficient,@joint_sr3p_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,1,1,,,,,,,,,,,,,,, +Joint - Walk to Transit - Zero auto,@joint_walk_transit_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,,1,1,1,1,1,,,,,,,, +Joint - Walk to Transit - Auto deficient,@joint_walk_transit_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,1,1,1,1,1,,,,,,,, +Joint - Walk to Transit - Auto sufficient,@joint_walk_transit_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,,1,1,1,1,1,,,,,,,, +Joint - Drive to Transit - Zero auto,@joint_drive_transit_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,,,,,,,1,1,1,1,1,,, +Joint - Drive to Transit - Auto deficient,@joint_drive_transit_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,1,1,1,1,1,,, +Joint - Drive to Transit - Auto sufficient,@joint_drive_transit_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,1,1,1,1,1,,, +Joint - Taxi - Zero auto,@joint_taxi_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,,,,,,,,,,,,1,, +Joint - Taxi - Auto deficient,@joint_taxi_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,,,,,,1,, +Joint - Taxi - Auto sufficient,@joint_taxi_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,,,,,,1,, +Joint - TNC Single - Zero auto,@joint_tnc_single_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,,,,,,,,,,,,,1, +Joint - TNC Single - Auto deficient,@joint_tnc_single_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,,,,,,,1, +Joint - TNC Single - Auto sufficient,@joint_tnc_single_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,,,,,,,1, +Joint - TNC Shared - Zero auto,@joint_tnc_shared_ASC_no_auto * (df.is_joint & (df.auto_ownership == 0)),,,,,,,,,,,,,,,,,,,,,1 +Joint - TNC Shared - Auto deficient,@joint_tnc_shared_ASC_auto_deficient * (df.is_joint & (df.auto_ownership < df.num_workers) & (df.auto_ownership > 0)),,,,,,,,,,,,,,,,,,,,,1 +Joint - TNC Shared - Auto sufficient,@joint_tnc_shared_ASC_auto_sufficient * (df.is_joint & (df.auto_ownership >= df.num_workers)),,,,,,,,,,,,,,,,,,,,,1 +Local bus ASC,@local_bus_ASC,,,,,,,,,1,,,,,1,,,,,,, +Walk to Light Rail ASC,@walk_light_rail_ASC * (df.walk_ferry_available == False),,,,,,,,,,1,,,,,,,,,,, +Drive to Light Rail ASC,@drive_light_rail_ASC * (df.drive_ferry_available == False),,,,,,,,,,,,,,,1,,,,,, +Walk to Ferry ASC,@walk_ferry_ASC * df.walk_ferry_available,,,,,,,,,,1,,,,,,,,,,, +Drive to Ferry ASC,@drive_ferry_ASC * df.drive_ferry_available,,,,,,,,,,,,,,,1,,,,,, +Express Bus ASC,@express_bus_ASC,,,,,,,,,,,1,,,,,1,,,,, +Heavy Rail ASC,@heavy_rail_ASC,,,,,,,,,,,,1,,,,,1,,,, +Commuter Rail,@commuter_rail_ASC,,,,,,,,,,,,,1,,,,,1,,, +Walk to Transit dest CBD,@walk_transit_CBD_ASC * df.destination_in_cbd,,,,,,,,,1,1,1,1,1,,,,,,,, +Drive to Transit dest CBD,@drive_transit_CBD_ASC * df.destination_in_cbd,,,,,,,,,,,,,,1,1,1,1,1,,, +Drive to Transit - distance penalty,@(c_drvtrn_distpen_0*(1-od_skims['DIST']/c_drvtrn_distpen_max)).clip(upper=0),,,,,,,,,,,,,,1,1,1,1,1,,, +# FIXME - skims aren't symmetrical,so we have to make sure they can get back,,,,,,,,,,,,,,,,,,,,, +Walk not available for long distances,@od_skims.max('DISTWALK') > 3,,,,,,,-999,,,,,,,,,,,,,, +Bike not available for long distances,@od_skims.max('DISTBIKE') > 8,,,,,,,,-999,,,,,,,,,,,,, +Drive alone not available for escort tours,is_escort,-999,-999,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/example/configs/tour_mode_choice.yaml b/example/configs/tour_mode_choice.yaml index 8fb41b5f2..2eb8a05a1 100644 --- a/example/configs/tour_mode_choice.yaml +++ b/example/configs/tour_mode_choice.yaml @@ -47,6 +47,12 @@ NESTS: - DRIVE_EXP - DRIVE_HVY - DRIVE_COM + - name: MAAS + coefficient: 0.72 + alternatives: + - TAXI + - TNC_SINGLE + - TNC_SHARED SPEC: tour_mode_choice.csv COEFFS: tour_mode_choice_coeffs.csv @@ -69,7 +75,55 @@ CONSTANTS: upperAM: 10 upperMD: 15 upperPM: 19 - + # MAAS Settings + Taxi_baseFare: 2.20 + Taxi_costPerMile: 2.30 + Taxi_costPerMinute: 0.10 + Taxi_waitTime_mean: + 1: 26.5 + 2: 17.3 + 3: 13.3 + 4: 9.5 + 5: 5.5 + Taxi_waitTime_sd: + 1: 6.4 + 2: 6.4 + 3: 6.4 + 4: 6.4 + 5: 6.4 + TNC_single_baseFare: 2.20 + TNC_single_costPerMile: 1.33 + TNC_single_costPerMinute: 0.24 + TNC_single_costMinimum: 7.20 + TNC_single_waitTime_mean: + 1: 10.3 + 2: 8.5 + 3: 8.4 + 4: 6.3 + 5: 4.7 + TNC_single_waitTime_sd: + 1: 4.1 + 2: 4.1 + 3: 4.1 + 4: 4.1 + 5: 4.1 + TNC_shared_baseFare: 2.20 + TNC_shared_costPerMile: 0.53 + TNC_shared_costPerMinute: 0.10 + TNC_shared_costMinimum: 3.00 + TNC_shared_IVTFactor: 1.5 + TNC_shared_waitTime_mean: + 1: 15.0 + 2: 15.0 + 3: 11.0 + 4: 8.0 + 5: 7.0 + TNC_shared_waitTime_sd: + 1: 4.1 + 2: 4.1 + 3: 4.1 + 4: 4.1 + 5: 4.1 # so far, we can use the same spec as for non-joint tours preprocessor: @@ -85,6 +139,7 @@ nontour_preprocessor: TABLES: - land_use +# to reduce memory needs filter chooser table to these fields LOGSUM_CHOOSER_COLUMNS: - tour_type - hhsize diff --git a/example/configs/tour_mode_choice_annotate_choosers_preprocessor.csv b/example/configs/tour_mode_choice_annotate_choosers_preprocessor.csv index 0c8a1d9f5..4c9939ecf 100644 --- a/example/configs/tour_mode_choice_annotate_choosers_preprocessor.csv +++ b/example/configs/tour_mode_choice_annotate_choosers_preprocessor.csv @@ -28,6 +28,38 @@ local,_DF_IS_TOUR,'tour_type' in df.columns ,drive_transit_available,_walk_transit_destination & (df.auto_ownership > 0) ,origin_walk_time,shortWalk*60/walkSpeed ,destination_walk_time,shortWalk*60/walkSpeed +# MAAS,, +,origin_density_measure,"(reindex(land_use.TOTPOP, df[orig_col_name]) + reindex(land_use.TOTEMP, df[orig_col_name])) / (reindex(land_use.TOTACRE, df[orig_col_name]) / 640)" +,dest_density_measure,"(reindex(land_use.TOTPOP, df[dest_col_name]) + reindex(land_use.TOTEMP, df[dest_col_name])) / (reindex(land_use.TOTACRE, df[dest_col_name]) / 640)" +,origin_density,"pd.cut(origin_density_measure, bins=[-np.inf, 500, 2000, 5000, 15000, np.inf], labels=[1, 2, 3, 4, 5]).astype(int)" +,dest_density,"pd.cut(dest_density_measure, bins=[-np.inf, 500, 2000, 5000, 15000, np.inf], labels=[1, 2, 3, 4, 5]).astype(int)" +,origin_zone_taxi_wait_time_mean,"origin_density.map({k: v for k, v in Taxi_waitTime_mean.items()})" +,origin_zone_taxi_wait_time_sd,"origin_density.map({k: v for k, v in Taxi_waitTime_sd.items()})" +,dest_zone_taxi_wait_time_mean,"dest_density.map({k: v for k, v in Taxi_waitTime_mean.items()})" +,dest_zone_taxi_wait_time_sd,"dest_density.map({k: v for k, v in Taxi_waitTime_sd.items()})" +#,origTaxiWaitTime,"rng.lognormal_for_df(df, mu=origin_zone_taxi_wait_time_mean, sigma=origin_zone_taxi_wait_time_sd)" +,origTaxiWaitTime,5 +#,destTaxiWaitTime,"rng.lognormal_for_df(df, mu=dest_zone_taxi_wait_time_mean, sigma=dest_zone_taxi_wait_time_sd)" +,destTaxiWaitTime,5 +,origin_zone_singleTNC_wait_time_mean,"origin_density.map({k: v for k, v in TNC_single_waitTime_mean.items()})" +,origin_zone_singleTNC_wait_time_sd,"origin_density.map({k: v for k, v in TNC_single_waitTime_sd.items()})" +,dest_zone_singleTNC_wait_time_mean,"dest_density.map({k: v for k, v in TNC_single_waitTime_mean.items()})" +,dest_zone_singleTNC_wait_time_sd,"dest_density.map({k: v for k, v in TNC_single_waitTime_sd.items()})" +#,origSingleTNCWaitTime,"rng.lognormal_for_df(df, mu=origin_zone_singleTNC_wait_time_mean, sigma=origin_zone_singleTNC_wait_time_sd)" +,origSingleTNCWaitTime,5 +#,destSingleTNCWaitTime,"rng.lognormal_for_df(df, mu=dest_zone_singleTNC_wait_time_mean, sigma=dest_zone_singleTNC_wait_time_sd)" +,destSingleTNCWaitTime,5 +,origin_zone_sharedTNC_wait_time_mean,"origin_density.map({k: v for k, v in TNC_shared_waitTime_mean.items()})" +,origin_zone_sharedTNC_wait_time_sd,"origin_density.map({k: v for k, v in TNC_shared_waitTime_sd.items()})" +,dest_zone_sharedTNC_wait_time_mean,"dest_density.map({k: v for k, v in TNC_shared_waitTime_mean.items()})" +,dest_zone_sharedTNC_wait_time_sd,"dest_density.map({k: v for k, v in TNC_shared_waitTime_sd.items()})" +#,origSharedTNCWaitTime,"rng.lognormal_for_df(df, mu=origin_zone_sharedTNC_wait_time_mean, sigma=origin_zone_sharedTNC_wait_time_sd)" +,origSharedTNCWaitTime,5 +#,destSharedTNCWaitTime,"rng.lognormal_for_df(df, mu=dest_zone_sharedTNC_wait_time_mean, sigma=dest_zone_sharedTNC_wait_time_sd)" +,destSharedTNCWaitTime,5 +,totalWaitTaxi,origTaxiWaitTime + destTaxiWaitTime +,totalWaitSingleTNC,origSingleTNCWaitTime + destSingleTNCWaitTime +,totalWaitSharedTNC,origSharedTNCWaitTime + destSharedTNCWaitTime #,, ,_free_parking_available,(df.tour_type == 'work') & df.free_parking_at_work if _DF_IS_TOUR else False ,_dest_hourly_peak_parking_cost,"reindex(land_use.PRKCST, df[dest_col_name])" diff --git a/example/configs/tour_mode_choice_coeffs.csv b/example/configs/tour_mode_choice_coeffs.csv index 3e12e41db..095b7fc84 100644 --- a/example/configs/tour_mode_choice_coeffs.csv +++ b/example/configs/tour_mode_choice_coeffs.csv @@ -34,41 +34,59 @@ c_hhsize1_sr,0,0,0,0,0,0,0,0,54.82 * c_ivt,0 c_hhsize2_sr,0,0,0,0,28.38839286 * c_ivt,0,0,28.38839286 * c_ivt,0,0 #indiv tour ASCs,,,,,,,,,, walk_ASC_no_auto,5.125117111,2.801206737,3.266594735,1.28729901,18.41455742,2.376877423,1.868091482,6.408966934,5.767215561,6.669212684 -walk_ASC_auto_decicient,3.274605133,-0.902046556,2.249407533,1.369040422,3.257362412,2.270173198,2.870183935,4.505909886,2.401041643,0.925460911 +walk_ASC_auto_deficient,3.274605133,-0.902046556,2.249407533,1.369040422,3.257362412,2.270173198,2.870183935,4.505909886,2.401041643,0.925460911 walk_ASC_auto_sufficient,1.551690381,-0.811606606,1.263347649,0.799963401,0.647685583,0.731266314,1.707218614,1.060766418,0.053265336,0.677215999 bike_ASC_no_auto,0.868070976,-0.716211996,-0.376423218,1.539433341,12.09873445,0.834155474,0.020583211,4.29451543,3.194008732,-0.907258478 -bike_ASC_auto_decicient,-1.569110587,-4.527927892,-0.092468342,-1.518464864,-0.528067855,-0.875844687,0.634521411,-0.66923499,0.253189685,-0.807408302 +bike_ASC_auto_deficient,-1.569110587,-4.527927892,-0.092468342,-1.518464864,-0.528067855,-0.875844687,0.634521411,-0.66923499,0.253189685,-0.807408302 bike_ASC_auto_sufficient,-1.200347041,-5.063108669,-1.071459675,-2.808302294,-2.113468744,-2.566210272,-1.368070919,-1.939783244,-1.580023134,15.72017028 sr2_ASC_no_auto,0,0,0,0,0,0,0,0,0,0 -sr2_ASC_auto_decicient,0.588234462,0,0.660151286,0.262152713,0.124743645,0.244097554,1.855852789,-1.692234683,-0.338031245,-2.110242203 +sr2_ASC_auto_deficient,0.588234462,0,0.660151286,0.262152713,0.124743645,0.244097554,1.855852789,-1.692234683,-0.338031245,-2.110242203 sr2_ASC_auto_sufficient,0.862805535,0,0.496846169,0.25817882,-1.606265705,0.197707068,0.523602468,-1.859427005,-1.085745845,-1.445061795 sr3p_ASC_no_auto,0.321999775,-1.81292667,0.272169027,-0.803185378,-6.024082818,-0.279789475,-1.403690228,-6.05600139,-0.583126911,0.582662586 -sr3p_ASC_auto_decicient,0.046052359,-0.408187662,1.047096588,-1.349392509,0.714957094,-0.073370165,1.50072437,-1.727742177,-0.852704253,-2.514658092 +sr3p_ASC_auto_deficient,0.046052359,-0.408187662,1.047096588,-1.349392509,0.714957094,-0.073370165,1.50072437,-1.727742177,-0.852704253,-2.514658092 sr3p_ASC_auto_sufficient,0.846859553,-0.057412532,0.588502059,-0.075498672,-1.020193438,-0.077571296,0.506178835,-1.904709832,-1.469970203,-1.652174009 walk_transit_ASC_no_auto,2.593636732,-2.217208252,2.243778563,2.564345654,21.38374939,2.106747676,1.381465034,8.786037716,5.035416445,2.704187734 -walk_transit_ASC_auto_decicient,-0.038963238,-4.960703718,0.953088412,-3.059725678,4.120707976,-0.847656898,0.974444892,3.136255604,0.653028572,-2.998829183 +walk_transit_ASC_auto_deficient,-0.038963238,-4.960703718,0.953088412,-3.059725678,4.120707976,-0.847656898,0.974444892,3.136255604,0.653028572,-2.998829183 walk_transit_ASC_auto_sufficient,-1.112690543,-4.934847012,-0.80636791,-1.547117283,0.745908748,-2.203679837,-0.345375907,0.473116311,-0.89165065,-3.401027004 drive_transit_ASC_no_auto,0,0,0,0,0,0,0,0,0,0 -drive_transit_ASC_auto_decicient,0.599806096,-1.153706724,0.319930804,-0.299432268,5.325265625,-0.418491771,1.56271942,1.850117609,0.100815665,-998.8195926 +drive_transit_ASC_auto_deficient,0.599806096,-1.153706724,0.319930804,-0.299432268,5.325265625,-0.418491771,1.56271942,1.850117609,0.100815665,-998.8195926 drive_transit_ASC_auto_sufficient,-0.969515832,-4.60142462,-0.378591674,-2.624947672,1.401350042,-2.171893862,-0.615855782,1.358775285,-1.004545986,-999.2146659 +taxi_ASC_no_auto,0.5415,0.4206,0.5415,0.4206,-7.0000,0.4206,0.5415,-7.0000,3.3083,3.5519 +taxi_ASC_auto_deficient,-3.2876,-0.5186,-3.2876,-0.5186,-0.3338,-0.5186,-3.2876,4.2519,-1.1105,-4.7658 +taxi_ASC_auto_sufficient,-2.2887,-2.3106,-2.2887,-2.3106,-2.4294,-2.3106,-2.2887,0.0537,-4.5089,-3.6275 +tnc_single_ASC_no_auto,0.1592,-0.0732,0.1592,-0.0732,-7.0000,-0.0732,0.1592,-0.9993,2.6502,3.1470 +tnc_single_ASC_auto_deficient,-3.6369,-0.9682,-3.6369,-0.9682,-0.6524,-0.9682,-3.6369,0.3464,-1.6322,-5.0431 +tnc_single_ASC_auto_sufficient,-2.8104,-2.8115,-2.8104,-2.8115,-2.8375,-2.8115,-2.8104,-0.4917,-4.9703,-3.9106 +tnc_shared_ASC_no_auto,-0.8890,-1.0868,-0.8890,-1.0868,-7.0000,-1.0868,-0.8890,-2.6912,0.7111,1.9189 +tnc_shared_ASC_auto_deficient,-4.5876,-1.9093,-4.5876,-1.9093,-1.4746,-1.9093,-4.5876,-2.0394,-2.9216,-5.7572 +tnc_shared_ASC_auto_sufficient,-3.9858,-3.7830,-3.9858,-3.7830,-3.7219,-3.7830,-3.9858,-1.6532,-6.1634,-4.7542 joint_walk_ASC_no_auto,-0.21274701,-0.21274701,-0.21274701,-0.21274701,-0.21274701,-0.21274701,-0.21274701,-0.21274701,-0.21274701,-0.21274701 -joint_walk_ASC_auto_decicient,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582 +joint_walk_ASC_auto_deficient,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582,-1.960770582 joint_walk_ASC_auto_sufficient,-3.235215607,-3.235215607,-3.235215607,-3.235215607,-3.235215607,-3.235215607,-3.235215607,-3.235215607,-3.235215607,-3.235215607 joint_bike_ASC_no_auto,-2.867159872,-2.867159872,-2.867159872,-2.867159872,-2.867159872,-2.867159872,-2.867159872,-2.867159872,-2.867159872,-2.867159872 -joint_bike_ASC_auto_decicient,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164 +joint_bike_ASC_auto_deficient,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164,-6.076415164 joint_bike_ASC_auto_sufficient,-6.376065819,-6.376065819,-6.376065819,-6.376065819,-6.376065819,-6.376065819,-6.376065819,-6.376065819,-6.376065819,-6.376065819 joint_sr2_ASC_no_auto,0,0,0,0,0,0,0,0,0,0 -joint_sr2_ASC_auto_decicient,0,0,0,0,0,0,0,0,0,0 +joint_sr2_ASC_auto_deficient,0,0,0,0,0,0,0,0,0,0 joint_sr2_ASC_auto_sufficient,0,0,0,0,0,0,0,0,0,0 joint_sr3p_ASC_no_auto,0.563067095,0.563067095,0.563067095,0.563067095,0.563067095,0.563067095,0.563067095,0.563067095,0.563067095,0.563067095 -joint_sr3p_ASC_auto_decicient,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225 +joint_sr3p_ASC_auto_deficient,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225,-1.884169225 joint_sr3p_ASC_auto_sufficient,-2.234826088,-2.234826088,-2.234826088,-2.234826088,-2.234826088,-2.234826088,-2.234826088,-2.234826088,-2.234826088,-2.234826088 joint_walk_transit_ASC_no_auto,0.622924164,0.622924164,0.622924164,0.622924164,0.622924164,0.622924164,0.622924164,0.622924164,0.622924164,0.622924164 -joint_walk_transit_ASC_auto_decicient,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126 +joint_walk_transit_ASC_auto_deficient,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126,-5.163448126 joint_walk_transit_ASC_auto_sufficient,-18.26453357,-18.26453357,-18.26453357,-18.26453357,-18.26453357,-18.26453357,-18.26453357,-18.26453357,-18.26453357,-18.26453357 joint_drive_transit_ASC_no_auto,0,0,0,0,0,0,0,0,0,0 -joint_drive_transit_ASC_auto_decicient,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337 +joint_drive_transit_ASC_auto_deficient,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337,-5.963221337 joint_drive_transit_ASC_auto_sufficient,-8.045285637,-8.045285637,-8.045285637,-8.045285637,-8.045285637,-8.045285637,-8.045285637,-8.045285637,-8.045285637,-8.045285637 +joint_taxi_ASC_no_auto,-1.2775,-1.2775,-1.2775,-1.2775,-1.2775,-1.2775,-1.2775,-1.2775,-1.2775,-1.2775 +joint_taxi_ASC_auto_deficient,-6.7340,-6.7340,-6.7340,-6.7340,-6.7340,-6.7340,-6.7340,-6.7340,-6.7340,-6.7340 +joint_taxi_ASC_auto_sufficient,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000 +joint_tnc_single_ASC_no_auto,-1.6608,-1.6608,-1.6608,-1.6608,-1.6608,-1.6608,-1.6608,-1.6608,-1.6608,-1.6608 +joint_tnc_single_ASC_auto_deficient,-6.8524,-6.8524,-6.8524,-6.8524,-6.8524,-6.8524,-6.8524,-6.8524,-6.8524,-6.8524 +joint_tnc_single_ASC_auto_sufficient,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000 +joint_tnc_shared_ASC_no_auto,-1.9348,-1.9348,-1.9348,-1.9348,-1.9348,-1.9348,-1.9348,-1.9348,-1.9348,-1.9348 +joint_tnc_shared_ASC_auto_deficient,-7.1600,-7.1600,-7.1600,-7.1600,-7.1600,-7.1600,-7.1600,-7.1600,-7.1600,-7.1600 +joint_tnc_shared_ASC_auto_sufficient,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000 #c,,,,,,,,,, local_bus_ASC,-0.090703267,-0.090703267,-0.090703267,-0.090703267,-0.065086209,-0.090703267,-0.090703267,-0.065086209,0.066895065,-0.090703267 walk_light_rail_ASC,0.76895473,0.76895473,0.76895473,0.76895473,1.681400281,0.76895473,0.76895473,1.681400281,0.825556718,0.76895473 diff --git a/example/configs/trip_mode_choice.csv b/example/configs/trip_mode_choice.csv index 20462489a..b83d75b76 100644 --- a/example/configs/trip_mode_choice.csv +++ b/example/configs/trip_mode_choice.csv @@ -1,359 +1,398 @@ -Description,Expression,DRIVEALONEFREE,DRIVEALONEPAY,SHARED2FREE,SHARED2PAY,SHARED3FREE,SHARED3PAY,WALK,BIKE,WALK_LOC,WALK_LRF,WALK_EXP,WALK_HVY,WALK_COM,DRIVE_LOC,DRIVE_LRF,DRIVE_EXP,DRIVE_HVY,DRIVE_COM -#Drive alone no toll,,,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable,sov_available == False,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable for zero auto households,auto_ownership == 0,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable for persons less than 16,age < 16,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable for joint tours,is_joint == True,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Unavailable if didn't drive to work,is_atwork_subtour & ~work_tour_is_SOV,-999,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - In-vehicle time,@c_ivt*odt_skims['SOV_TIME'],1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Terminal time,@c_walktimeshort * df.total_terminal_time,1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Operating cost ,@df.c_cost * costPerMile * odt_skims['SOV_DIST'],1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Parking cost ,c_cost * total_parking_cost,1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Bridge toll ,@df.c_cost * odt_skims['SOV_BTOLL'],1,,,,,,,,,,,,,,,,, -DRIVEALONEFREE - Person is between 16 and 19 years old,@c_age1619_da * ((df.age >= 16) & (df.age <= 19)),1,,,,,,,,,,,,,,,,, -#Drive alone toll,,,,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable,sovtoll_available == False,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable for zero auto households,auto_ownership == 0,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable for persons less than 16,age < 16,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable for joint tours,is_joint == True,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Unavailable if didn't drive to work,is_atwork_subtour & ~work_tour_is_SOV,,-999,,,,,,,,,,,,,,,, -DRIVEALONEPAY - In-vehicle time,@c_ivt*odt_skims['SOVTOLL_TIME'],,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Terminal time,@c_walktimeshort * df.total_terminal_time,,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Operating cost,@df.c_cost * costPerMile * odt_skims['SOVTOLL_DIST'],,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Parking cost,c_cost * total_parking_cost,,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Bridge toll,@df.c_cost * odt_skims['SOVTOLL_BTOLL'],,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Value toll,@df.c_cost * odt_skims['SOVTOLL_VTOLL'],,1,,,,,,,,,,,,,,,, -DRIVEALONEPAY - Person is between 16 and 19 years old,@c_age1619_da * ((df.age >= 16) & (df.age <= 19)),,1,,,,,,,,,,,,,,,, -#Shared ride 2,,,,,,,,,,,,,,,,,,, -SHARED2FREE - Unavailable,hov2_available == False,,,-999,,,,,,,,,,,,,,, -SHARED2FREE - Unavailable based on party size,is_joint & (number_of_participants > 2),,,-999,,,,,,,,,,,,,,, -SHARED2FREE - In-vehicle time,@c_ivt * odt_skims['HOV2_TIME'],,,1,,,,,,,,,,,,,,, -SHARED2FREE - Terminal time,@c_walktimeshort * df.total_terminal_time,,,1,,,,,,,,,,,,,,, -SHARED2FREE - Operating cost,@df.c_cost * costPerMile * odt_skims['HOV2_DIST'],,,1,,,,,,,,,,,,,,, -SHARED2FREE - Parking cost,@df.c_cost * df.total_parking_cost / costShareSr2,,,1,,,,,,,,,,,,,,, -SHARED2FREE - Bridge toll,@df.c_cost * odt_skims['HOV2_BTOLL'] / costShareSr2,,,1,,,,,,,,,,,,,,, -SHARED2FREE - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,1,,,,,,,,,,,,,,, -SHARED2FREE - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,1,,,,,,,,,,,,,,, -SHARED2FREE - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,1,,,,,,,,,,,,,,, -#Shared ride 2 toll,,,,,,,,,,,,,,,,,,, -SHARED2PAY - Unavailable,hov2toll_available == False,,,,-999,,,,,,,,,,,,,, -SHARED2PAY - Unavailable based on party size,is_joint & (number_of_participants > 2),,,,-999,,,,,,,,,,,,,, -SHARED2PAY - In-vehicle time,@c_ivt * odt_skims['HOV2TOLL_TIME'],,,,1,,,,,,,,,,,,,, -SHARED2PAY - Terminal time,@c_walktimeshort * df.total_terminal_time,,,,1,,,,,,,,,,,,,, -SHARED2PAY - Operating cost,@df.c_cost * costPerMile * odt_skims['HOV2TOLL_DIST'],,,,1,,,,,,,,,,,,,, -SHARED2PAY - Parking cost,@df.c_cost * df.total_parking_cost / costShareSr2,,,,1,,,,,,,,,,,,,, -SHARED2PAY - Bridge toll,@df.c_cost * odt_skims['HOV2TOLL_BTOLL'] / costShareSr2,,,,1,,,,,,,,,,,,,, -SHARED2PAY - Value toll,@df.c_cost * odt_skims['HOV2TOLL_VTOLL'] / costShareSr2,,,,1,,,,,,,,,,,,,, -SHARED2PAY - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,1,,,,,,,,,,,,,, -SHARED2PAY - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,1,,,,,,,,,,,,,, -SHARED2PAY - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,1,,,,,,,,,,,,,, -#Shared ride 3+,,,,,,,,,,,,,,,,,,, -SHARED3FREE - Unavailable,hov3_available == False,,,,,-999,,,,,,,,,,,,, -SHARED3FREE - In-vehicle time,@c_ivt * odt_skims['HOV3_TIME'],,,,,1,,,,,,,,,,,,, -SHARED3FREE - Terminal time,@c_walktimeshort * df.total_terminal_time,,,,,1,,,,,,,,,,,,, -SHARED3FREE - Operating cost,@df.c_cost * costPerMile * odt_skims['HOV3_DIST'],,,,,1,,,,,,,,,,,,, -SHARED3FREE - Parking cost,@df.c_cost * df.total_parking_cost / costShareSr3,,,,,1,,,,,,,,,,,,, -SHARED3FREE - Bridge toll,@df.c_cost * odt_skims['HOV3_BTOLL'] / costShareSr3,,,,,1,,,,,,,,,,,,, -SHARED3FREE - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,,1,,,,,,,,,,,,, -SHARED3FREE - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,,1,,,,,,,,,,,,, -SHARED3FREE - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,,1,,,,,,,,,,,,, -#Shared ride 3+ toll,,,,,,,,,,,,,,,,,,, -SHARED3PAY - Unavailable,hov3toll_available == False,,,,,,-999,,,,,,,,,,,, -SHARED3PAY - In-vehicle time,@c_ivt * odt_skims['HOV3TOLL_TIME'],,,,,,1,,,,,,,,,,,, -SHARED3PAY - Terminal time,@c_walktimeshort * df.total_terminal_time,,,,,,1,,,,,,,,,,,, -SHARED3PAY - Operating cost,@df.c_cost * costPerMile * odt_skims['HOV3TOLL_DIST'],,,,,,1,,,,,,,,,,,, -SHARED3PAY - Parking cost,@df.c_cost * df.total_parking_cost / costShareSr3,,,,,,1,,,,,,,,,,,, -SHARED3PAY - Bridge toll,@df.c_cost * odt_skims['HOV3TOLL_BTOLL'] / costShareSr3,,,,,,1,,,,,,,,,,,, -SHARED3PAY - Value toll,@df.c_cost * odt_skims['HOV3TOLL_VTOLL'] / costShareSr3,,,,,,1,,,,,,,,,,,, -SHARED3PAY - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,,,1,,,,,,,,,,,, -SHARED3PAY - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,,,1,,,,,,,,,,,, -SHARED3PAY - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,,,1,,,,,,,,,,,, -#Walk,,,,,,,,,,,,,,,,,,, -WALK - Time up to 2 miles,@c_walktimeshort * od_skims['DISTWALK'].clip(upper=walkThresh) * 60/walkSpeed,,,,,,,1,,,,,,,,,,, -WALK - Time beyond 2 of a miles,@c_walktimelong * (od_skims['DISTWALK'] - walkThresh).clip(lower=0) * 60/walkSpeed,,,,,,,1,,,,,,,,,,, -WALK - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,1,,,,,,,,,,, -WALK - Topology,@c_topology_walk * df.trip_topology,,,,,,,1,,,,,,,,,,, -#Bike,,,,,,,,,,,,,,,,,,, -BIKE - Unavailable if didn't bike to work,is_atwork_subtour & ~work_tour_is_bike,,,,,,,,-999,,,,,,,,,, -BIKE - Time up to 6 miles,@c_biketimeshort * od_skims['DISTBIKE'].clip(upper=bikeThresh)*60/bikeSpeed,,,,,,,,1,,,,,,,,,, -BIKE - Time beyond 6 of a miles,@c_biketimelong * (od_skims['DISTBIKE']-bikeThresh).clip(lower=0)*60/bikeSpeed,,,,,,,,1,,,,,,,,,, -BIKE - Destination zone densityIndex,@c_density_index*df.density_index,,,,,,,,1,,,,,,,,,, -BIKE - Topology,@c_topology_bike * df.trip_topology,,,,,,,,1,,,,,,,,,, -#Walk to Local,,,,,,,,,,,,,,,,,,, -WALK_LOC - Unavailable,walk_local_available == False,,,,,,,,,-999,,,,,,,,, -WALK_LOC - In-vehicle time,@c_ivt * odt_skims['WLK_LOC_WLK_TOTIVT']/100,,,,,,,,,1,,,,,,,,, -WALK_LOC - Short iwait time,@c_short_i_wait * (odt_skims['WLK_LOC_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,1,,,,,,,,, -WALK_LOC - Long iwait time,@c_long_i_wait * (odt_skims['WLK_LOC_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,1,,,,,,,,, -WALK_LOC - transfer wait time,@c_xwait * odt_skims['WLK_LOC_WLK_XWAIT']/100,,,,,,,,,1,,,,,,,,, -WALK_LOC - number of transfers,@c_xfers_wlk * (odt_skims['WLK_LOC_WLK_BOARDS']-1).clip(0),,,,,,,,,1,,,,,,,,, -WALK_LOC - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,1,,,,,,,,, -WALK_LOC - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,1,,,,,,,,, -WALK_LOC - Walk other time,@c_waux * odt_skims['WLK_LOC_WLK_WAUX']/100,,,,,,,,,1,,,,,,,,, -WALK_LOC - Fare,@df.c_cost * odt_skims['WLK_LOC_WLK_FAR'],,,,,,,,,1,,,,,,,,, -WALK_LOC - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,1,,,,,,,,, -WALK_LOC - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,1,,,,,,,,, -WALK_LOC - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,1,,,,,,,,, -#Walk to Light rail/Ferry,,,,,,,,,,,,,,,,,,, -WALK_LRF - Unavailable,walk_lrf_available == False,,,,,,,,,,-999,,,,,,,, -WALK_LRF - In-vehicle time,@c_ivt * odt_skims['WLK_LRF_WLK_TOTIVT']/100,,,,,,,,,,1,,,,,,,, -WALK_LRF - In-vehicle time on Light Rail (incremental w/ ivt),@(c_ivt_lrt-c_ivt) * odt_skims['WLK_LRF_WLK_KEYIVT']/100,,,,,,,,,,1,,,,,,,, -WALK_LRF - In-vehicle time on Ferry (incremental w/keyivt),@(c_ivt_ferry-c_ivt_lrt) * odt_skims['WLK_LRF_WLK_FERRYIVT']/100,,,,,,,,,,1,,,,,,,, -WALK_LRF - Short iwait time,@c_short_i_wait * (odt_skims['WLK_LRF_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,1,,,,,,,, -WALK_LRF - Long iwait time,@c_long_i_wait * (odt_skims['WLK_LRF_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,1,,,,,,,, -WALK_LRF - transfer wait time,@c_xwait * odt_skims['WLK_LRF_WLK_XWAIT']/100,,,,,,,,,,1,,,,,,,, -WALK_LRF - number of transfers,@c_xfers_wlk * (odt_skims['WLK_LRF_WLK_BOARDS']-1).clip(0),,,,,,,,,,1,,,,,,,, -WALK_LRF - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,,1,,,,,,,, -WALK_LRF - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,,1,,,,,,,, -WALK_LRF - Walk otherLight rail/Ferry time,@c_waux * odt_skims['WLK_LRF_WLK_WAUX']/100,,,,,,,,,,1,,,,,,,, -WALK_LRF - Fare,@df.c_cost * odt_skims['WLK_LRF_WLK_FAR'],,,,,,,,,,1,,,,,,,, -WALK_LRF - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,1,,,,,,,, -WALK_LRF - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,1,,,,,,,, -WALK_LRF - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,1,,,,,,,, -#Walk to Express bus,,,,,,,,,,,,,,,,,,, -WALK_EXP - Unavailable,walk_express_available == False,,,,,,,,,,,-999,,,,,,, -WALK_EXP - In-vehicle time,@c_ivt * odt_skims['WLK_EXP_WLK_TOTIVT']/100,,,,,,,,,,,1,,,,,,, -WALK_EXP - In-vehicle time on Express bus (incremental w/ ivt),@(c_ivt_exp-c_ivt) * odt_skims['WLK_EXP_WLK_KEYIVT']/100,,,,,,,,,,,1,,,,,,, -WALK_EXP - Short iwait time,@c_short_i_wait * (odt_skims['WLK_EXP_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,1,,,,,,, -WALK_EXP - Long iwait time,@c_long_i_wait * (odt_skims['WLK_EXP_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,1,,,,,,, -WALK_EXP - transfer wait time,@c_xwait * odt_skims['WLK_EXP_WLK_XWAIT']/100,,,,,,,,,,,1,,,,,,, -WALK_EXP - number of transfers,@c_xfers_wlk * (odt_skims['WLK_EXP_WLK_BOARDS']-1).clip(0),,,,,,,,,,,1,,,,,,, -WALK_EXP - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,,,1,,,,,,, -WALK_EXP - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,,,1,,,,,,, -WALK_EXP - Walk other time,@c_waux * odt_skims['WLK_EXP_WLK_WAUX']/100,,,,,,,,,,,1,,,,,,, -WALK_EXP - Fare,@df.c_cost * odt_skims['WLK_EXP_WLK_FAR'],,,,,,,,,,,1,,,,,,, -WALK_EXP - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,1,,,,,,, -WALK_EXP - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,1,,,,,,, -WALK_EXP - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,,1,,,,,,, -#Walk to Heavy Rail,,,,,,,,,,,,,,,,,,, -WALK_HVY - Unavailable,walk_heavyrail_available == False,,,,,,,,,,,,-999,,,,,, -WALK_HVY - In-vehicle time,@c_ivt * odt_skims['WLK_HVY_WLK_TOTIVT']/100,,,,,,,,,,,,1,,,,,, -WALK_HVY - In-vehicle time on heavy rail (incremental w/ ivt),@(c_ivt_hvy-c_ivt) * odt_skims['WLK_HVY_WLK_KEYIVT']/100,,,,,,,,,,,,1,,,,,, -WALK_HVY - Short iwait time,@c_short_i_wait * (odt_skims['WLK_HVY_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,1,,,,,, -WALK_HVY - Long iwait time,@c_long_i_wait * (odt_skims['WLK_HVY_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,1,,,,,, -WALK_HVY - transfer wait time,@c_xwait * odt_skims['WLK_HVY_WLK_XWAIT']/100,,,,,,,,,,,,1,,,,,, -WALK_HVY - number of transfers,@c_xfers_wlk * (odt_skims['WLK_HVY_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,1,,,,,, -WALK_HVY - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,,,,1,,,,,, -WALK_HVY - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,,,,1,,,,,, -WALK_HVY - Walk other time,@c_waux * odt_skims['WLK_HVY_WLK_WAUX']/100,,,,,,,,,,,,1,,,,,, -WALK_HVY - Fare,@df.c_cost * odt_skims['WLK_HVY_WLK_FAR'],,,,,,,,,,,,1,,,,,, -WALK_HVY - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,1,,,,,, -WALK_HVY - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,1,,,,,, -WALK_HVY - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,,,1,,,,,, -#Walk to Commuter rail,,,,,,,,,,,,,,,,,,, -WALK_COM - Unavailable,walk_commuter_available == False,,,,,,,,,,,,,-999,,,,, -WALK_COM - In-vehicle time,@c_ivt * odt_skims['WLK_COM_WLK_TOTIVT']/100,,,,,,,,,,,,,1,,,,, -WALK_COM - In-vehicle time on commuter rail (incremental w/ ivt),@(c_ivt_com-c_ivt) * odt_skims['WLK_COM_WLK_KEYIVT']/100,,,,,,,,,,,,,1,,,,, -WALK_COM - Short iwait time,@c_short_i_wait * (odt_skims['WLK_COM_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,1,,,,, -WALK_COM - Long iwait time,@c_long_i_wait * (odt_skims['WLK_COM_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,1,,,,, -WALK_COM - transfer wait time,@c_xwait * odt_skims['WLK_COM_WLK_XWAIT']/100,,,,,,,,,,,,,1,,,,, -WALK_COM - number of transfers,@c_xfers_wlk * (odt_skims['WLK_COM_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,1,,,,, -WALK_COM - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,,,,,1,,,,, -WALK_COM - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,,,,,1,,,,, -WALK_COM - Walk other time,@c_waux * odt_skims['WLK_COM_WLK_WAUX']/100,,,,,,,,,,,,,1,,,,, -WALK_COM - Fare,@df.c_cost * odt_skims['WLK_COM_WLK_FAR'],,,,,,,,,,,,,1,,,,, -WALK_COM - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,1,,,,, -WALK_COM - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,1,,,,, -WALK_COM - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,1,,,,, -#Drive to Local,,,,,,,,,,,,,,,,,,, -DRIVE_LOC - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,-999,,,, -DRIVE_LOC - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,-999,,,, -DRIVE_LOC - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,1,,,, -DRIVE_LOC - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - Unavailable,outbound & ~drive_local_available_outbound,,,,,,,,,,,,,,-999,,,, -DRIVE_LOC outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_LOC_WLK_TOTIVT']/100,,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_LOC_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_LOC_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_LOC_WLK_XWAIT']/100,,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - number of transfers,@df.outbound * c_xfers_wlk * (odt_skims['DRV_LOC_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_LOC_WLK_DTIM']/100,,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - Walk egress time,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_LOC_WLK_WAUX']/100,,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_LOC_WLK_FAR'] + costPerMile*odt_skims['DRV_LOC_WLK_DDIST']/100),,,,,,,,,,,,,,1,,,, -DRIVE_LOC outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_LOC_WLK_DDIST']/100)/ (od_skims['DIST']),,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - Unavailable,inbound & ~drive_local_available_inbound,,,,,,,,,,,,,,-999,,,, -DRIVE_LOC inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_LOC_DRV_TOTIVT']/100,,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_LOC_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_LOC_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_LOC_DRV_XWAIT']/100,,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - number of transfers,@df.inbound * c_xfers_wlk * (odt_skims['WLK_LOC_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - Drive time,@df.inbound * c_dtim * odt_skims['WLK_LOC_DRV_DTIM']/100,,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - Walk other time,@df.inbound * c_waux * odt_skims['WLK_LOC_DRV_WAUX']/100,,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_LOC_DRV_FAR'] + costPerMile*odt_skims['WLK_LOC_DRV_DDIST']/100),,,,,,,,,,,,,,1,,,, -DRIVE_LOC inbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['WLK_LOC_DRV_DDIST']/100)/ (od_skims['DIST']),,,,,,,,,,,,,,1,,,, -#Drive to Light Rail/Ferry ,,,,,,,,,,,,,,,,,,, -DRIVE_LRF - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,-999,,, -DRIVE_LRF - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,-999,,, -DRIVE_LRF - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,,1,,, -DRIVE_LRF - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - Unavailable,outbound & ~drive_lrf_available_outbound,,,,,,,,,,,,,,,-999,,, -DRIVE_LRF outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_LRF_WLK_TOTIVT']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - In-vehicle time on Light Rail (incremental w/ ivt),@df.outbound * (c_ivt_lrt-c_ivt)*odt_skims['DRV_LRF_WLK_KEYIVT']/100 ,,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - In-vehicle time on Ferry (incremental w/ keyivt),@df.outbound * (c_ivt_ferry-c_ivt_lrt)*odt_skims['DRV_LRF_WLK_FERRYIVT']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_LRF_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_LRF_WLK_IWAIT']/100-waitThresh).clip(0) ,,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_LRF_WLK_XWAIT']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - number of transfers,@df.outbound * c_xfers_drv * (odt_skims['DRV_LRF_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_LRF_WLK_DTIM']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - Walk egress time,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_LRF_WLK_WAUX']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_LRF_WLK_FAR'] + costPerMile * odt_skims['DRV_LRF_WLK_DDIST']/100),,,,,,,,,,,,,,,1,,, -DRIVE_LRF outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_LRF_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - Unavailable,inbound & ~drive_lrf_available_inbound,,,,,,,,,,,,,,,-999,,, -DRIVE_LRF inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_LRF_DRV_TOTIVT']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - In-vehicle time on Light Rail (incremental w/ ivt),@df.inbound * (c_ivt_lrt-c_ivt)*odt_skims['WLK_LRF_DRV_KEYIVT']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - In-vehicle time on Ferry (incremental w/ keyivt),@df.inbound * (c_ivt_ferry-c_ivt_lrt)*odt_skims['WLK_LRF_DRV_FERRYIVT']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_LRF_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_LRF_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_LRF_DRV_XWAIT']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - number of transfers,@df.inbound * c_xfers_drv * (odt_skims['WLK_LRF_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - Drive time,@df.inbound * c_dtim * odt_skims['WLK_LRF_DRV_DTIM']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - Walk other time,@df.inbound * c_waux * odt_skims['WLK_LRF_DRV_WAUX']/100,,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_LRF_DRV_FAR'] + costPerMile * odt_skims['WLK_LRF_DRV_DDIST']/100),,,,,,,,,,,,,,,1,,, -DRIVE_LRF inbound - Ratio of drive access distance to OD distance,@df.inbound * c_dacc_ratio * (odt_skims['WLK_LRF_DRV_DDIST']/100)/ od_skims['DIST'],,,,,,,,,,,,,,,1,,, -#Drive to Express bus,,,,,,,,,,,,,,,,,,, -DRIVE_EXP - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,-999,, -DRIVE_EXP - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,-999,, -DRIVE_EXP - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,,,1,, -DRIVE_EXP - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - Unavailable,outbound & ~drive_express_available_outbound,,,,,,,,,,,,,,,,-999,, -DRIVE_EXP outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_EXP_WLK_TOTIVT']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - In-vehicle time on Express bus (incremental w/ ivt),@df.outbound * (c_ivt_exp-c_ivt) * odt_skims['DRV_EXP_WLK_KEYIVT']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_EXP_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_EXP_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_EXP_WLK_XWAIT']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - number of transfers,@df.outbound * c_xfers_drv * (odt_skims['DRV_EXP_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_EXP_WLK_DTIM']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - Walk egress ime,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_EXP_WLK_WAUX']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_EXP_WLK_FAR'] + costPerMile * odt_skims['DRV_EXP_WLK_DDIST']/100),,,,,,,,,,,,,,,,1,, -DRIVE_EXP outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_EXP_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - Unavailable,inbound & ~drive_express_available_inbound,,,,,,,,,,,,,,,,-999,, -DRIVE_EXP inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_EXP_DRV_TOTIVT']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - In-vehicle time on Express bus (incremental w/ ivt),@df.inbound * (c_ivt_exp-c_ivt) * odt_skims['WLK_EXP_DRV_KEYIVT']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_EXP_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_EXP_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_EXP_DRV_XWAIT']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - number of transfers,@df.inbound * c_xfers_drv * (odt_skims['WLK_EXP_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - Drive time,@df.inbound * c_dtim * odt_skims['WLK_EXP_DRV_DTIM']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - Walk other time,@df.inbound * c_waux * odt_skims['WLK_EXP_DRV_WAUX']/100,,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_EXP_DRV_FAR'] + costPerMile * odt_skims['WLK_EXP_DRV_DDIST']/100),,,,,,,,,,,,,,,,1,, -DRIVE_EXP inbound - Ratio of drive access distance to OD distance,@df.inbound * c_dacc_ratio * (odt_skims['WLK_EXP_DRV_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,1,, -#Drive to Heavy Rail,,,,,,,,,,,,,,,,,,, -DRIVE_HVY - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,,-999, -DRIVE_HVY - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,,-999, -DRIVE_HVY - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,,,,1, -DRIVE_HVY - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - Unavailable,outbound & ~drive_heavyrail_available_outbound,,,,,,,,,,,,,,,,,-999, -DRIVE_HVY outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_HVY_WLK_TOTIVT']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - In-vehicle time on heavy rail (incremental w/ ivt),@df.outbound * (c_ivt_hvy-c_ivt) * odt_skims['DRV_HVY_WLK_KEYIVT']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_HVY_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_HVY_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_HVY_WLK_XWAIT']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - number of transfers,@df.outbound * c_xfers_drv * (odt_skims['DRV_HVY_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_HVY_WLK_DTIM']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - Walk egress time,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_HVY_WLK_WAUX']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_HVY_WLK_FAR'] + costPerMile * odt_skims['DRV_HVY_WLK_DDIST']/100),,,,,,,,,,,,,,,,,1, -DRIVE_HVY outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_HVY_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - Unavailable,inbound & ~drive_heavyrail_available_inbound,,,,,,,,,,,,,,,,,-999, -DRIVE_HVY inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_HVY_DRV_TOTIVT']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - In-vehicle time on heavy rail (incremental w/ ivt),@df.inbound * (c_ivt_hvy-c_ivt) * odt_skims['WLK_HVY_DRV_KEYIVT']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_HVY_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_HVY_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_HVY_DRV_XWAIT']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - number of transfers,@df.inbound * c_xfers_drv * (odt_skims['WLK_HVY_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_HVY_WLK_DTIM']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - Walk other time,@c_waux * odt_skims['WLK_HVY_DRV_WAUX']/100,,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_HVY_DRV_FAR'] + costPerMile * odt_skims['WLK_HVY_DRV_DDIST']/100),,,,,,,,,,,,,,,,,1, -DRIVE_HVY inbound - Ratio of drive access distance to OD distance,@df.inbound * c_dacc_ratio * (odt_skims['WLK_HVY_DRV_DDIST']/100)/ od_skims['DIST'],,,,,,,,,,,,,,,,,1, -#Drive to Commuter Rail,,,,,,,,,,,,,,,,,,, -DRIVE_COM - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,,,-999 -DRIVE_COM - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,,,-999 -DRIVE_COM - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,,,,,1 -DRIVE_COM - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - Unavailable,outbound & ~drive_commuter_available_outbound,,,,,,,,,,,,,,,,,,-999 -DRIVE_COM outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_COM_WLK_TOTIVT']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - In-vehicle time on commuter rail (incremental w/ ivt),@df.outbound * (c_ivt_com-c_ivt) * odt_skims['DRV_COM_WLK_KEYIVT']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_COM_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_COM_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_COM_WLK_XWAIT']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - number of transfers,@df.outbound * c_xfers_drv * (odt_skims['DRV_COM_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_COM_WLK_DTIM']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - Walk egress time,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_COM_WLK_WAUX']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_COM_WLK_FAR'] + costPerMile * odt_skims['DRV_COM_WLK_DDIST']/100),,,,,,,,,,,,,,,,,,1 -DRIVE_COM outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_COM_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - Unavailable,inbound & ~drive_commuter_available_inbound,,,,,,,,,,,,,,,,,,-999 -DRIVE_COM inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_COM_DRV_TOTIVT']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - In-vehicle time on commuter rail (incremental w/ ivt),@df.inbound * (c_ivt_com-c_ivt) * odt_skims['WLK_COM_DRV_KEYIVT']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_COM_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_COM_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_COM_DRV_XWAIT']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - number of transfers,@df.inbound * c_xfers_drv * (odt_skims['WLK_COM_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - Drive time,@df.inbound * c_dtim * odt_skims['WLK_COM_DRV_DTIM']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - Walk other time,@df.inbound * c_waux * odt_skims['WLK_COM_DRV_WAUX']/100,,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_COM_DRV_FAR'] + costPerMile * odt_skims['WLK_COM_DRV_DDIST']/100),,,,,,,,,,,,,,,,,,1 -DRIVE_COM inbound - Ratio of drive access distance to OD distance,@df.inbound * c_dacc_ratio * (odt_skims['WLK_COM_DRV_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,,1 -#,,,,,,,,,,,,,,,,,,, -Auto tour mode availability,tour_mode_is_auto,,,,,,,,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999 -Walk tour mode availability,tour_mode_is_walk,-999,-999,-999,-999,-999,-999,,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999 -Bike tour mode availability,tour_mode_is_bike,-999,-999,-999,-999,-999,-999,,,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999 -Walk to Transit tour mode availability,tour_mode_is_walk_transit,-999,-999,,,,,,-999,,,,,,-999,-999,-999,-999,-999 -Drive to Transit tour modes availability,tour_mode_is_drive_transit,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,,,,, -#indiv tour ASCs,,,,,,,,,,,,,,,,,,, -Drive Alone tour mode ASC -- shared ride 2,@sov_ASC_sr2 * (df.is_indiv & df.i_tour_mode.isin(I_SOV_MODES)),,,1,1,,,,,,,,,,,,,, -Drive Alone tour mode ASC -- shared ride 3+,@sov_ASC_sr3p * (df.is_indiv & df.i_tour_mode.isin(I_SOV_MODES)),,,,,1,1,,,,,,,,,,,, -Drive Alone tour mode ASC -- walk,@sov_ASC_walk * (df.is_indiv & df.i_tour_mode.isin(I_SOV_MODES)),,,,,,,1,,,,,,,,,,, -Shared Ride 2 tour mode ASC -- shared ride 2,@sr2_ASC_sr2 * (df.is_indiv & df.i_tour_mode.isin(I_SR2_MODES)),,,1,1,,,,,,,,,,,,,, -Shared Ride 2 tour mode ASC -- shared ride 3+,@sr2_ASC_sr3p * (df.is_indiv & df.i_tour_mode.isin(I_SR2_MODES)),,,,,1,1,,,,,,,,,,,, -Shared Ride 2 tour mode ASC -- walk,@sr2_ASC_walk * (df.is_indiv & df.i_tour_mode.isin(I_SR2_MODES)),,,,,,,1,,,,,,,,,,, -Shared Ride 3+ tour mode ASC -- shared ride 2,@sr3p_ASC_sr2 * (df.is_indiv & df.i_tour_mode.isin(I_SR3P_MODES)),,,1,1,,,,,,,,,,,,,, -Shared Ride 3+ tour mode ASC -- shared ride 3+,@sr3p_ASC_sr3p * (df.is_indiv & df.i_tour_mode.isin(I_SR3P_MODES)),,,,,1,1,,,,,,,,,,,, -Shared Ride 3+ tour mode ASC -- walk,@sr3p_ASC_walk * (df.is_indiv & df.i_tour_mode.isin(I_SR3P_MODES)),,,,,,,1,,,,,,,,,,, -Bike tour mode ASC -- walk,@bike_ASC_walk * df.is_indiv * (df.i_tour_mode == I_BIKE_MODE),,,,,,,1,,,,,,,,,,, -Walk to Transit tour mode ASC -- light rail,@walk_transit_ASC_lightrail * (df.is_indiv & df.tour_mode_is_walk_transit & ~df.walk_ferry_available),,,,,,,,,,1,,,,,,,, -Walk to Transit tour mode ASC -- ferry,@walk_transit_ASC_ferry * (df.is_indiv & df.tour_mode_is_walk_transit & df.walk_ferry_available),,,,,,,,,,1,,,,,,,, -Walk to Transit tour mode ASC -- express bus,@walk_transit_ASC_express * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,,,,,1,,,,,,, -Walk to Transit tour mode ASC -- heavy rail,@walk_transit_ASC_heavyrail * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,,,,,,1,,,,,, -Walk to Transit tour mode ASC -- commuter rail,@walk_transit_ASC_commuter * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,,,,,,,1,,,,, -Walk to Transit tour mode ASC -- shared ride 2,@walk_transit_ASC_sr2 * (df.is_indiv & df.tour_mode_is_walk_transit),,,1,1,,,,,,,,,,,,,, -Walk to Transit tour mode ASC -- shared ride 3+,@walk_transit_ASC_sr3p * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,1,1,,,,,,,,,,,, -Walk to Transit tour mode ASC -- walk,@walk_transit_ASC_walk * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,1,,,,,,,,,,, -Drive to Transit tour mode ASC -- light rail (higher b/c loc d-trn skims differ),@drive_transit_ASC_lightrail * (df.is_indiv & df.tour_mode_is_drive_transit & ~df.drive_ferry_available),,,,,,,,,,,,,,,1,,, -Drive to Transit tour mode ASC -- ferry,@drive_transit_ASC_ferry * (df.is_indiv & df.tour_mode_is_drive_transit & df.drive_ferry_available),,,,,,,,,,,,,,,1,,, -Drive to Transit tour mode ASC -- express bus,@drive_transit_ASC_express * (df.is_indiv & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,1,, -Drive to Transit tour mode ASC -- heavy rail,@drive_transit_ASC_heavyrail * (df.is_indiv & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,1, -Drive to Transit tour mode ASC -- commuter rail,@drive_transit_ASC_commuter * (df.is_indiv & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,,1 -#joint tour ASCs,,,,,,,,,,,,,,,,,,, -joint - auto tour mode ASC -- shared ride 2,@joint_auto_ASC_sr2 * (df.is_joint & df.i_tour_mode.isin(I_AUTO_MODES)),,,1,1,,,,,,,,,,,,,, -joint - auto tour mode ASC -- shared ride 3+,@joint_auto_ASC_sr3p * (df.is_joint & df.i_tour_mode.isin(I_AUTO_MODES)),,,,,1,1,,,,,,,,,,,, -joint - auto tour mode ASC -- walk,@joint_auto_ASC_walk * (df.is_joint & df.i_tour_mode.isin(I_AUTO_MODES)),,,,,,,1,,,,,,,,,,, -joint - Bike tour mode ASC -- walk,@bike_ASC_walk * df.is_joint * (df.i_tour_mode == I_BIKE_MODE),,,,,,,1,,,,,,,,,,, -joint - Walk to Transit tour mode ASC -- light rail,@walk_transit_ASC_lightrail * (df.is_joint & df.tour_mode_is_walk_transit & ~df.walk_ferry_available),,,,,,,,,,1,,,,,,,, -joint - Walk to Transit tour mode ASC -- ferry,@walk_transit_ASC_ferry * (df.is_joint & df.tour_mode_is_walk_transit & df.walk_ferry_available),,,,,,,,,,1,,,,,,,, -joint - Walk to Transit tour mode ASC -- express bus,@walk_transit_ASC_express * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,,,,,1,,,,,,, -joint - Walk to Transit tour mode ASC -- heavy rail,@walk_transit_ASC_heavyrail * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,,,,,,1,,,,,, -joint - Walk to Transit tour mode ASC -- commuter rail,@walk_transit_ASC_commuter * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,,,,,,,1,,,,, -joint - Walk to Transit tour mode ASC -- shared ride 2,@walk_transit_ASC_sr2 * (df.is_joint & df.tour_mode_is_walk_transit),,,1,1,,,,,,,,,,,,,, -joint - Walk to Transit tour mode ASC -- shared ride 3+,@walk_transit_ASC_sr3p * (df.is_joint & df.tour_mode_is_walk_transit),,,,,1,1,,,,,,,,,,,, -joint - Walk to Transit tour mode ASC -- walk,@walk_transit_ASC_walk * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,1,,,,,,,,,,, -joint - Drive to Transit tour mode ASC -- light rail (higher b/c loc d-trn skims differ),@drive_transit_ASC_lightrail * (df.is_joint & df.tour_mode_is_drive_transit & ~df.drive_ferry_available),,,,,,,,,,,,,,,1,,, -joint - Drive to Transit tour mode ASC -- ferry,@drive_transit_ASC_ferry * (df.is_joint & df.tour_mode_is_drive_transit & df.drive_ferry_available),,,,,,,,,,,,,,,1,,, -joint - Drive to Transit tour mode ASC -- express bus,@drive_transit_ASC_express * (df.is_joint & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,1,, -joint - Drive to Transit tour mode ASC -- heavy rail,@drive_transit_ASC_heavyrail * (df.is_joint & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,1, -joint - Drive to Transit tour mode ASC -- commuter rail,@drive_transit_ASC_commuter * (df.is_joint & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,,1 -#,,,,,,,,,,,,,,,,,,, -Walk not available for long distances,@df.tour_mode_is_walk & (od_skims['DISTWALK'] > 3),,,,,,,-999,,,,,,,,,,, -Bike not available for long distances,@df.tour_mode_is_walk & (od_skims['DISTBIKE'] > 8),,,,,,,,-999,,,,,,,,,, -Origin density index,@(c_origin_density_index*df.origin_density_index).clip(c_origin_density_index_max) if origin_density_applied else 0,,,,,,,1,1,1,1,1,1,1,,,,, -Walk-express penalty for intermediate stops,@c_walk_express_penalty * ~(df.first_trip | df.first_trip),,,,,,,,,,,1,,,,,,, +Description,Expression,DRIVEALONEFREE,DRIVEALONEPAY,SHARED2FREE,SHARED2PAY,SHARED3FREE,SHARED3PAY,WALK,BIKE,WALK_LOC,WALK_LRF,WALK_EXP,WALK_HVY,WALK_COM,DRIVE_LOC,DRIVE_LRF,DRIVE_EXP,DRIVE_HVY,DRIVE_COM,TAXI,TNC_SINGLE,TNC_SHARED +#Drive alone no toll,,,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable,sov_available == False,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable for zero auto households,auto_ownership == 0,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable for persons less than 16,age < 16,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable for joint tours,is_joint == True,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Unavailable if didn't drive to work,is_atwork_subtour & ~work_tour_is_SOV,-999,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - In-vehicle time,@c_ivt*odt_skims['SOV_TIME'],1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Terminal time,@c_walktimeshort * df.total_terminal_time,1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Operating cost,@df.c_cost * costPerMile * odt_skims['SOV_DIST'],1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Parking cost,c_cost * total_parking_cost,1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Bridge toll,@df.c_cost * odt_skims['SOV_BTOLL'],1,,,,,,,,,,,,,,,,,,,, +DRIVEALONEFREE - Person is between 16 and 19 years old,@c_age1619_da * ((df.age >= 16) & (df.age <= 19)),1,,,,,,,,,,,,,,,,,,,, +#Drive alone toll,,,,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable,sovtoll_available == False,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable for zero auto households,auto_ownership == 0,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable for persons less than 16,age < 16,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable for joint tours,is_joint == True,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Unavailable if didn't drive to work,is_atwork_subtour & ~work_tour_is_SOV,,-999,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - In-vehicle time,@c_ivt*odt_skims['SOVTOLL_TIME'],,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Terminal time,@c_walktimeshort * df.total_terminal_time,,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Operating cost,@df.c_cost * costPerMile * odt_skims['SOVTOLL_DIST'],,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Parking cost,c_cost * total_parking_cost,,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Bridge toll,@df.c_cost * odt_skims['SOVTOLL_BTOLL'],,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Value toll,@df.c_cost * odt_skims['SOVTOLL_VTOLL'],,1,,,,,,,,,,,,,,,,,,, +DRIVEALONEPAY - Person is between 16 and 19 years old,@c_age1619_da * ((df.age >= 16) & (df.age <= 19)),,1,,,,,,,,,,,,,,,,,,, +#Shared ride 2,,,,,,,,,,,,,,,,,,,,,, +SHARED2FREE - Unavailable,hov2_available == False,,,-999,,,,,,,,,,,,,,,,,, +SHARED2FREE - Unavailable based on party size,is_joint & (number_of_participants > 2),,,-999,,,,,,,,,,,,,,,,,, +SHARED2FREE - In-vehicle time,@c_ivt * odt_skims['HOV2_TIME'],,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Terminal time,@c_walktimeshort * df.total_terminal_time,,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Operating cost,@df.c_cost * costPerMile * odt_skims['HOV2_DIST'],,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Parking cost,@df.c_cost * df.total_parking_cost / costShareSr2,,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Bridge toll,@df.c_cost * odt_skims['HOV2_BTOLL'] / costShareSr2,,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,1,,,,,,,,,,,,,,,,,, +SHARED2FREE - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,1,,,,,,,,,,,,,,,,,, +#Shared ride 2 toll,,,,,,,,,,,,,,,,,,,,,, +SHARED2PAY - Unavailable,hov2toll_available == False,,,,-999,,,,,,,,,,,,,,,,, +SHARED2PAY - Unavailable based on party size,is_joint & (number_of_participants > 2),,,,-999,,,,,,,,,,,,,,,,, +SHARED2PAY - In-vehicle time,@c_ivt * odt_skims['HOV2TOLL_TIME'],,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Terminal time,@c_walktimeshort * df.total_terminal_time,,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Operating cost,@df.c_cost * costPerMile * odt_skims['HOV2TOLL_DIST'],,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Parking cost,@df.c_cost * df.total_parking_cost / costShareSr2,,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Bridge toll,@df.c_cost * odt_skims['HOV2TOLL_BTOLL'] / costShareSr2,,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Value toll,@df.c_cost * odt_skims['HOV2TOLL_VTOLL'] / costShareSr2,,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,1,,,,,,,,,,,,,,,,, +SHARED2PAY - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,1,,,,,,,,,,,,,,,,, +#Shared ride 3+,,,,,,,,,,,,,,,,,,,,,, +SHARED3FREE - Unavailable,hov3_available == False,,,,,-999,,,,,,,,,,,,,,,, +SHARED3FREE - In-vehicle time,@c_ivt * odt_skims['HOV3_TIME'],,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Terminal time,@c_walktimeshort * df.total_terminal_time,,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Operating cost,@df.c_cost * costPerMile * odt_skims['HOV3_DIST'],,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Parking cost,@df.c_cost * df.total_parking_cost / costShareSr3,,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Bridge toll,@df.c_cost * odt_skims['HOV3_BTOLL'] / costShareSr3,,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,,1,,,,,,,,,,,,,,,, +SHARED3FREE - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,,1,,,,,,,,,,,,,,,, +#Shared ride 3+ toll,,,,,,,,,,,,,,,,,,,,,, +SHARED3PAY - Unavailable,hov3toll_available == False,,,,,,-999,,,,,,,,,,,,,,, +SHARED3PAY - In-vehicle time,@c_ivt * odt_skims['HOV3TOLL_TIME'],,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Terminal time,@c_walktimeshort * df.total_terminal_time,,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Operating cost,@df.c_cost * costPerMile * odt_skims['HOV3TOLL_DIST'],,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Parking cost,@df.c_cost * df.total_parking_cost / costShareSr3,,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Bridge toll,@df.c_cost * odt_skims['HOV3TOLL_BTOLL'] / costShareSr3,,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Value toll,@df.c_cost * odt_skims['HOV3TOLL_VTOLL'] / costShareSr3,,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - One person household,@c_hhsize1_sr * (df.hhsize == 1),,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Two person household,@c_hhsize2_sr * (df.hhsize == 2),,,,,,1,,,,,,,,,,,,,,, +SHARED3PAY - Person is 16 years old or older,@c_age16p_sr * (df.age >= 16),,,,,,1,,,,,,,,,,,,,,, +#Walk,,,,,,,,,,,,,,,,,,,,,, +WALK - Time up to 2 miles,@c_walktimeshort * od_skims['DISTWALK'].clip(upper=walkThresh) * 60/walkSpeed,,,,,,,1,,,,,,,,,,,,,, +WALK - Time beyond 2 of a miles,@c_walktimelong * (od_skims['DISTWALK'] - walkThresh).clip(lower=0) * 60/walkSpeed,,,,,,,1,,,,,,,,,,,,,, +WALK - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,1,,,,,,,,,,,,,, +WALK - Topology,@c_topology_walk * df.trip_topology,,,,,,,1,,,,,,,,,,,,,, +#Bike,,,,,,,,,,,,,,,,,,,,,, +BIKE - Unavailable if didn't bike to work,is_atwork_subtour & ~work_tour_is_bike,,,,,,,,-999,,,,,,,,,,,,, +BIKE - Time up to 6 miles,@c_biketimeshort * od_skims['DISTBIKE'].clip(upper=bikeThresh)*60/bikeSpeed,,,,,,,,1,,,,,,,,,,,,, +BIKE - Time beyond 6 of a miles,@c_biketimelong * (od_skims['DISTBIKE']-bikeThresh).clip(lower=0)*60/bikeSpeed,,,,,,,,1,,,,,,,,,,,,, +BIKE - Destination zone densityIndex,@c_density_index*df.density_index,,,,,,,,1,,,,,,,,,,,,, +BIKE - Topology,@c_topology_bike * df.trip_topology,,,,,,,,1,,,,,,,,,,,,, +#Walk to Local,,,,,,,,,,,,,,,,,,,,,, +WALK_LOC - Unavailable,walk_local_available == False,,,,,,,,,-999,,,,,,,,,,,, +WALK_LOC - In-vehicle time,@c_ivt * odt_skims['WLK_LOC_WLK_TOTIVT']/100,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Short iwait time,@c_short_i_wait * (odt_skims['WLK_LOC_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Long iwait time,@c_long_i_wait * (odt_skims['WLK_LOC_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - transfer wait time,@c_xwait * odt_skims['WLK_LOC_WLK_XWAIT']/100,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - number of transfers,@c_xfers_wlk * (odt_skims['WLK_LOC_WLK_BOARDS']-1).clip(0),,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Walk other time,@c_waux * odt_skims['WLK_LOC_WLK_WAUX']/100,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Fare,@df.c_cost * odt_skims['WLK_LOC_WLK_FAR'],,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,1,,,,,,,,,,,, +WALK_LOC - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,1,,,,,,,,,,,, +#Walk to Light rail/Ferry,,,,,,,,,,,,,,,,,,,,,, +WALK_LRF - Unavailable,walk_lrf_available == False,,,,,,,,,,-999,,,,,,,,,,, +WALK_LRF - In-vehicle time,@c_ivt * odt_skims['WLK_LRF_WLK_TOTIVT']/100,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - In-vehicle time on Light Rail (incremental w/ ivt),@(c_ivt_lrt-c_ivt) * odt_skims['WLK_LRF_WLK_KEYIVT']/100,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - In-vehicle time on Ferry (incremental w/keyivt),@(c_ivt_ferry-c_ivt_lrt) * odt_skims['WLK_LRF_WLK_FERRYIVT']/100,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Short iwait time,@c_short_i_wait * (odt_skims['WLK_LRF_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Long iwait time,@c_long_i_wait * (odt_skims['WLK_LRF_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - transfer wait time,@c_xwait * odt_skims['WLK_LRF_WLK_XWAIT']/100,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - number of transfers,@c_xfers_wlk * (odt_skims['WLK_LRF_WLK_BOARDS']-1).clip(0),,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Walk otherLight rail/Ferry time,@c_waux * odt_skims['WLK_LRF_WLK_WAUX']/100,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Fare,@df.c_cost * odt_skims['WLK_LRF_WLK_FAR'],,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,1,,,,,,,,,,, +WALK_LRF - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,1,,,,,,,,,,, +#Walk to Express bus,,,,,,,,,,,,,,,,,,,,,, +WALK_EXP - Unavailable,walk_express_available == False,,,,,,,,,,,-999,,,,,,,,,, +WALK_EXP - In-vehicle time,@c_ivt * odt_skims['WLK_EXP_WLK_TOTIVT']/100,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - In-vehicle time on Express bus (incremental w/ ivt),@(c_ivt_exp-c_ivt) * odt_skims['WLK_EXP_WLK_KEYIVT']/100,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Short iwait time,@c_short_i_wait * (odt_skims['WLK_EXP_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Long iwait time,@c_long_i_wait * (odt_skims['WLK_EXP_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - transfer wait time,@c_xwait * odt_skims['WLK_EXP_WLK_XWAIT']/100,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - number of transfers,@c_xfers_wlk * (odt_skims['WLK_EXP_WLK_BOARDS']-1).clip(0),,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Walk other time,@c_waux * odt_skims['WLK_EXP_WLK_WAUX']/100,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Fare,@df.c_cost * odt_skims['WLK_EXP_WLK_FAR'],,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,1,,,,,,,,,, +WALK_EXP - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,,1,,,,,,,,,, +#Walk to Heavy Rail,,,,,,,,,,,,,,,,,,,,,, +WALK_HVY - Unavailable,walk_heavyrail_available == False,,,,,,,,,,,,-999,,,,,,,,, +WALK_HVY - In-vehicle time,@c_ivt * odt_skims['WLK_HVY_WLK_TOTIVT']/100,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - In-vehicle time on heavy rail (incremental w/ ivt),@(c_ivt_hvy-c_ivt) * odt_skims['WLK_HVY_WLK_KEYIVT']/100,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Short iwait time,@c_short_i_wait * (odt_skims['WLK_HVY_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Long iwait time,@c_long_i_wait * (odt_skims['WLK_HVY_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - transfer wait time,@c_xwait * odt_skims['WLK_HVY_WLK_XWAIT']/100,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - number of transfers,@c_xfers_wlk * (odt_skims['WLK_HVY_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Walk other time,@c_waux * odt_skims['WLK_HVY_WLK_WAUX']/100,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Fare,@df.c_cost * odt_skims['WLK_HVY_WLK_FAR'],,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,1,,,,,,,,, +WALK_HVY - Person is less than 10 years old,@c_age010_trn * (df.age <= 10),,,,,,,,,,,,1,,,,,,,,, +#Walk to Commuter rail,,,,,,,,,,,,,,,,,,,,,, +WALK_COM - Unavailable,walk_commuter_available == False,,,,,,,,,,,,,-999,,,,,,,, +WALK_COM - In-vehicle time,@c_ivt * odt_skims['WLK_COM_WLK_TOTIVT']/100,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - In-vehicle time on commuter rail (incremental w/ ivt),@(c_ivt_com-c_ivt) * odt_skims['WLK_COM_WLK_KEYIVT']/100,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Short iwait time,@c_short_i_wait * (odt_skims['WLK_COM_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Long iwait time,@c_long_i_wait * (odt_skims['WLK_COM_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - transfer wait time,@c_xwait * odt_skims['WLK_COM_WLK_XWAIT']/100,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - number of transfers,@c_xfers_wlk * (odt_skims['WLK_COM_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Walk access time,@c_wacc * df.origin_walk_time,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Walk egress time,@c_wegr * df.destination_walk_time,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Walk other time,@c_waux * odt_skims['WLK_COM_WLK_WAUX']/100,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Fare,@df.c_cost * odt_skims['WLK_COM_WLK_FAR'],,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,1,,,,,,,, +WALK_COM - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,1,,,,,,,, +#Drive to Local,,,,,,,,,,,,,,,,,,,,,, +DRIVE_LOC - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,-999,,,,,,, +DRIVE_LOC - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,-999,,,,,,, +DRIVE_LOC - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - Unavailable,outbound & ~drive_local_available_outbound,,,,,,,,,,,,,,-999,,,,,,, +DRIVE_LOC outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_LOC_WLK_TOTIVT']/100,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_LOC_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_LOC_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_LOC_WLK_XWAIT']/100,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - number of transfers,@df.outbound * c_xfers_wlk * (odt_skims['DRV_LOC_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_LOC_WLK_DTIM']/100,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - Walk egress time,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_LOC_WLK_WAUX']/100,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_LOC_WLK_FAR'] + costPerMile*odt_skims['DRV_LOC_WLK_DDIST']/100),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_LOC_WLK_DDIST']/100)/ (od_skims['DIST']),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - Unavailable,inbound & ~drive_local_available_inbound,,,,,,,,,,,,,,-999,,,,,,, +DRIVE_LOC inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_LOC_DRV_TOTIVT']/100,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_LOC_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_LOC_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_LOC_DRV_XWAIT']/100,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - number of transfers,@df.inbound * c_xfers_wlk * (odt_skims['WLK_LOC_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - Drive time,@df.inbound * c_dtim * odt_skims['WLK_LOC_DRV_DTIM']/100,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - Walk other time,@df.inbound * c_waux * odt_skims['WLK_LOC_DRV_WAUX']/100,,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_LOC_DRV_FAR'] + costPerMile*odt_skims['WLK_LOC_DRV_DDIST']/100),,,,,,,,,,,,,,1,,,,,,, +DRIVE_LOC inbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['WLK_LOC_DRV_DDIST']/100)/ (od_skims['DIST']),,,,,,,,,,,,,,1,,,,,,, +#Drive to Light Rail/Ferry,,,,,,,,,,,,,,,,,,,,,, +DRIVE_LRF - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,-999,,,,,, +DRIVE_LRF - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,-999,,,,,, +DRIVE_LRF - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - Unavailable,outbound & ~drive_lrf_available_outbound,,,,,,,,,,,,,,,-999,,,,,, +DRIVE_LRF outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_LRF_WLK_TOTIVT']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - In-vehicle time on Light Rail (incremental w/ ivt),@df.outbound * (c_ivt_lrt-c_ivt)*odt_skims['DRV_LRF_WLK_KEYIVT']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - In-vehicle time on Ferry (incremental w/ keyivt),@df.outbound * (c_ivt_ferry-c_ivt_lrt)*odt_skims['DRV_LRF_WLK_FERRYIVT']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_LRF_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_LRF_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_LRF_WLK_XWAIT']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - number of transfers,@df.outbound * c_xfers_drv * (odt_skims['DRV_LRF_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_LRF_WLK_DTIM']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - Walk egress time,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_LRF_WLK_WAUX']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_LRF_WLK_FAR'] + costPerMile * odt_skims['DRV_LRF_WLK_DDIST']/100),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_LRF_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - Unavailable,inbound & ~drive_lrf_available_inbound,,,,,,,,,,,,,,,-999,,,,,, +DRIVE_LRF inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_LRF_DRV_TOTIVT']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - In-vehicle time on Light Rail (incremental w/ ivt),@df.inbound * (c_ivt_lrt-c_ivt)*odt_skims['WLK_LRF_DRV_KEYIVT']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - In-vehicle time on Ferry (incremental w/ keyivt),@df.inbound * (c_ivt_ferry-c_ivt_lrt)*odt_skims['WLK_LRF_DRV_FERRYIVT']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_LRF_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_LRF_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_LRF_DRV_XWAIT']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - number of transfers,@df.inbound * c_xfers_drv * (odt_skims['WLK_LRF_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - Drive time,@df.inbound * c_dtim * odt_skims['WLK_LRF_DRV_DTIM']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - Walk other time,@df.inbound * c_waux * odt_skims['WLK_LRF_DRV_WAUX']/100,,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_LRF_DRV_FAR'] + costPerMile * odt_skims['WLK_LRF_DRV_DDIST']/100),,,,,,,,,,,,,,,1,,,,,, +DRIVE_LRF inbound - Ratio of drive access distance to OD distance,@df.inbound * c_dacc_ratio * (odt_skims['WLK_LRF_DRV_DDIST']/100)/ od_skims['DIST'],,,,,,,,,,,,,,,1,,,,,, +#Drive to Express bus,,,,,,,,,,,,,,,,,,,,,, +DRIVE_EXP - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,-999,,,,, +DRIVE_EXP - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,-999,,,,, +DRIVE_EXP - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - Unavailable,outbound & ~drive_express_available_outbound,,,,,,,,,,,,,,,,-999,,,,, +DRIVE_EXP outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_EXP_WLK_TOTIVT']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - In-vehicle time on Express bus (incremental w/ ivt),@df.outbound * (c_ivt_exp-c_ivt) * odt_skims['DRV_EXP_WLK_KEYIVT']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_EXP_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_EXP_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_EXP_WLK_XWAIT']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - number of transfers,@df.outbound * c_xfers_drv * (odt_skims['DRV_EXP_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_EXP_WLK_DTIM']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - Walk egress ime,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_EXP_WLK_WAUX']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_EXP_WLK_FAR'] + costPerMile * odt_skims['DRV_EXP_WLK_DDIST']/100),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_EXP_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - Unavailable,inbound & ~drive_express_available_inbound,,,,,,,,,,,,,,,,-999,,,,, +DRIVE_EXP inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_EXP_DRV_TOTIVT']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - In-vehicle time on Express bus (incremental w/ ivt),@df.inbound * (c_ivt_exp-c_ivt) * odt_skims['WLK_EXP_DRV_KEYIVT']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_EXP_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_EXP_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_EXP_DRV_XWAIT']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - number of transfers,@df.inbound * c_xfers_drv * (odt_skims['WLK_EXP_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - Drive time,@df.inbound * c_dtim * odt_skims['WLK_EXP_DRV_DTIM']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - Walk other time,@df.inbound * c_waux * odt_skims['WLK_EXP_DRV_WAUX']/100,,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_EXP_DRV_FAR'] + costPerMile * odt_skims['WLK_EXP_DRV_DDIST']/100),,,,,,,,,,,,,,,,1,,,,, +DRIVE_EXP inbound - Ratio of drive access distance to OD distance,@df.inbound * c_dacc_ratio * (odt_skims['WLK_EXP_DRV_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,1,,,,, +#Drive to Heavy Rail,,,,,,,,,,,,,,,,,,,,,, +DRIVE_HVY - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,,-999,,,, +DRIVE_HVY - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,,-999,,,, +DRIVE_HVY - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - Unavailable,outbound & ~drive_heavyrail_available_outbound,,,,,,,,,,,,,,,,,-999,,,, +DRIVE_HVY outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_HVY_WLK_TOTIVT']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - In-vehicle time on heavy rail (incremental w/ ivt),@df.outbound * (c_ivt_hvy-c_ivt) * odt_skims['DRV_HVY_WLK_KEYIVT']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_HVY_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_HVY_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_HVY_WLK_XWAIT']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - number of transfers,@df.outbound * c_xfers_drv * (odt_skims['DRV_HVY_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_HVY_WLK_DTIM']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - Walk egress time,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_HVY_WLK_WAUX']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_HVY_WLK_FAR'] + costPerMile * odt_skims['DRV_HVY_WLK_DDIST']/100),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_HVY_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - Unavailable,inbound & ~drive_heavyrail_available_inbound,,,,,,,,,,,,,,,,,-999,,,, +DRIVE_HVY inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_HVY_DRV_TOTIVT']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - In-vehicle time on heavy rail (incremental w/ ivt),@df.inbound * (c_ivt_hvy-c_ivt) * odt_skims['WLK_HVY_DRV_KEYIVT']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_HVY_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_HVY_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_HVY_DRV_XWAIT']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - number of transfers,@df.inbound * c_xfers_drv * (odt_skims['WLK_HVY_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_HVY_WLK_DTIM']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - Walk other time,@c_waux * odt_skims['WLK_HVY_DRV_WAUX']/100,,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_HVY_DRV_FAR'] + costPerMile * odt_skims['WLK_HVY_DRV_DDIST']/100),,,,,,,,,,,,,,,,,1,,,, +DRIVE_HVY inbound - Ratio of drive access distance to OD distance,@df.inbound * c_dacc_ratio * (odt_skims['WLK_HVY_DRV_DDIST']/100)/ od_skims['DIST'],,,,,,,,,,,,,,,,,1,,,, +#Drive to Commuter Rail,,,,,,,,,,,,,,,,,,,,,, +DRIVE_COM - Unavailable for zero auto households,auto_ownership == 0,,,,,,,,,,,,,,,,,,-999,,, +DRIVE_COM - Unavailable for persons less than 16,age < 16,,,,,,,,,,,,,,,,,,-999,,, +DRIVE_COM - Destination zone densityIndex,@c_density_index * df.density_index,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Topology,@c_topology_trn * df.trip_topology,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM - Person is less than 10 years old,@c_age010_trn * (df.age < 10),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - Unavailable,outbound & ~drive_commuter_available_outbound,,,,,,,,,,,,,,,,,,-999,,, +DRIVE_COM outbound - In-vehicle time,@df.outbound * c_ivt * odt_skims['DRV_COM_WLK_TOTIVT']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - In-vehicle time on commuter rail (incremental w/ ivt),@df.outbound * (c_ivt_com-c_ivt) * odt_skims['DRV_COM_WLK_KEYIVT']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - Short iwait time,@df.outbound * c_short_i_wait * (odt_skims['DRV_COM_WLK_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - Long iwait time,@df.outbound * c_long_i_wait * (odt_skims['DRV_COM_WLK_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - transfer wait time,@df.outbound * c_xwait * odt_skims['DRV_COM_WLK_XWAIT']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - number of transfers,@df.outbound * c_xfers_drv * (odt_skims['DRV_COM_WLK_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - Drive time,@df.outbound * c_dtim * odt_skims['DRV_COM_WLK_DTIM']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - Walk egress time,@df.outbound * c_wegr * df.destination_walk_time,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - Walk other time,@df.outbound * c_waux * odt_skims['DRV_COM_WLK_WAUX']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - Fare and operating cost,@df.outbound * df.c_cost * (odt_skims['DRV_COM_WLK_FAR'] + costPerMile * odt_skims['DRV_COM_WLK_DDIST']/100),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM outbound - Ratio of drive access distance to OD distance,@df.outbound * c_dacc_ratio * (odt_skims['DRV_COM_WLK_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - Unavailable,inbound & ~drive_commuter_available_inbound,,,,,,,,,,,,,,,,,,-999,,, +DRIVE_COM inbound - In-vehicle time,@df.inbound * c_ivt * odt_skims['WLK_COM_DRV_TOTIVT']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - In-vehicle time on commuter rail (incremental w/ ivt),@df.inbound * (c_ivt_com-c_ivt) * odt_skims['WLK_COM_DRV_KEYIVT']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - Short iwait time,@df.inbound * c_short_i_wait * (odt_skims['WLK_COM_DRV_IWAIT']/100).clip(upper=waitThresh),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - Long iwait time,@df.inbound * c_long_i_wait * (odt_skims['WLK_COM_DRV_IWAIT']/100-waitThresh).clip(0),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - transfer wait time,@df.inbound * c_xwait * odt_skims['WLK_COM_DRV_XWAIT']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - number of transfers,@df.inbound * c_xfers_drv * (odt_skims['WLK_COM_DRV_BOARDS']-1).clip(0),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - Drive time,@df.inbound * c_dtim * odt_skims['WLK_COM_DRV_DTIM']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - Walk access time,@df.inbound * c_wacc * df.origin_walk_time,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - Walk other time,@df.inbound * c_waux * odt_skims['WLK_COM_DRV_WAUX']/100,,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - Fare and operating cost,@df.inbound * df.c_cost * (odt_skims['WLK_COM_DRV_FAR'] + costPerMile * odt_skims['WLK_COM_DRV_DDIST']/100),,,,,,,,,,,,,,,,,,1,,, +DRIVE_COM inbound - Ratio of drive access distance to OD distance,@df.inbound * c_dacc_ratio * (odt_skims['WLK_COM_DRV_DDIST']/100) / od_skims['DIST'],,,,,,,,,,,,,,,,,,1,,, +#Taxi,,,,,,,,,,,,,,,,,,,,,, +Taxi - In-vehicle time,@c_ivt * odt_skims['HOV2TOLL_TIME'],,,,,,,,,,,,,,,,,,,1,, +Taxi - Wait time,@c_ivt * 1.5 * df.origTaxiWaitTime,,,,,,,,,,,,,,,,,,,1,, +Taxi - Tolls,@df.c_cost * odt_skims['HOV2TOLL_VTOLL'],,,,,,,,,,,,,,,,,,,1,, +Taxi - Bridge toll,@df.c_cost * odt_skims['HOV2TOLL_BTOLL'],,,,,,,,,,,,,,,,,,,1,, +Taxi - Fare,@df.c_cost * (Taxi_baseFare + odt_skims['HOV2TOLL_DIST'] * Taxi_costPerMile + odt_skims['HOV2TOLL_TIME'] * Taxi_costPerMinute)*100,,,,,,,,,,,,,,,,,,,1,, +#TNC Single,,,,,,,,,,,,,,,,,,,,,, +TNC Single - In-vehicle time,@c_ivt * odt_skims['HOV2TOLL_TIME'] ,,,,,,,,,,,,,,,,,,,,1, +TNC Single - Wait time,@c_ivt * 1.5 * df.origSingleTNCWaitTime,,,,,,,,,,,,,,,,,,,,1, +TNC Single - Tolls,@df.c_cost * odt_skims['HOV2TOLL_VTOLL'],,,,,,,,,,,,,,,,,,,,1, +TNC Single - Bridge toll,@df.c_cost * odt_skims['HOV2TOLL_BTOLL'],,,,,,,,,,,,,,,,,,,,1, +TNC Single - Cost,"@df.c_cost * np.maximum(TNC_single_baseFare + odt_skims['HOV2TOLL_DIST'] * TNC_single_costPerMile + odt_skims['HOV2TOLL_TIME'] * TNC_single_costPerMinute, TNC_single_costMinimum) * 100",,,,,,,,,,,,,,,,,,,,1, +#TNC Shared,,,,,,,,,,,,,,,,,,,,,, +TNC Shared - In-vehicle time,@c_ivt * odt_skims['HOV2TOLL_TIME'] * TNC_shared_IVTFactor,,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Wait time,@c_ivt * 1.5 * df.origSharedTNCWaitTime,,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Tolls,@df.c_cost * odt_skims['HOV2TOLL_VTOLL'],,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Bridge toll,@df.c_cost * odt_skims['HOV2TOLL_BTOLL'] ,,,,,,,,,,,,,,,,,,,,,1 +TNC Shared - Cost,"@df.c_cost * np.maximum(TNC_shared_baseFare + odt_skims['HOV2TOLL_DIST'] * TNC_shared_costPerMile + odt_skims['HOV2TOLL_TIME']* TNC_shared_costPerMinute, TNC_shared_costMinimum) * 100",,,,,,,,,,,,,,,,,,,,,1 +#,,,,,,,,,,,,,,,,,,,,,, +Auto tour mode availability,tour_mode_is_auto,,,,,,,,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,,, +Walk tour mode availability,tour_mode_is_walk,-999,-999,-999,-999,-999,-999,,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,,, +Bike tour mode availability,tour_mode_is_bike,-999,-999,-999,-999,-999,-999,,,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,,, +Walk to Transit tour mode availability,tour_mode_is_walk_transit,-999,-999,,,,,,-999,,,,,,-999,-999,-999,-999,-999,,, +Drive to Transit tour modes availability,tour_mode_is_drive_transit,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,,,,,,,, +Ride hail tour modes availability,tour_mode_is_ride_hail,-999,-999,,,,,,-999,,,,,,-999,-999,-999,-999,-999,,, +#indiv tour ASCs,,,,,,,,,,,,,,,,,,,,,, +Drive Alone tour mode ASC -- shared ride 2,@sov_ASC_sr2 * (df.is_indiv & df.i_tour_mode.isin(I_SOV_MODES)),,,1,1,,,,,,,,,,,,,,,,, +Drive Alone tour mode ASC -- shared ride 3+,@sov_ASC_sr3p * (df.is_indiv & df.i_tour_mode.isin(I_SOV_MODES)),,,,,1,1,,,,,,,,,,,,,,, +Drive Alone tour mode ASC -- walk,@sov_ASC_walk * (df.is_indiv & df.i_tour_mode.isin(I_SOV_MODES)),,,,,,,1,,,,,,,,,,,,,, +Drive Alone tour mode ASC -- ride hail,@sov_ASC_rh * (df.is_indiv & df.i_tour_mode.isin(I_SOV_MODES)),,,,,,,,,,,,,,,,,,,1,1,1 +Shared Ride 2 tour mode ASC -- shared ride 2,@sr2_ASC_sr2 * (df.is_indiv & df.i_tour_mode.isin(I_SR2_MODES)),,,1,1,,,,,,,,,,,,,,,,, +Shared Ride 2 tour mode ASC -- shared ride 3+,@sr2_ASC_sr3p * (df.is_indiv & df.i_tour_mode.isin(I_SR2_MODES)),,,,,1,1,,,,,,,,,,,,,,, +Shared Ride 2 tour mode ASC -- walk,@sr2_ASC_walk * (df.is_indiv & df.i_tour_mode.isin(I_SR2_MODES)),,,,,,,1,,,,,,,,,,,,,, +Shared Ride 2 tour mode ASC -- ride hail,@sr2_ASC_rh * (df.is_indiv & df.i_tour_mode.isin(I_SR2_MODES)),,,,,,,,,,,,,,,,,,,1,1,1 +Shared Ride 3+ tour mode ASC -- shared ride 2,@sr3p_ASC_sr2 * (df.is_indiv & df.i_tour_mode.isin(I_SR3P_MODES)),,,1,1,,,,,,,,,,,,,,,,, +Shared Ride 3+ tour mode ASC -- shared ride 3+,@sr3p_ASC_sr3p * (df.is_indiv & df.i_tour_mode.isin(I_SR3P_MODES)),,,,,1,1,,,,,,,,,,,,,,, +Shared Ride 3+ tour mode ASC -- walk,@sr3p_ASC_walk * (df.is_indiv & df.i_tour_mode.isin(I_SR3P_MODES)),,,,,,,1,,,,,,,,,,,,,, +Shared Ride 3+ tour mode ASC -- ride hail,@sr3p_ASC_rh * (df.is_indiv & df.i_tour_mode.isin(I_SR3P_MODES)),,,,,,,,,,,,,,,,,,,1,1,1 +Walk tour mode ASC -- ride hail,@walk_ASC_rh * df.is_indiv * (df.i_tour_mode == I_WALK_MODE),,,,,,,,,,,,,,,,,,,1,1,1 +Bike tour mode ASC -- walk,@bike_ASC_walk * df.is_indiv * (df.i_tour_mode == I_BIKE_MODE),,,,,,,1,,,,,,,,,,,,,, +Bike tour mode ASC -- ride hail,@bike_ASC_rh * df.is_indiv * (df.i_tour_mode == I_BIKE_MODE),,,,,,,,,,,,,,,,,,,1,1,1 +Walk to Transit tour mode ASC -- light rail,@walk_transit_ASC_lightrail * (df.is_indiv & df.tour_mode_is_walk_transit & ~df.walk_ferry_available),,,,,,,,,,1,,,,,,,,,,, +Walk to Transit tour mode ASC -- ferry,@walk_transit_ASC_ferry * (df.is_indiv & df.tour_mode_is_walk_transit & df.walk_ferry_available),,,,,,,,,,1,,,,,,,,,,, +Walk to Transit tour mode ASC -- express bus,@walk_transit_ASC_express * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,,,,,1,,,,,,,,,, +Walk to Transit tour mode ASC -- heavy rail,@walk_transit_ASC_heavyrail * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,,,,,,1,,,,,,,,, +Walk to Transit tour mode ASC -- commuter rail,@walk_transit_ASC_commuter * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,,,,,,,1,,,,,,,, +Walk to Transit tour mode ASC -- shared ride 2,@walk_transit_ASC_sr2 * (df.is_indiv & df.tour_mode_is_walk_transit),,,1,1,,,,,,,,,,,,,,,,, +Walk to Transit tour mode ASC -- shared ride 3+,@walk_transit_ASC_sr3p * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,1,1,,,,,,,,,,,,,,, +Walk to Transit tour mode ASC -- walk,@walk_transit_ASC_walk * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,1,,,,,,,,,,,,,, +Walk to Transit tour mode ASC -- ride hail,@walk_transit_ASC_rh * (df.is_indiv & df.tour_mode_is_walk_transit),,,,,,,,,,,,,,,,,,,1,1,1 +Drive to Transit tour mode ASC -- light rail (higher b/c loc d-trn skims differ),@drive_transit_ASC_lightrail * (df.is_indiv & df.tour_mode_is_drive_transit & ~df.drive_ferry_available),,,,,,,,,,,,,,,1,,,,,, +Drive to Transit tour mode ASC -- ferry,@drive_transit_ASC_ferry * (df.is_indiv & df.tour_mode_is_drive_transit & df.drive_ferry_available),,,,,,,,,,,,,,,1,,,,,, +Drive to Transit tour mode ASC -- express bus,@drive_transit_ASC_express * (df.is_indiv & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,1,,,,, +Drive to Transit tour mode ASC -- heavy rail,@drive_transit_ASC_heavyrail * (df.is_indiv & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,1,,,, +Drive to Transit tour mode ASC -- commuter rail,@drive_transit_ASC_commuter * (df.is_indiv & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,,1,,, +Drive to Transit tour mode ASC -- ride hail,@drive_transit_ASC_rh * (df.is_indiv & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,,,1,1,1 +Ride Hail tour mode ASC -- shared ride 2,@ride_hail_ASC_sr2 * (df.is_indiv & df.tour_mode_is_ride_hail),,,1,1,,,,,,,,,,,,,,,,, +Ride Hail tour mode ASC -- shared ride 3+,@ride_hail_ASC_sr3p * (df.is_indiv & df.tour_mode_is_ride_hail),,,,,1,1,,,,,,,,,,,,,,, +Ride Hail tour mode ASC -- walk,@ride_hail_ASC_walk * (df.is_indiv & df.tour_mode_is_ride_hail),,,,,,,1,,,,,,,,,,,,,, +Ride Hail tour mode ASC -- walk to transit,@ride_hail_ASC_walk_transit * (df.is_indiv & df.tour_mode_is_ride_hail),,,,,,,,,1,1,1,1,1,,,,,,,, +#joint tour ASCs,,,,,,,,,,,,,,,,,,,,,, +joint - auto tour mode ASC -- shared ride 2,@joint_auto_ASC_sr2 * (df.is_joint & df.i_tour_mode.isin(I_AUTO_MODES)),,,1,1,,,,,,,,,,,,,,,,, +joint - auto tour mode ASC -- shared ride 3+,@joint_auto_ASC_sr3p * (df.is_joint & df.i_tour_mode.isin(I_AUTO_MODES)),,,,,1,1,,,,,,,,,,,,,,, +joint - auto tour mode ASC -- walk,@joint_auto_ASC_walk * (df.is_joint & df.i_tour_mode.isin(I_AUTO_MODES)),,,,,,,1,,,,,,,,,,,,,, +joint - auto tour mode ASC -- ride hail,@joint_auto_ASC_rh * (df.is_joint & df.i_tour_mode.isin(I_RIDE_HAIL_MODES)),,,,,,,,,,,,,,,,,,,1,1,1 +joint - Walk tour mode ASC -- ride hail,@joint_walk_ASC_rh * (df.is_joint & df.i_tour_mode.isin(I_RIDE_HAIL_MODES)),,,,,,,1,,,,,,,,,,,,,, +joint - Bike tour mode ASC -- walk,@joint_bike_ASC_walk * df.is_joint * (df.i_tour_mode == I_BIKE_MODE),,,,,,,1,,,,,,,,,,,,,, +joint - Bike tour mode ASC -- ride hail,@joint_bike_ASC_rh * df.is_joint * (df.i_tour_mode == I_BIKE_MODE),,,,,,,,,,,,,,,,,,,1,1,1 +joint - Walk to Transit tour mode ASC -- light rail,@joint_walk_transit_ASC_lightrail * (df.is_joint & df.tour_mode_is_walk_transit & ~df.walk_ferry_available),,,,,,,,,,1,,,,,,,,,,, +joint - Walk to Transit tour mode ASC -- ferry,@joint_walk_transit_ASC_ferry * (df.is_joint & df.tour_mode_is_walk_transit & df.walk_ferry_available),,,,,,,,,,1,,,,,,,,,,, +joint - Walk to Transit tour mode ASC -- express bus,@joint_walk_transit_ASC_express * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,,,,,1,,,,,,,,,, +joint - Walk to Transit tour mode ASC -- heavy rail,@joint_walk_transit_ASC_heavyrail * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,,,,,,1,,,,,,,,, +joint - Walk to Transit tour mode ASC -- commuter rail,@joint_walk_transit_ASC_commuter * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,,,,,,,1,,,,,,,, +joint - Walk to Transit tour mode ASC -- shared ride 2,@joint_walk_transit_ASC_sr2 * (df.is_joint & df.tour_mode_is_walk_transit),,,1,1,,,,,,,,,,,,,,,,, +joint - Walk to Transit tour mode ASC -- shared ride 3+,@joint_walk_transit_ASC_sr3p * (df.is_joint & df.tour_mode_is_walk_transit),,,,,1,1,,,,,,,,,,,,,,, +joint - Walk to Transit tour mode ASC -- walk,@joint_walk_transit_ASC_walk * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,1,,,,,,,,,,,,,, +joint - Walk to Transit tour mode ASC -- ride hail,@joint_walk_transit_ASC_rh * (df.is_joint & df.tour_mode_is_walk_transit),,,,,,,,,,,,,,,,,,,1,1,1 +joint - Drive to Transit tour mode ASC -- light rail (higher b/c loc d-trn skims differ),@joint_drive_transit_ASC_lightrail * (df.is_joint & df.tour_mode_is_drive_transit & ~df.drive_ferry_available),,,,,,,,,,,,,,,1,,,,,, +joint - Drive to Transit tour mode ASC -- ferry,@joint_drive_transit_ASC_ferry * (df.is_joint & df.tour_mode_is_drive_transit & df.drive_ferry_available),,,,,,,,,,,,,,,1,,,,,, +joint - Drive to Transit tour mode ASC -- express bus,@joint_drive_transit_ASC_express * (df.is_joint & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,1,,,,, +joint - Drive to Transit tour mode ASC -- heavy rail,@joint_drive_transit_ASC_heavyrail * (df.is_joint & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,1,,,, +joint - Drive to Transit tour mode ASC -- commuter rail,@joint_drive_transit_ASC_commuter * (df.is_joint & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,,1,,, +joint - Drive to Transit tour mode ASC -- ride hail,@joint_drive_transit_ASC_rh * (df.is_joint & df.tour_mode_is_drive_transit),,,,,,,,,,,,,,,,,,,1,1,1 +joint - Ride Hail tour mode ASC -- shared ride 2,@joint_ride_hail_ASC_sr2 * (df.is_joint & df.tour_mode_is_ride_hail),,,1,1,,,,,,,,,,,,,,,,, +joint - Ride Hail tour mode ASC -- shared ride 3+,@joint_ride_hail_ASC_sr3p * (df.is_joint & df.tour_mode_is_ride_hail),,,,,1,1,,,,,,,,,,,,,,, +joint - Ride Hail tour mode ASC -- walk,@joint_ride_hail_ASC_walk * (df.is_joint & df.tour_mode_is_ride_hail),,,,,,,1,,,,,,,,,,,,,, +joint - Ride Hail tour mode ASC -- walk to transit,@joint_ride_hail_ASC_walk_transit * (df.is_joint & df.tour_mode_is_ride_hail),,,,,,,,,1,1,1,1,1,,,,,,,, +#,,,,,,,,,,,,,,,,,,,,,, +Walk not available for long distances,@df.tour_mode_is_walk & (od_skims['DISTWALK'] > 3),,,,,,,-999,,,,,,,,,,,,,, +Bike not available for long distances,@df.tour_mode_is_walk & (od_skims['DISTBIKE'] > 8),,,,,,,,-999,,,,,,,,,,,,, +Origin density index,@(c_origin_density_index*df.origin_density_index).clip(c_origin_density_index_max) if origin_density_applied else 0,,,,,,,1,1,1,1,1,1,1,,,,,,,, +Walk-express penalty for intermediate stops,@c_walk_express_penalty * ~(df.first_trip | df.first_trip),,,,,,,,,,,1,,,,,,,,,, \ No newline at end of file diff --git a/example/configs/trip_mode_choice.yaml b/example/configs/trip_mode_choice.yaml index 437fb206e..5776b1582 100644 --- a/example/configs/trip_mode_choice.yaml +++ b/example/configs/trip_mode_choice.yaml @@ -49,7 +49,12 @@ NESTS: - DRIVE_EXP - DRIVE_HVY - DRIVE_COM - + - name: MAAS + coefficient: 0.72 + alternatives: + - TAXI + - TNC_SINGLE + - TNC_SHARED CONSTANTS: orig_col_name: origin @@ -89,6 +94,9 @@ CONSTANTS: DRIVE_EXP: 16 DRIVE_HVY: 17 DRIVE_COM: 18 + TAXI: 19 + TNC_SINGLE: 20 + TNC_SHARED: 21 I_SOV_MODES: [1, 2] I_SR2_MODES: [3, 4] I_SR3P_MODES: [5, 6] @@ -97,6 +105,56 @@ CONSTANTS: I_BIKE_MODE: 8 I_WALK_TRANSIT_MODES: [9, 10, 11, 12, 13] I_DRIVE_TRANSIT_MODES: [14, 15, 16, 17, 18] + I_RIDE_HAIL_MODES: [19, 20, 21] + # MAAS Settings + Taxi_baseFare: 2.20 + Taxi_costPerMile: 2.30 + Taxi_costPerMinute: 0.10 + Taxi_waitTime_mean: + 1: 26.5 + 2: 17.3 + 3: 13.3 + 4: 9.5 + 5: 5.5 + Taxi_waitTime_sd: + 1: 6.4 + 2: 6.4 + 3: 6.4 + 4: 6.4 + 5: 6.4 + TNC_single_baseFare: 2.20 + TNC_single_costPerMile: 1.33 + TNC_single_costPerMinute: 0.24 + TNC_single_costMinimum: 7.20 + TNC_single_waitTime_mean: + 1: 10.3 + 2: 8.5 + 3: 8.4 + 4: 6.3 + 5: 4.7 + TNC_single_waitTime_sd: + 1: 4.1 + 2: 4.1 + 3: 4.1 + 4: 4.1 + 5: 4.1 + TNC_shared_baseFare: 2.20 + TNC_shared_costPerMile: 0.53 + TNC_shared_costPerMinute: 0.10 + TNC_shared_costMinimum: 3.00 + TNC_shared_IVTFactor: 1.5 + TNC_shared_waitTime_mean: + 1: 15.0 + 2: 15.0 + 3: 11.0 + 4: 8.0 + 5: 7.0 + TNC_shared_waitTime_sd: + 1: 4.1 + 2: 4.1 + 3: 4.1 + 4: 4.1 + 5: 4.1 # so far, we can use the same spec as for non-joint tours preprocessor: @@ -111,6 +169,7 @@ preprocessor: # TABLES: # - land_use +# to reduce memory needs filter chooser table to these fields TOURS_MERGED_CHOOSER_COLUMNS: - hhsize - age diff --git a/example/configs/trip_mode_choice_annotate_trips_preprocessor.csv b/example/configs/trip_mode_choice_annotate_trips_preprocessor.csv index 9dd796a23..991bdd03b 100644 --- a/example/configs/trip_mode_choice_annotate_trips_preprocessor.csv +++ b/example/configs/trip_mode_choice_annotate_trips_preprocessor.csv @@ -17,6 +17,7 @@ Description,Target,Expression ,tour_mode_is_bike,i_tour_mode == I_BIKE_MODE ,tour_mode_is_walk_transit,i_tour_mode.isin(I_WALK_TRANSIT_MODES) ,tour_mode_is_drive_transit,i_tour_mode.isin(I_DRIVE_TRANSIT_MODES) +,tour_mode_is_ride_hail,i_tour_mode.isin(I_RIDE_HAIL_MODES) #,, ,inbound,~df.outbound ,first_trip,df.trip_num == 1 @@ -43,6 +44,21 @@ dest terminal time not counted at home,_dest_terminal_time,"np.where(inbound & l ,drive_transit_available,"np.where(df.outbound, _walk_transit_destination, _walk_transit_origin) & (df.auto_ownership > 0)" ,origin_walk_time,shortWalk*60/walkSpeed ,destination_walk_time,shortWalk*60/walkSpeed +# MAAS,, +,origin_density_measure,"(reindex(land_use.TOTPOP, df[orig_col_name]) + reindex(land_use.TOTEMP, df[orig_col_name])) / (reindex(land_use.TOTACRE, df[orig_col_name]) / 640)" +,origin_density,"pd.cut(origin_density_measure, bins=[-np.inf, 500, 2000, 5000, 15000, np.inf], labels=[1, 2, 3, 4, 5]).astype(int)" +,origin_zone_taxi_wait_time_mean,"origin_density.map({k: v for k, v in Taxi_waitTime_mean.items()})" +,origin_zone_taxi_wait_time_sd,"origin_density.map({k: v for k, v in Taxi_waitTime_sd.items()})" +#,origTaxiWaitTime,"rng.lognormal_for_df(df, mu=origin_zone_taxi_wait_time_mean, sigma=origin_zone_taxi_wait_time_sd)" +,origTaxiWaitTime,5 +,origin_zone_singleTNC_wait_time_mean,"origin_density.map({k: v for k, v in TNC_single_waitTime_mean.items()})" +,origin_zone_singleTNC_wait_time_sd,"origin_density.map({k: v for k, v in TNC_single_waitTime_sd.items()})" +#,origSingleTNCWaitTime,"rng.lognormal_for_df(df, mu=origin_zone_singleTNC_wait_time_mean, sigma=origin_zone_singleTNC_wait_time_sd)" +,origSingleTNCWaitTime,5 +,origin_zone_sharedTNC_wait_time_mean,"origin_density.map({k: v for k, v in TNC_shared_waitTime_mean.items()})" +,origin_zone_sharedTNC_wait_time_sd,"origin_density.map({k: v for k, v in TNC_shared_waitTime_sd.items()})" +#,origSharedTNCWaitTime,"rng.lognormal_for_df(df, mu=origin_zone_sharedTNC_wait_time_mean, sigma=origin_zone_sharedTNC_wait_time_sd)" +,origSharedTNCWaitTime,5 #,, ,sov_available,odt_skims['SOV_TIME']>0 ,hov2_available,odt_skims['HOV2_TIME']>0 diff --git a/example/configs/trip_mode_choice_coeffs.csv b/example/configs/trip_mode_choice_coeffs.csv index 734a01cdd..c3c05a819 100644 --- a/example/configs/trip_mode_choice_coeffs.csv +++ b/example/configs/trip_mode_choice_coeffs.csv @@ -38,13 +38,18 @@ c_hhsize2_sr,0,0,0,0,0,0,0,0,0,0 sov_ASC_sr2,-999,-999,-999,0,-999,-999,-999,-999,-999,-999 sov_ASC_sr3p,-999,-999,-999,0,-999,-999,-999,-999,-999,-999 sov_ASC_walk,-0.8398,-1.0579,-71.8977,0,-1.4766,-1.3443,-1.2993,-1.8077,-1.5507,-1.7875 +sov_ASC_rh,-7.0000,-6.6490,-5.6549,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,-7.0000 sr2_ASC_sr2,0.0149,0.4304,-1.9335,0.3533,1.3765,0.9971,0.8574,0.5663,0.7478,2.2815 sr2_ASC_sr3p,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999 sr2_ASC_walk,0.126,1.3041,-1.0362,-2.0528,-0.1117,-0.0729,-0.5989,-0.7932,-0.0268,1.1789 +sr2_ASC_rh,-7.0000,-6.6897,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000 sr3p_ASC_sr2,-1.1956,-0.3117,-2.7407,-0.2682,-0.0781,-0.3178,-0.2958,-0.1556,-0.6142,1.0387 sr3p_ASC_sr3p,-0.1836,0.6293,-1.7718,0.7358,1.3395,1.3323,0.9527,0.8331,0.7398,2.4128 sr3p_ASC_walk,0.2171,1.6793,-1.2127,-1.0075,-0.5079,-0.0434,0.0422,-0.3134,-0.5272,0.8102 +sr3p_ASC_rh,-71.9177,-7.0000,-6.6714,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-6.0260 +walk_ASC_rh,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000 bike_ASC_walk,-1.8333,-0.3399,-2.0332,-13.5203,-1.0245,-2.699,-0.5706,-13.2384,-1.3577,-5.0532 +bike_ASC_rh,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000 walk_transit_ASC_lightrail,0.4621,1.4436,1.4436,0.5252,0.5392,0.5392,0.5392,0.5392,0.5392,0.5392 walk_transit_ASC_ferry,0.5277,1.7237,1.7237,0.6005,0.6466,0.6466,0.6466,0.6466,0.6466,0.6466 walk_transit_ASC_express,-0.3554,0.3224,0.3224,0.7547,0.6648,0.6648,0.6648,0.6648,0.6648,0.6648 @@ -53,16 +58,25 @@ walk_transit_ASC_commuter,0.4012,0.9082,0.9082,0.5442,0.5129,0.5129,0.5129,0.512 walk_transit_ASC_sr2,-3.6631,-4.005,-4.2961,-2.6284,-4.0115,-3.1434,-34.6746,-3.3663,-2.759,-22.6587 walk_transit_ASC_sr3p,-4.1314,-28.6972,-3.8665,-3.2074,-4.3852,-3.852,-29.3858,-21.6309,-2.5126,-35.958 walk_transit_ASC_walk,0.4432,-1.0311,-1.1828,-0.9974,-0.1943,1.3504,0.7248,-0.7651,-0.4997,0.5165 +walk_transit_ASC_rh,-3.7408,-4.2691,-7.0000,-3.1136,-3.1136,-4.7508,-3.1136,-4.7508,-4.7508,-3.8506 drive_transit_ASC_lightrail,0.4621,1.4436,1.4436,0.5252,0.5392,0.5392,0.5392,0.5392,0.5392,0.5392 drive_transit_ASC_ferry,0.5277,1.7237,1.7237,0.6005,0.6466,0.6466,0.6466,0.6466,0.6466,0.6466 drive_transit_ASC_express,-0.3554,0.3224,0.3224,0.7547,0.6648,0.6648,0.6648,0.6648,0.6648,0.6648 drive_transit_ASC_heavyrail,0.3538,0.849,0.849,0.5673,0.5403,0.5403,0.5403,0.5403,0.5403,0.5403 drive_transit_ASC_commuter,0.4012,0.9082,0.9082,0.5442,0.5129,0.5129,0.5129,0.5129,0.5129,0.5129 +drive_transit_ASC_rh,0.6674,-0.6328,-0.1272,0.6870,0.6870,3.5701,0.6870,3.5701,3.5701,-6.9520 +ride_hail_ASC_sr2,-3.9085,-2.5785,-3.0613,-3.3353,-3.3353,-3.3010,-3.3353,-3.3010,-3.3010,-4.2636 +ride_hail_ASC_sr3p,-10.8661,-3.1888,-4.0886,-7.0000,-7.0000,-4.0649,-7.0000,-4.0649,-4.0649,-7.0000 +ride_hail_ASC_walk,1.4970,-10.8471,-1.2386,-7.0000,-7.0000,-1.3318,-7.0000,-1.3318,-1.3318,-1.6755 +ride_hail_ASC_walk_transit,-10.8661,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000 #joint tour ASCs,,,,,,,,,, joint_auto_ASC_sr2,0,0,0,0,0.5875,-0.0634,-0.0634,-0.0634,-0.0634,0 joint_auto_ASC_sr3p,0,0,0,0,-19.0454,-0.1625,-0.1625,-0.1625,-0.1625,0 joint_auto_ASC_walk,0,0,0,0,-23.4688,-0.7144,-0.7144,-0.7144,-0.7144,0 +joint_auto_ASC_rh,0,0,0,0,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,0 +joint_walk_ASC_rh,0,0,0,0,-3.0362,-3.0362,-3.0362,-3.0362,-3.0362,0 joint_bike_ASC_walk,0,0,0,0,-7.0476,-15.5588,-13.5192,-26.1714,-14.444,0 +joint_bike_ASC_rh,0,0,0,0,-12.3057,-12.3057,-12.3057,-12.3057,-12.3057,0 joint_walk_transit_ASC_lightrail,0,0,0,0,0.5392,0.5392,0.5392,0.5392,0.5392,0 joint_walk_transit_ASC_ferry,0,0,0,0,0.6466,0.6466,0.6466,0.6466,0.6466,0 joint_walk_transit_ASC_express,0,0,0,0,0.6648,0.6648,0.6648,0.6648,0.6648,0 @@ -71,10 +85,16 @@ joint_walk_transit_ASC_commuter,0,0,0,0,0.5129,0.5129,0.5129,0.5129,0.5129,0 joint_walk_transit_ASC_sr2,0,0,0,0,-21.5768,-14.9134,-5.323,-20.5022,-14.9801,0 joint_walk_transit_ASC_sr3p,0,0,0,0,-25.5953,-16.7587,-3.9563,-34.7378,-16.7354,0 joint_walk_transit_ASC_walk,0,0,0,0,-0.5472,2.3017,1.1876,-2.1301,-0.0024,0 +joint_walk_transit_ASC_rh,0,0,0,0,1.2266,1.2266,1.2266,1.2266,1.2266,0 joint_drive_transit_ASC_lightrail,0,0,0,0,0.5392,0.5392,0.5392,0.5392,0.5392,0 joint_drive_transit_ASC_ferry,0,0,0,0,0.6466,0.6466,0.6466,0.6466,0.6466,0 joint_drive_transit_ASC_express,0,0,0,0,0.6648,0.6648,0.6648,0.6648,0.6648,0 joint_drive_transit_ASC_heavyrail,0,0,0,0,0.5403,0.5403,0.5403,0.5403,0.5403,0 joint_drive_transit_ASC_commuter,0,0,0,0,0.5129,0.5129,0.5129,0.5129,0.5129,0 +joint_drive_transit_ASC_rh,0,0,0,0,4.6138,4.6138,4.6138,4.6138,4.6138,0 +joint_ride_hail_ASC_sr2,0,0,0,0,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,0 +joint_ride_hail_ASC_sr3p,0,0,0,0,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,0 +joint_ride_hail_ASC_walk,0,0,0,0,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,0 +joint_ride_hail_ASC_walk_transit,0,0,0,0,-7.0000,-7.0000,-7.0000,-7.0000,-7.0000,0 #,,,,,,,,,, c_walk_express_penalty,10.00 * c_ivt,10.00 * c_ivt,10.00 * c_ivt,10.00 * c_ivt,10.00 * c_ivt,10.00 * c_ivt,10.00 * c_ivt,10.00 * c_ivt,10.00 * c_ivt,10.00 * c_ivt