44 #include <mesosim/MELoop.h>
45 #include <mesosim/MESegment.h>
48 #ifdef CHECK_MEMORY_LEAKS
50 #endif // CHECK_MEMORY_LEAKS
62 const std::set<std::string>*
const vTypes,
65 nVehDeparted(0), nVehArrived(0), nVehEntered(0), nVehLeft(0),
66 nVehVaporized(0), waitSeconds(0),
67 nVehLaneChangeFrom(0), nVehLaneChangeTo(0),
68 vehLengthSum(0), myParent(parent) {}
82 nVehLaneChangeFrom = 0;
85 travelledDistance = 0;
110 sampleSeconds += timeOnLane;
111 travelledDistance += speed * timeOnLane;
113 if (myParent != 0 && speed < myParent->
myHaltSpeed) {
114 waitSeconds += timeOnLane;
121 if (vehicleApplies(veh) && (getLane() == 0 || getLane() == static_cast<MSVehicle&>(veh).getLane())) {
124 myLastVehicleUpdateValues.erase(&veh);
130 ++nVehLaneChangeFrom;
149 if (vehicleApplies(veh)) {
150 if (getLane() == 0 || getLane() == static_cast<MSVehicle&>(veh).getLane()) {
167 return sampleSeconds == 0 && nVehDeparted == 0 && nVehArrived == 0 && nVehEntered == 0
168 && nVehLeft == 0 && nVehVaporized == 0 && nVehLaneChangeFrom == 0 && nVehLaneChangeTo == 0;
174 const SUMOReal numLanes,
const SUMOReal defaultTravelTime,
const int numVehicles)
const {
176 if (sampleSeconds > 0) {
177 dev <<
"\" density=\"" << sampleSeconds /
STEPS2TIME(period) *(
SUMOReal) 1000 / myLaneLength <<
178 "\" occupancy=\"" << vehLengthSum /
STEPS2TIME(period) / myLaneLength / numLanes *(
SUMOReal) 100 <<
179 "\" waitingTime=\"" << waitSeconds <<
180 "\" speed=\"" << travelledDistance / sampleSeconds;
182 dev <<
"\" departed=\"" << nVehDeparted <<
183 "\" arrived=\"" << nVehArrived <<
184 "\" entered=\"" << nVehEntered <<
185 "\" left=\"" << nVehLeft <<
"\"";
186 if (nVehVaporized > 0) {
187 dev <<
" vaporized=\"" << nVehVaporized <<
"\"";
192 if (sampleSeconds > myParent->myMinSamples) {
193 SUMOReal traveltime = myParent->myMaxTravelTime;
194 if (travelledDistance > 0.f) {
195 traveltime =
MIN2(traveltime, myLaneLength * sampleSeconds / travelledDistance);
197 if (numVehicles > 0) {
198 dev <<
"\" traveltime=\"" << sampleSeconds / numVehicles <<
199 "\" waitingTime=\"" << waitSeconds <<
200 "\" speed=\"" << travelledDistance / sampleSeconds;
202 dev <<
"\" traveltime=\"" << traveltime <<
203 "\" density=\"" << sampleSeconds /
STEPS2TIME(period) *(
SUMOReal) 1000 / myLaneLength <<
204 "\" occupancy=\"" << vehLengthSum /
STEPS2TIME(period) / myLaneLength / numLanes *(
SUMOReal) 100 <<
205 "\" waitingTime=\"" << waitSeconds <<
206 "\" speed=\"" << travelledDistance / sampleSeconds;
208 }
else if (defaultTravelTime >= 0.) {
209 dev <<
"\" traveltime=\"" << defaultTravelTime <<
210 "\" speed=\"" << myLaneLength / defaultTravelTime;
212 dev <<
"\" departed=\"" << nVehDeparted <<
213 "\" arrived=\"" << nVehArrived <<
214 "\" entered=\"" << nVehEntered <<
215 "\" left=\"" << nVehLeft <<
216 "\" laneChangedFrom=\"" << nVehLaneChangeFrom <<
217 "\" laneChangedTo=\"" << nVehLaneChangeTo <<
"\"";
218 if (nVehVaporized > 0) {
219 dev <<
" vaporized=\"" << nVehVaporized <<
"\"";
229 const SUMOTime dumpEnd,
const bool useLanes,
230 const bool withEmpty,
const bool printDefaults,
231 const bool withInternal,
232 const bool trackVehicles,
236 const std::set<std::string> vTypes)
237 :
MSMeanData(id, dumpBegin, dumpEnd, useLanes, withEmpty, printDefaults,
238 withInternal, trackVehicles, maxTravelTime, minSamples, vTypes),