MATSIM
TransitRouteAccessEgressAnalysis.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * TransitRouteAccessEgressAnalysis.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2009 by the members listed in the COPYING, *
8  * LICENSE and WARRANTY file. *
9  * email : info at matsim dot org *
10  * *
11  * *********************************************************************** *
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * See also COPYING, LICENSE and WARRANTY file *
18  * *
19  * *********************************************************************** */
20 
21 package org.matsim.pt.analysis;
22 
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.LinkedHashMap;
26 import java.util.List;
27 import java.util.Map;
28 
29 import org.matsim.api.core.v01.Id;
34 import org.matsim.core.utils.misc.Time;
39 
47 
48  public final TransitRoute transitRoute;
49  public Map<Id, Departure> headings = null;
50  private final Map<Departure, Map<Id, Integer>> accessCounters = new LinkedHashMap<Departure, Map<Id, Integer>>();
51  private final Map<Departure, Map<Id, Integer>> egressCounters = new LinkedHashMap<Departure, Map<Id, Integer>>();
52  private final VehicleTracker vehTracker;
53 
54  public TransitRouteAccessEgressAnalysis(final TransitRoute transitRoute, final VehicleTracker vehicleTracker) {
55  this.transitRoute = transitRoute;
56  this.vehTracker = vehicleTracker;
57  }
58 
59  public void handleEvent(final PersonEntersVehicleEvent event) {
60  if (this.headings == null) {
62  }
63  Departure dep = this.headings.get(event.getVehicleId());
64  if (dep != null) {
65  Id fId = this.vehTracker.getFacilityIdForVehicle(event.getVehicleId());
66  Map<Id, Integer> counter = getAccessCounter(dep);
67  Integer count = counter.get(fId);
68  if (count == null) {
69  counter.put(fId, Integer.valueOf(1));
70  } else {
71  counter.put(fId, Integer.valueOf(1 + count.intValue()));
72  }
73  }
74  }
75 
76  public void handleEvent(final PersonLeavesVehicleEvent event) {
77  if (this.headings == null) {
79  }
80  Departure dep = this.headings.get(event.getVehicleId());
81  if (dep != null) {
82  Id fId = this.vehTracker.getFacilityIdForVehicle(event.getVehicleId());
83  Map<Id, Integer> counter = getEgressCounter(dep);
84  Integer count = counter.get(fId);
85  if (count == null) {
86  counter.put(fId, Integer.valueOf(1));
87  } else {
88  counter.put(fId, Integer.valueOf(1 + count.intValue()));
89  }
90  }
91  }
92 
93  public void reset(final int iteration) {
94  this.headings = null;
95  this.accessCounters.clear();
96  this.egressCounters.clear();
97  }
98 
99  public void printStats() {
100  List<Id> stopFacilityIds = new ArrayList<Id>(this.transitRoute.getStops().size());
101  for (TransitRouteStop stop : this.transitRoute.getStops()) {
102  stopFacilityIds.add(stop.getStopFacility().getId());
103  }
104 
105  System.out.print("stops/departure");
106  for (Id id : stopFacilityIds) {
107  System.out.print("\t" + id);
108  }
109  System.out.println();
110  for (Departure departure : this.headings.values()) {
111  System.out.print(Time.writeTime(departure.getDepartureTime()));
112  Map<Id, Integer> accessCounter = getAccessCounter(departure);
113  for (Id id : stopFacilityIds) {
114  Integer value = accessCounter.get(id);
115  System.out.print("\t");
116  if (value != null) {
117  System.out.print(value.toString());
118  } else {
119  System.out.print("0");
120  }
121  }
122  System.out.println();
123  Map<Id, Integer> egressCounter = getEgressCounter(departure);
124  for (Id id : stopFacilityIds) {
125  Integer value = egressCounter.get(id);
126  System.out.print("\t");
127  if (value != null) {
128  System.out.print(value.toString());
129  } else {
130  System.out.print("0");
131  }
132  }
133  System.out.println();
134  }
135  }
136 
137  public Map<Id, Integer> getAccessCounter(final Departure departure) {
138  Map<Id, Integer> counter = this.accessCounters.get(departure);
139  if (counter == null) {
140  counter = new HashMap<Id, Integer>();
141  this.accessCounters.put(departure, counter);
142  }
143  return counter;
144  }
145 
146  public Map<Id, Integer> getEgressCounter(final Departure departure) {
147  Map<Id, Integer> counter = this.egressCounters.get(departure);
148  if (counter == null) {
149  counter = new HashMap<Id, Integer>();
150  this.egressCounters.put(departure, counter);
151  }
152  return counter;
153  }
154 
158  private void collectHeadingsInfo() {
159  Map<Id, Departure> map = new HashMap<Id, Departure>(this.transitRoute.getDepartures().size()*2);
160 
161  for (Departure departure : this.transitRoute.getDepartures().values()) {
162  if (departure.getVehicleId() != null) {
163  map.put(departure.getVehicleId(), departure);
164  }
165  }
166 
167  /* try to make it thread-safe by assigning class-member at the end.
168  * if two threads enter this method, nothing bad should happen,
169  * as both threads should generated the same initialization.
170  */
171  this.headings = map;
172  }
173 
174 }
Map< Id< Departure >, Departure > getDepartures()
static final String writeTime(final double seconds, final String timeformat)
Definition: Time.java:80
TransitRouteAccessEgressAnalysis(final TransitRoute transitRoute, final VehicleTracker vehicleTracker)
Id getFacilityIdForVehicle(final Id vehicleId)