private static void RemoveFaciliateTrips(Household household) { List<ITripChain> tripChains = new List<ITripChain>(); foreach (var p in household.Persons) { p.Attach("ObservedTripChains", new List<ITripChain>()); foreach (var tc in p.TripChains) { tripChains.Add(tc); ((List<ITripChain>)p["ObservedTripChains"]).Add((((TripChain)tc).DeepClone()) ); } } //removing facilitate trips foreach (var tc in tripChains) { ITrip StartFTrip = null; bool removeChain = false; List<ITrip> toRemove = new List<ITrip>(); foreach (var t in tc.Trips) { if (t.Purpose == Activity.FacilitatePassenger) { if (StartFTrip == null) StartFTrip = t; else toRemove.Add(t); if (tc.Trips[tc.Trips.Count - 1] == t) { removeChain = true; } } else if (StartFTrip != null ) { if (t.Purpose == Activity.Home && tc.Trips[0] == StartFTrip) { removeChain = true; } else { ((Trip)StartFTrip).DestinationZone = t.DestinationZone; StartFTrip.Purpose = t.Purpose; ((Trip)StartFTrip).TripStartTime = t.TripStartTime; StartFTrip = null; toRemove.Add(t); } } } if (removeChain) { tc.Person.TripChains.Remove(tc); } else { foreach (var t in toRemove) { tc.Trips.Remove(t); } } } }
private static void VerifyHousehold(Household household) { List<ITripChain> tripChains = new List<ITripChain>(); foreach (var p in household.Persons) { foreach (var tc in p.TripChains) { tripChains.Add(tc); } } foreach (var tc in tripChains) { foreach (var t in tc.Trips) { if (t.OriginalZone.InternalDistance == 0 || t.DestinationZone.InternalDistance == 0 ) { t.TripChain.Person.TripChains.Remove(tc); } } /* bool intraZonal = true; foreach (var t in tc.Trips) { if (t.DestinationZone != household.HomeZone) { intraZonal = false; } } if (intraZonal) { tc.Person.TripChains.Remove(tc); } */ } }