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), nVehLaneChangeFrom(0), nVehLaneChangeTo(0),
67 waitSeconds(0), vehLengthSum(0), myParent(parent) {}
81 nVehLaneChangeFrom = 0;
84 travelledDistance = 0;
109 sampleSeconds += timeOnLane;
110 travelledDistance += speed * timeOnLane;
112 if (myParent != 0 && speed < myParent->
myHaltSpeed) {
113 waitSeconds += timeOnLane;
120 if (vehicleApplies(veh) && (getLane() == 0 || getLane() == static_cast<MSVehicle&>(veh).getLane())) {
123 myLastVehicleUpdateValues.erase(&veh);
129 ++nVehLaneChangeFrom;
148 if (vehicleApplies(veh)) {
149 if (getLane() == 0 || getLane() == static_cast<MSVehicle&>(veh).getLane()) {
166 return sampleSeconds == 0 && nVehDeparted == 0 && nVehArrived == 0 && nVehEntered == 0
167 && nVehLeft == 0 && nVehVaporized == 0 && nVehLaneChangeFrom == 0 && nVehLaneChangeTo == 0;
173 const SUMOReal numLanes,
const SUMOReal defaultTravelTime,
const int numVehicles)
const {
175 if (sampleSeconds > 0) {
176 dev <<
"\" density=\"" << sampleSeconds /
STEPS2TIME(period) *(
SUMOReal) 1000 / myLaneLength <<
177 "\" occupancy=\"" << vehLengthSum /
STEPS2TIME(period) / myLaneLength / numLanes *(
SUMOReal) 100 <<
178 "\" waitingTime=\"" << waitSeconds <<
179 "\" speed=\"" << travelledDistance / sampleSeconds;
181 dev <<
"\" departed=\"" << nVehDeparted <<
182 "\" arrived=\"" << nVehArrived <<
183 "\" entered=\"" << nVehEntered <<
184 "\" left=\"" << nVehLeft <<
"\"";
185 if (nVehVaporized > 0) {
186 dev <<
" vaporized=\"" << nVehVaporized <<
"\"";
191 if (sampleSeconds > myParent->myMinSamples) {
192 SUMOReal traveltime = myParent->myMaxTravelTime;
193 if (travelledDistance > 0.f) {
194 traveltime =
MIN2(traveltime, myLaneLength * sampleSeconds / travelledDistance);
196 if (numVehicles > 0) {
197 dev <<
"\" traveltime=\"" << sampleSeconds / numVehicles <<
198 "\" waitingTime=\"" << waitSeconds <<
199 "\" speed=\"" << travelledDistance / sampleSeconds;
201 dev <<
"\" traveltime=\"" << traveltime <<
202 "\" density=\"" << sampleSeconds /
STEPS2TIME(period) *(
SUMOReal) 1000 / myLaneLength <<
203 "\" occupancy=\"" << vehLengthSum /
STEPS2TIME(period) / myLaneLength / numLanes *(
SUMOReal) 100 <<
204 "\" waitingTime=\"" << waitSeconds <<
205 "\" speed=\"" << travelledDistance / sampleSeconds;
207 }
else if (defaultTravelTime >= 0.) {
208 dev <<
"\" traveltime=\"" << defaultTravelTime <<
209 "\" speed=\"" << myLaneLength / defaultTravelTime;
211 dev <<
"\" departed=\"" << nVehDeparted <<
212 "\" arrived=\"" << nVehArrived <<
213 "\" entered=\"" << nVehEntered <<
214 "\" left=\"" << nVehLeft <<
215 "\" laneChangedFrom=\"" << nVehLaneChangeFrom <<
216 "\" laneChangedTo=\"" << nVehLaneChangeTo <<
"\"";
217 if (nVehVaporized > 0) {
218 dev <<
" vaporized=\"" << nVehVaporized <<
"\"";
228 const SUMOTime dumpEnd,
const bool useLanes,
229 const bool withEmpty,
const bool printDefaults,
230 const bool withInternal,
231 const bool trackVehicles,
235 const std::set<std::string> vTypes)
236 :
MSMeanData(id, dumpBegin, dumpEnd, useLanes, withEmpty, printDefaults,
237 withInternal, trackVehicles, maxTravelTime, minSamples, vTypes),