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 nVehLaneChangeFrom(0), nVehLaneChangeTo(0), waitSeconds(0), vehLengthSum(0) {}
79 nVehLaneChangeFrom = 0;
82 travelledDistance = 0;
106 sampleSeconds += timeOnLane;
107 travelledDistance += speed * timeOnLane;
109 if (myParent != 0 && speed < myParent->
myHaltSpeed) {
110 waitSeconds += timeOnLane;
117 if (vehicleApplies(veh) && (getLane() == 0 || getLane() == static_cast<MSVehicle&>(veh).getLane())) {
120 myLastVehicleUpdateValues.erase(&veh);
126 ++nVehLaneChangeFrom;
142 if (vehicleApplies(veh)) {
143 if (getLane() == 0 || getLane() == static_cast<MSVehicle&>(veh).getLane()) {
160 return sampleSeconds == 0 && nVehDeparted == 0 && nVehArrived == 0 && nVehEntered == 0 && nVehLeft == 0 && nVehLaneChangeFrom == 0 && nVehLaneChangeTo == 0;
166 const SUMOReal numLanes,
const SUMOReal defaultTravelTime,
const int numVehicles)
const {
168 if (sampleSeconds > 0) {
169 dev <<
"\" density=\"" << sampleSeconds /
STEPS2TIME(period) *(
SUMOReal) 1000 / myLaneLength <<
170 "\" occupancy=\"" << vehLengthSum /
STEPS2TIME(period) / myLaneLength / numLanes *(
SUMOReal) 100 <<
171 "\" waitingTime=\"" << waitSeconds <<
172 "\" speed=\"" << travelledDistance / sampleSeconds;
174 dev <<
"\" departed=\"" << nVehDeparted <<
175 "\" arrived=\"" << nVehArrived <<
176 "\" entered=\"" << nVehEntered <<
177 "\" left=\"" << nVehLeft <<
"\"";
181 if (sampleSeconds > myParent->myMinSamples) {
182 SUMOReal traveltime = myParent->myMaxTravelTime;
183 if (travelledDistance > 0.f) {
184 traveltime =
MIN2(traveltime, myLaneLength * sampleSeconds / travelledDistance);
186 if (numVehicles > 0) {
187 dev <<
"\" traveltime=\"" << sampleSeconds / numVehicles <<
188 "\" waitingTime=\"" << waitSeconds <<
189 "\" speed=\"" << travelledDistance / sampleSeconds;
191 dev <<
"\" traveltime=\"" << traveltime <<
192 "\" density=\"" << sampleSeconds /
STEPS2TIME(period) *(
SUMOReal) 1000 / myLaneLength <<
193 "\" occupancy=\"" << vehLengthSum /
STEPS2TIME(period) / myLaneLength / numLanes *(
SUMOReal) 100 <<
194 "\" waitingTime=\"" << waitSeconds <<
195 "\" speed=\"" << travelledDistance / sampleSeconds;
197 }
else if (defaultTravelTime >= 0.) {
198 dev <<
"\" traveltime=\"" << defaultTravelTime <<
199 "\" speed=\"" << myLaneLength / defaultTravelTime;
201 dev <<
"\" departed=\"" << nVehDeparted <<
202 "\" arrived=\"" << nVehArrived <<
203 "\" entered=\"" << nVehEntered <<
204 "\" left=\"" << nVehLeft <<
205 "\" laneChangedFrom=\"" << nVehLaneChangeFrom <<
206 "\" laneChangedTo=\"" << nVehLaneChangeTo <<
"\"";
215 const SUMOTime dumpEnd,
const bool useLanes,
216 const bool withEmpty,
const bool printDefaults,
217 const bool withInternal,
218 const bool trackVehicles,
222 const std::set<std::string> vTypes)
223 :
MSMeanData(id, dumpBegin, dumpEnd, useLanes, withEmpty, printDefaults,
224 withInternal, trackVehicles, maxTravelTime, minSamples, vTypes),