20 package org.matsim.core.scoring;
22 import com.google.inject.Inject;
23 import org.apache.logging.log4j.LogManager;
50 import java.util.ArrayList;
51 import java.util.List;
83 this.transitLineId = transitLineId;
84 this.transitRouteId = transitRouteId;
85 this.driverId = driverId;
111 this.accessLinkIdx = accessLinkIdx;
116 private final List<Id<Link>> links =
new ArrayList<>();
117 private final List<PendingVehicleTravel> newVehicleTravels =
new ArrayList<>();
128 @Inject(optional =
true)
162 experiencedRoutes.clear();
164 transitTravels.clear();
165 vehicleTravels.clear();
166 routelessTravels.clear();
168 transitVehicle2currentRoute.clear();
169 vehicle2route.clear();
171 relPosOnDepartureLinkPerPerson.clear();
172 relPosOnArrivalLinkPerPerson.clear();
182 List<Id<Link>> route =
new ArrayList<>();
193 if (lineAndRoute != null) {
194 if (!event.
getPersonId().equals(lineAndRoute.driverId)) {
201 int currentLinkIdx = Math.max(0, route.
links.size() - 1);
203 vehicleTravels.put(event.
getPersonId(), vehicleTravel);
212 if (route.
links.isEmpty()) {
216 route.
links.set(route.
links.size() - 1,
event.getLinkId());
245 if (lineAndRoute != null) {
246 lineAndRoute.lastFacilityId =
event.getFacilityId();
252 routelessTravels.put(travelEvent.
getPersonId(), travelEvent);
262 List<Id<Link>> experiencedRoute = experiencedRoutes.get(event.
getPersonId());
263 assert !experiencedRoute.isEmpty();
266 if (experiencedRoute.size() > 1) {
274 double relPosOnDepartureLink = relPosOnDepartureLinkPerPerson.get(event.
getPersonId());
275 Double relPosOnArrivalLink = relPosOnArrivalLinkPerPerson.get(event.
getPersonId());
281 }
else if ((pendingTransitTravel = transitTravels.remove(event.
getPersonId())) != null) {
284 final LineAndRoute lineAndRoute = transitVehicle2currentRoute.get(pendingTransitTravel.vehicleId);
285 assert lineAndRoute != null;
288 .get(pendingTransitTravel.accessStop);
289 assert accessFacility != null;
295 assert route != null;
298 if (lastFacilityId == null) {
299 LogManager.getLogger(this.getClass()).warn(
"breakpoint");
301 assert lastFacilityId != null;
304 assert egressFacility != null;
311 }
else if ((pendingVehicleTravel = vehicleTravels.remove(event.
getPersonId())) != null) {
313 List<Id<Link>> traveledLinks = vehicleRoute.
links.subList(pendingVehicleTravel.
accessLinkIdx,
314 vehicleRoute.
links.size());
316 if (traveledLinks.isEmpty()) {
335 if (travelEvent != null) {
345 legHandler.handleLeg(personExperiencedLeg);
352 event.getDriverId());
353 transitVehicle2currentRoute.put(event.
getVehicleId(), lineAndRoute);
357 this.legHandlers.add(legHandler);
final Map< Id< Person >, PendingVehicleTravel > vehicleTravels
void addLegHandler(LegHandler legHandler)
double getRelativePositionOnLink()
void setBoardingTime(double boardingTime)
Map< Id< TransitRoute >, TransitRoute > getRoutes()
Attributes getAttributes()
void setDistance(final double distance)
void handleEvent(PersonArrivalEvent event)
final Map< Id< Vehicle >, VehicleRoute > vehicle2route
Map< Id< TransitStopFacility >, TransitStopFacility > getFacilities()
final Map< Id< Person >, TeleportationArrivalEvent > routelessTravels
static Route createGenericRouteImpl(Id< Link > startLinkId, Id< Link > endLinkId)
final void setTravelTime(final double travTime)
PendingVehicleTravel(VehicleRoute route, int accessLinkIdx)
final void setDistance(final double dist)
void reset(int iteration)
void handleEvent(TeleportationArrivalEvent travelEvent)
final List< Id< Link > > links
final Map< Id< Person >, Leg > legs
final List< PendingVehicleTravel > newVehicleTravels
void setDepartureTime(final double seconds)
void handleEvent(PersonDepartureEvent event)
Id< Vehicle > getVehicleId()
void setTransitSchedule(TransitSchedule transitSchedule)
Id< Person > getPersonId()
double relativePositionOnDepartureLink
static final String ENTER_VEHICLE_TIME_ATTRIBUTE_NAME
void handleEvent(TransitDriverStartsEvent event)
final List< LegHandler > legHandlers
final Map< Id< Person >, List< Id< Link > > > experiencedRoutes
void handleEvent(VehicleLeavesTrafficEvent event)
OptionalTime getDepartureTime()
Id< Person > getPersonId()
void handleEvent(VehicleEntersTrafficEvent event)
void handleEvent(VehicleArrivesAtFacilityEvent event)
Id< Person > getPersonId()
Id< Person > getPersonId()
EventsToLegs(Scenario scenario)
Id< Vehicle > getVehicleId()
double relativePositionOnLastArrivalLink
static final String VEHICLE_ID_ATTRIBUTE_NAME
final Map< Id< Person >, PendingTransitTravel > transitTravels
static void setRoutingMode(Leg leg, String mode)
final Map< Id< Person >, Double > relPosOnArrivalLinkPerPerson
Id< Vehicle > getVehicleId()
Id< Vehicle > getVehicleId()
record PendingTransitTravel(Id< Vehicle > vehicleId, Id< TransitStopFacility > accessStop, double boardingTime)
void handleEvent(PersonEntersVehicleEvent event)
TransitSchedule transitSchedule
TransitConfigGroup transit()
void setRoute(Route route)
static Leg createLeg(String transportMode)
Object putAttribute(final String attribute, final Object value)
static NetworkRoute createNetworkRoute(List< Id< Link >> routeLinkIds, Network network)
static void assertNotNull(Object obj)
Id< TransitLine > getTransitLineId()
final Map< Id< Person >, Double > relPosOnDepartureLinkPerPerson
static double calcDistance(final NetworkRoute networkRoute, final double relPosOnDepartureLink, final double relPosOnArrivalLink, final Network network)
OptionalTime getTravelTime()
void setTravelTime(final double seconds)
Id< Vehicle > getVehicleId()
final Map< Id< Vehicle >, LineAndRoute > transitVehicle2currentRoute
Id< Vehicle > getVehicleId()
TransitSchedule getTransitSchedule()
void handleEvent(LinkEnterEvent event)
Map< Id< TransitLine >, TransitLine > getTransitLines()
void setTravelTime(final double travelTime)