Skip to content

Initial ActivitySim Instructions

Alex Bettinardi edited this page Nov 6, 2024 · 35 revisions

Readme

These are working instructions that ODOT has developed to start to communicate that ActivitySim inputs that exist for the "BAYDAG" version of ActivitySim. It's important to remember that Oregon's final ABM setup, won't have this exact set of inputs or instructions. Oregon's ABM estimation will start with BAYDAG but will be revised. The instructions will allow the OMSC members to discuss what they do and do not like about the BAYDAG setup and make changes specific to how the OMSC would like Oregon's ABM platform implemented.

The following lays out the input develop into tables:

Household Inputs

Column Name (SANDAG) Description (SANDAG) Oregon Notes (BRM)
hhid Unique Household ID unique household id from PopSim
household_serial_no Household serial number Not sure if needed, if needed - develop a unique number
taz TAZ of household TAZ that the household falls in
mgra MGRA of household “SANDAG Master-Geographic Reference Area (MGRA). The SANDAG current MGRA system consists of 32,000 zones, which are roughly equivalent to Census block groups (see Figure T.2). To avoid computational burden, SANDAG relies on a 4,600 Transportation Analysis Zone (TAZ) system for highway skims and assignment, but performs transit calculations at the more detailed “ Ref: appendix-t-SANDAG-travel-demand-model-documentation.pdf -mgra is more granular MAZ that the household falls in
hinccat1 Household income category:
  • 1 = <$30k
  • 2 = $30-60k
  • 3 = $60-100k
  • 4 = $100-150k
  • 5 = $150k+
Categorize “hinc” which is originally from “hhincadj” of synthetic households.csv (binning a continuous variable from PUMS / PopSim
hinc Household income “hhincadj” from PopSim
hworkers Number of workers in household “nwrkrs_esr” from PopSim
veh Number of vehicles in household “veh” from PopSim
persons Number of persons in household “np” from PopSim
hht Household/family type:
  • 0 = Not in universe (vacant or GQ)
  • 1 = Family household: married-couple
  • 2 = Family household: male householder, no wife present
  • 3 = Family household: female householder, no husband present
  • 4 = Nonfamily household: male householder, living alone
  • 5 = Nonfamily household: male householder, not living alone
  • 6 = Nonfamily household: female householder, living alone
  • 7 = Nonfamily household: female householder, not living alone.
“hht” of from PopSim, with the extra note that hht=-8 is replaced by 0 to match with SANDAG “hht” category.
bldgsz Building size - Number of Units in Structure & Quality:
  • 1 = Mobile home or trailer
  • 2 = One-family house detached
  • 3 = One-family house attached
  • 8 = 20-49 Apartments
  • 9 = 50 or more apartments
“bld” from PopSim. Only bld =-8 is replaced by 0 to match with SANDAG “bld” category.
unittype Household unit type: 0 = Non-GQ Household 1 = GQ Household “gqflag” from PopSim
version Synthetic population run version. Presently set to 0. Presently set to 0
poverty Poverty indicator utilized for social equity reports. Percentage value where value <= 2 (200% of the Federal Poverty Level) indicates household is classified under poverty. Poverty=Income / Threshold Income=hinc Threshold will be based on following table - "2024 POVERTY GUIDELINES FOR THE 48 CONTIGUOUS STATES AND THE DISTRICT OF COLUMBIA" from this link

Person Inputs

Column Name (SANDAG) Description (SANDAG) Oregon Notes (BRM)
hhid Household ID unique household id from PopSim
perid Person ID unique person id within each household from PopSim obtained from PUMS seed
Household_serial_no Household serial number Not sure if needed, if needed - develop a unique number
pnum Person Number “sporder” from PopSim obtained from PUMS seed
age Age of Person "agep" of from PopSim obtained from PUMS seed
sex Gender of person; 1) Male, 2) Female "sex" from PopSim obtained from PUMS seed
miltary TBD TBD
pemploy Employment status of person:
  • 1 = Employed Full-Time
  • 2 = Employed Part-Time
  • 3 = Unemployed or Not in Labor Force
  • 4 = Less than 16 Years Old
Using fields; agep, esr, wkhp, wkw.
  • Full time = 16+ or coded as a worker under esr (1,2,4,5) and 35 more hours per week.
  • Part-time = coded as a worker under esr (1,2,4,5) or weeks worked in a year (wkw) 26 or less (5,6).
  • Unemployed = coded as a not in the workforce under esr (3,6).
  • Under 16 = remainder
pstudent Student status of person:
  • 1 = Pre K-12
  • 2 = College Undergrad+Grad and Prof. School
  • 3 = Not Attending School
Using field schg where schg 1-5 is k-12 and 6 & 7 is college.
ptype Person Type:
  • 1 = Full-Time Worker, where work status if full-time, age is 18+ and no schooling
  • 2 = Part-Time Worker, where work status if part-time, age is 18+ and no schooling
  • 3 = College Student, where work status is Any, age is 18+ and college+
  • 4 = Non-Working Adult, where work status is unemployed, age is 18-64 and no schooling
  • 5 = Non-Working Senior, where work status is unemployed, age is 65+ and no schooling
  • 6 = Driving Age Student, where work status is Any, age is 16-17 and they are pre-college
  • 7 = Non-Driving Student, where work status is None, age is 6-16 and they are pre-college
  • 8 = Pre-school, where work status is None, age is 0-5 and no schooling
Using fields; agep, pemploy, pstudent.
  • Full-Time Worker is 18+ and pemploy = 1
  • Part-Time Worker is 18+ and pemploy = 2
  • College Student is 18+ and pstudent = 1
  • Non-Working Adult is 18-64 and pemploy = 3
  • Non-Working Senior is 65+ and pemploy = 3
  • Driving Age Student is 16-17 years old
  • Non-Driving Age Student is 6-15 years old
  • Pre-school is 5 years old or younger
educ Educational attainment:
  • 1 = No schooling completed
  • 9 = High school graduate
  • 13 = Bacehlor's degree
Using field schl where schl 1-8 is "No schooling completed", 9-12 is "High school graduate", and higher values are "Bachelor's degree".
grade School grade of person:
  • 0 = N/A (not attending school)
  • 2 = K to grade 8
  • 5 = Grade 9 to grade 12
  • 6 = College undergraduate
Using field schg where schg 1-4 is K to grade 8, 5 is Grade 9-12, and higher values are "College undergraduate", (N/A is 0)
occen5 Occupation:
  • 0 = Not in universe (Under 16 years or LAST-WRK = 2)
  • 1..997 = Legal census occupation code
TBD
occsoc5 Detailed occupation codes defined by the Standard Occupational Classification (SOC) system built on the SOCP from PUMS and PopSim
indcen Industry code defined in PECAS: They are about 270 industry categories grouped by 6-digit NAICS code (North American Industrial Classification System) TBD
weeks Weeks worked in 2010:
  • 1 = 50 to 52 weeks
  • 5 = 14 to 26 weeks
Using field wkw, the only change from PopSim processing is that -8 is changed to 0
hours Hours worked in 2010:
  • 0 = Not in universe(Under 16 years)
  • 1..99 = 1 to 99 hours worked per week
Using field wkhp, the only change from PopSim processing is that -8 is changed to 0
rac1p Race of person:
  • 1 = White Alone
  • 2 = Black or African American Alone
  • 5 = American Indian and Alaska Native Tribes specified; or American Indian or Alaska Native, not specified and no other races
  • 6 = Asian Alone
  • 7 = Native Hawaiian and Other Pacific Islander Alone
  • 8 = Some Other Race Alone
  • 9 = Two or More Major Race Groups
Uses RACE1P from PUMS and PopSim
hisp Hispanic flag: Non-Hispanic (0) Hispanic (1) Uses HISP from PUMS and PopSim
version Synthetic population run version. Presently set to 0.
naics2_original_code TBD TBD
soc2 TBD TBD

MAZ or Zone Inputs

Column Name (SANDAG) Description (SANDAG) Oregon Notes (BRM)
MAZ MAZ Number MAZ number
taz TAZ Number TAZ number
hs housing structures This may include all structures (including vacant). All modeling inventory so far is just occupied households. At this time ODOT has only populated with total occupied households.
hs_sf single family structures tabulated from household table bld == 2
hs_mf multi family structures tabulated from household table bld > 2
hs_mh mobile homes tabulated from household table bld == 1
hh total number of households currently same as hs above
hh_sf number of households - single family currently same as hs_sf
hh_mf number of households - multi family currently same as hs_mf
hh_mh number of mobile homes currently same as hs_mh
gq_civ GQ civilian Total MAZ tabulated population minus household (non-GQ) population
gq_mil GQ military currently coded as zero as we haven't been populating military populations for Oregon models
i1 Number of households with income less than $15,000 ($2010) tabulated from the hhincadj field in households.csv
i2 Number of households with income $15,000-$29,999 ($2010) tabulated from the hhincadj field in households.csv
i3 Number of households with income $30,000-$44,999 ($2010) tabulated from the hhincadj field in households.csv
i4 Number of households with income $45,000-$59,999 ($2010) tabulated from the hhincadj field in households.csv
i5 Number of households with income $60,000-$74,999 ($2010) tabulated from the hhincadj field in households.csv
i6 Number of households with income $75,000-$99,999 ($2010) tabulated from the hhincadj field in households.csv
i7 Number of households with income $100,000-$124,999 ($2010) tabulated from the hhincadj field in households.csv
i8 Number of households with income $125,000-$149,999 ($2010) tabulated from the hhincadj field in households.csv
i9 Number of households with income $150,000-$199,999 ($2010) tabulated from the hhincadj field in households.csv
i10 Number of households with income $200,000 or more ($2010) tabulated from the hhincadj field in households.csv
hhs household size hhs=total population/ total number of households (hh)
pop total population tabulated from household/person inputs
hhp total household population (exclude gq pop) tabulated from household/person inputs
emp_gov Government? EMP_PUBADM - Public Administration employment (NAICS 92) & EMP_POSTAL - Postal Service employment (NAICS 49)
emp_mil Miltary? populate with zero
emp_ag_min Agriculture and Mining EMP_AGR - Agriculture, Forestry, Fishing and Hunting employment (NAICS 11) & EMP_MIN - Mining, Quarrying, and Oil and Gas Extraction employment (NAICS 21)
emp_bus_svcs ? EMP_PROF - Professional, Scientific, and Technical Services employment (NAICS 54) & EMP_ADMIN - Administrative and Support and Waste Management employment (NAICS 56)
emp_fin_res_mgm Finance, Real Estate, and Management EMP_FINANC - Finance and Insurance employment (NAICS 52) & EMP_REALES - Real Estate and Rental and Leasing employment (NAICS 53) & EMP_MGMT - Management of Companies and Enterprises employment (NAICS 55)
emp_educ Education EMP_EDUC - Educational Services employment (NAICS 61)
emp_hlth Health EMP_HEALTH - Health Care and Social Assistance employment (NAICS 62)
emp_ret Retail EMP_RETAIL - Retail Trade employment (NAICS 44) & EMP_SPORT - Sporting Goods, Hobby, Musical Instruments and Book stores employment (NAICS 45)
emp_trn_wrh Transport & Warehouse? EMP_TRANS - Transportation employment (NAICS 48)
emp_con Construction EMP_CONSTR - Construction employment (NAICS 23)
emp_utl Utilities EMP_UTIL - Utilities employment (NAICS 22)
emp_mnf Manufacturing EMP_WOOD - Wood Product Manufacturing employment (NAICS 32) & EMP_METAL - Primary Metal Manufacturing employment (NAICS 33)
emp_whl Wholesale EMP_WHOLE - Wholesale Trade employment (NAICS 42)
emp_ent Entertainment? EMP_ARTS - Arts, Entertainment, and Recreation employment (NAICS 71)
emp_accm Accommodation EMP_ACCFD - Accommodation and Food Services employment (NAICS 72)
emp_food Food Manufacturing? EMP_FOOD - Food Manufacturing employment (NAICS 31)
emp_oth Other? EMP_OTHER - Other Services (except Public Administration) Religious employment (NAICS 81) & EMP_INFO - Information employment (NAICS 51)
emp_non_ws_wfh guessing these are not captured within insured employment - work from home populate with zero
emp_non_ws_oth guessing these are not captured within insured employment - other populate with zero
emp_total Total employment Total of all Employment
enrollgradekto8 Grade School K-8 enrollment “ENROLLK_8” from CT-RAMP MAZ inputs
enrollgrade9to12 Grade School 9-12 enrollment “ENROLL9_12” from CT-RAMP MAZ inputs
collegeenroll Major College enrollment “ENROLLCOLL” from CT-RAMP MAZ inputs, Major College enrollment (example SOU, attracts younger students)
majorcollege_pt_Undergrad, majorcollege_ft_Undergrad, majorcollege_All_Undergrad, major_All_Graduate not well documented, nor clear that these are needed All undergrad and all graduate should sum to college enroll. Part-time and Full-time undergrad should sum to All Undergrad
othercollegeenroll Other College enrollment "ENROLLCOOT" from CT-RAMP MAZ inputs, Other College enrollment (Community College, attracts older students)
othercollege_pt_Undergrad, othercollege_ft_Undergrad, othercollege_All_Undergrad, other_All_Graduate not well documented, nor clear that these are needed All undergrad and all graduate should sum to other college enroll. Part-time and Full-time undergrad should sum to All Undergrad
adultschenrl Adult School enrollment "ENROLLADSC" from CT-RAMP MAZ inputs, Adult School enrollment (Trade School, attracts older students)
ech_dist Elementary school district "ECH_DIST" from CT-RAMP inputs, Elementary school district. Used to constrain school location choice for K-8 students. Must have at least 1 MAZ with K-8 enrollment in each district. Numbers do not need to be sequential.
hch_dist High school district "HCH_DIST" from CT-RAMP MAZ inputs, High school district. Used to constrain school location choice for 9-12 students. Must have at least 1 MAZ with 9-12 enrollment in each district. Numbers do not need to be sequential.
pseudomsa Pseudo MSA -1: Downtown2: Central3: North City4: South Suburban5: East Suburban6: North County West7: North County East8: East County DISTID (District ID) from CT-RAMP MAZ inputs
parking_type Category determining functionality of parking models –parkarea field codes1: Trips with destinations in this MGRA may choose to park in a different MGRA, parking charges apply (downtown)2: Trips with destinations in parkarea 1 may choose to park in this MGRA, parking charges might apply (quarter mile buffer around downtown) 3: Only trips with destinations in this MGRA may park here, parking charges apply (outside downtown paid parking, only show cost no capacity issue) 4: Only trips with destinations in this MGRA may park here, parking charges do not apply (outside downtown, free parking) PARKAREA from CT-RAMP MAZ inputs, which follows the same definition
parking_spaces not documented number of parking spaces - can approximate - suggest using the sum of the stalls fields below
hstallsoth Number of stalls allowing hourly parking for trips with destinations in other MGRAs from CT-RAMP - Number of stalls allowing hourly parking for trips with destinations in other MAZs. Note that number of stalls is used to calculate an average distance-weighted parking cost for each MAZ in mode choice, since the actual parking location is unknown when the choice of mode is made. Lots with more spaces will affect the weighted parking cost more than a lot with few spaces.
hstallssam Number of stalls allowing hourly parking for trips with destinations in the same MGRA from CT-RAMP - Number of stalls allowing hourly parking for trips with destinations in the same MAZ
hparkcost Average cost of parking for one hour in hourly stalls in this MGRA, dollars from CT-RAMP - Average cost of parking for one hour in hourly stalls in this MAZ, $2010 dollars
numfreehrs Number of hours of free parking allowed before parking charges begin in hourly stalls from CT-RAMP - Number of hours of free parking allowed before parking charges begin in hourly stalls. A 0 indicates that parking charges begin immediately (most common).
dstallsoth Stalls allowing daily parking for trips with destinations in other MGRAs from CT-RAMP - Stalls allowing daily parking for trips with destinations in other MAZs.
dstallssam Stalls allowing daily parking for trips with destinations in the same MGRA from CT-RAMP - Stalls allowing daily parking for trips with destinations in the same MAZ
dparkcost Average cost of parking for one day in daily stalls, dollars from CT-RAMP - Average cost of parking for one day in daily stalls, $2010 dollars
mstallsoth Stalls allowing monthly parking for trips with destinations in other MGRAs from CT-RAMP - Stalls allowing monthly parking for trips with destinations in other MAZs
mstallssam Stalls allowing monthly parking for trips with destinations in the same MGRA from CT-RAMP - Stalls allowing monthly parking for trips with destinations in the same MAZ
mparkcost Average cost of parking for one day in monthly stalls, amortized over 22 workdays, dollars from CT-RAMP - Average cost of parking for one day in monthly stalls, amortized over 22 workdays, $2010 dollars.
zip09 2009 Zip Code zip code that the MAZ centroid falls in
parkactive Acres of Active Park PARKACRES from CT-RAMP MAZ inputs, Park acres (active acres of park).
openspaceparkpreserve Acres of Open Park or Preserve ideally this would be split out from PARKACRES above. Currently, Park Acres includes all rec space. But the BAYDAG example seems to break out park space, versus open space which would be good to capture if possible. A quick way to test, might be to assume 40/60 or 30/70 or some percentage to move some of the PARKACRES into open space, or maybe known open space zones are shifted over by hand.
beachactive Acres of Active Beach the example dataset has zero - Oregon models should default with 0
budgetroom Number of budget hotel rooms doesn't seem to be required for testing - populating with zero seems to be an option
economyroom Number of economy hotel rooms doesn't seem to be required for testing - populating with zero seems to be an option
luxuryroom Number of luxury hotel rooms doesn't seem to be required for testing - populating with zero seems to be an option
midpriceroom Number of midprice rooms doesn't seem to be required for testing - populating with zero seems to be an option
upscaleroom Number of upscale rooms doesn't seem to be required for testing - populating with zero seems to be an option
hotelroomtotal Total number of hotel rooms HOTELRMTOT from CT-RAMP MAZ inputs, but note that we haven't been populating this very well in CT-RAMP models
luzid looks to be a larger land use zone ID  I would consider this as a census tract or similar numeric code (keep the numbers integers - not names (long)
truckregiontype no good documentation  example data is either 1 or 0. Just set as all 1.
district27 no good documentation  Values seem to max out at 27. Values seem to be largely 8, 15, 27. Maybe try and get the model running by setting all values to 27.
milestocoast Distance (miles) to the nearest coast Mile to coast: how zone is close to the beach. We are uniformly far away from beach. We just put 20 mile form coast. If we put too much like 100, it may blow up the utility.
acres Total acres in the mgra (used in CTM) Total Acres in the zone.
effective_acres Effective acres in the mgra (used in CTM) Total Acres minus any acres that can't be used for development.
land_acres Acres of land in the mgra (used in CTM) Total Acres minus water or anything that wouldn't count as land.
MicroAccessTime Micro-mobility access time (mins) typlically 5 or 10. Recommend setting all to 10. If fully not available, set at 1200.
remoteAVParking Remote AV parking available at MGRA:0 = Not available1 = Available choose a zone which is close to PARK and Ride set as 1, everything else set to zero.
refueling_stations Number of refueling stations at MGRA approximate some gas station zones (count of gas stations in each MAZ
totInt Total intersections taken from pre-processor output from CT-RAMP ABM runs
duden Dwelling unit density taken from pre-processor output from CT-RAMP ABM runs
empden Employment density taken from pre-processor output from CT-RAMP ABM runs
popden Population density taken from pre-processor output from CT-RAMP ABM runs
retempden Retail employment density taken from pre-processor output from CT-RAMP ABM runs
totintbin Total intersection bin Total intersection 0 = 0; 1-79 = 1; 80-129 = 2; >130 = 3
empdenbin Employment density bin empden 0 = 0; 0.1-10 = 1; 10-30 = 2; >30 = 3
dudenbin Dwelling unit density bin duden 0 = 0; 0.1-5 = 1; 5-10 = 2; >10 = 3
PopEmpDenPerMi Population and employment density per mile PopEmpDenPerMi is a floating calculation of population plus employment divided by miles and calculated on a ‘floating’ basis for all MAZs within 0.5 miles of the MAZ. It is calculated in a script (run4d) as: (totEmp+totPop)/(totAcres/640. (Empden+ popden)*640= PopEmpDenPerMi
poe_id not documented An external station flag; all internal zones left blank, all external = -1
external_work; external_nonwork not documented Can be approximated by the number of trips entering at each external station. User can approximate the percentage of trips that are work related or non. Suggest having the two values sum to the total daily vehicle demand at the external station. Internal zones get a 0 value
external_TAZ; external_MAZ not documented All internals are blank, external zones have a value of 1.
walk_dist_local_bus not documented suggest using MAZ centriods and GTFS stop points to find the distance
walk_dist_premium_transit not documented suggest using MAZ centriods and GTFS stop points to find the distance
ML_DIST not documented ML_DIST is the distance on managed lanes from the MAZ to the nearest of several key MAZs in San Diego. It was used in the initial transponder ownership model but it is not used in the current one and can be dropped from the Oregon implementations. For Oregon populate this zone input with zeros.
AVGTTS not documented one of the input of Temporary Static Transponder Model Input
PCTDETOUR not documented This appears to be the percentage of travel at the external station that's coming from a detour. Assume zero for all zones.
terminal_time not documented Recommended to assume a value of 1 for all zones.
mgra not documented same as the MAZ - not sure if this needs to be sequential - doesn't seem to need to be sequential.
exp_hourly; exp_daily; exp_monthly not documented "exp" stands for "expected parking costs". These are distance and quantity averaged-parking for each zone. In the case of Oregon, these values should match the cost parking cost; hparkcost; dparkcost; mparkcost.

Skims

The BAYDAG model has ~1800 skims currently which are summarized as follows. All of the skims are repeated for 5 time periods and will therefore not be repeated here. Each time period has 352 skims (352 x 5 = 1760). The 360 are summarized as follows:

  • 30 SOV matrices = 5 skim types (Distance, Reliability, Time, Toll Cost, Distance w/Tolls) x 3 Income VOT sensitivity (High, Medium, Low) x 2 Yes/No Toll Transponder
  • 36 HOV matrices = 6 skim types (Distance, Reliability, Time, Toll Cost, Distance w/Tolls, Distance w/ HOV lanes) x 3 Income VOT sensitivity (High, Medium, Low) x 2 Yes/No Toll Transponder
  • 9 Truck Matrices = 3 skim types (Distance, Time, Toll Cost) x 3 Income VOT sensitivity (High, Medium, Low)
  • 4 Active Matrices = Bike Logsum, Bike Time, Bike Distance, Walk Time
  • 39 Transit Matrices = 3 vehicle types (Bus, Mix, Premium ~Light Rail) x 14 skim types (Fare, Access, Egress, First Wait Time, Dwell Time, Number of Transfers, Bus In-Vehicle Travel Time (IVTT), Total IVTT, Transfer Wait Time, Transfer Walk Time, Total Walk Time ), where (3 skim types don't apply to Bus, LR IVTT, Exp IVTT, CMR IVTT)) (( 3x14 ) - 3)
  • 78 Park and Ride Matrices = 3 vehicle types (Bus, Mix, Premium ~Light Rail) x 2 directions of travel (inbound / outbound) x 14 skim types (Fare, Access, Egress, First Wait Time, Dwell Time, Number of Transfers, Bus In-Vehicle Travel Time (IVTT), Total IVTT, Transfer Wait Time, Transfer Walk Time, Total Walk Time ), where (3 skim types don't apply to Bus, LR IVTT, Exp IVTT, CMR IVTT)) (( 3x14 ) - 3)
  • 78 Kiss and Ride Matrices = 3 vehicle types (Bus, Mix, Premium ~Light Rail) x 2 directions of travel (inbound / outbound) x 14 skim types (Fare, Access, Egress, First Wait Time, Dwell Time, Number of Transfers, Bus In-Vehicle Travel Time (IVTT), Total IVTT, Transfer Wait Time, Transfer Walk Time, Total Walk Time ), where (3 skim types don't apply to Bus, LR IVTT, Exp IVTT, CMR IVTT)) (( 3x14 ) - 3)
  • 78 Transportation Network Company (TNC) Skims = 3 vehicle types (Bus, Mix, Premium ~Light Rail) x 2 directions of travel (inbound / outbound) x 14 skim types (Fare, Access, Egress, First Wait Time, Dwell Time, Number of Transfers, Bus In-Vehicle Travel Time (IVTT), Total IVTT, Transfer Wait Time, Transfer Walk Time, Total Walk Time ), where (3 skim types don't apply to Bus, LR IVTT, Exp IVTT, CMR IVTT)) (( 3x14 ) - 3)

352 = 30+36+9+4+39+78+78+78

1760 = 352 x 5 times of day (EA, AM, MD, PM, EV)

Network Inputs

For this first phase, we don't really know what BAYDAG network inputs looked like to generate the skims, nor do we need to know. On the next phase where we propose new skims for use in Oregon estimation / development, we will associate the skim instruction with specific network need inventory / coding needs.

Clone this wiki locally