private static void ProcessHalfTours(ITourWrapper tour, int batchNumber) { // goes in two directions, from origin to destination and destination to origin for (var direction = Global.Settings.TourDirections.OriginToDestination; direction <= Global.Settings.TourDirections.TotalTourDirections; direction++) { // creates origin and destination half-tours // creates or adds a trip to a tour based on application or estimation mode tour.SetHalfTours(direction); // the half-tour from the origin to destination or the half-tour from the destination to origin // depending on the direction var halfTour = tour.GetHalfTour(direction); // halfTour.Trips will dynamically grow, so keep this in a for loop for (var i = 0; i < halfTour.Trips.Count; i++) { var trip = halfTour.Trips[i]; #if RELEASE try { #endif halfTour.SimulatedTrips++; if (trip.IsHalfTourFromOrigin) { tour.HalfTour1Trips++; } else { tour.HalfTour2Trips++; } ChoiceModelFactory.TotalTimesTripModelSuiteRun[batchNumber]++; //Global.PrintFile.WriteLine("Before - trip {0} sequence {1} orig parcel {2} orig zone {3}", trip.Id, trip.Sequence, trip.OriginParcelId, trip.OriginZoneKey); //Global.PrintFile.WriteLine("Before - trip {0} sequence {1} dest parcel {2} dest zone {3}", trip.Id, trip.Sequence, trip.DestinationParcelId, trip.DestinationZoneKey); RunTripModelSuite(tour, halfTour, trip, batchNumber); //Global.PrintFile.WriteLine("*After - trip {0} sequence {1} orig parcel {2} orig zone {3}", trip.Id, trip.Sequence, trip.OriginParcelId, trip.OriginZoneKey); //Global.PrintFile.WriteLine("*After - trip {0} sequence {1} dest parcel {2} dest zone {3}", trip.Id, trip.Sequence, trip.DestinationParcelId, trip.DestinationZoneKey); if (!trip.PersonDay.IsValid) { return; } #if RELEASE } catch (Exception e) { throw new TripModelException(string.Format("Error running trip models for {0}.", trip), e); } #endif } } }