SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MSDevice_Tripinfo.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // A device which collects info on the vehicle trip
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
12 // Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 // ===========================================================================
24 // included modules
25 // ===========================================================================
26 #ifdef _MSC_VER
27 #include <windows_config.h>
28 #else
29 #include <config.h>
30 #endif
31 
32 #include <microsim/MSNet.h>
33 #include <microsim/MSLane.h>
34 #include <microsim/MSVehicle.h>
37 #include "MSDevice_Tripinfo.h"
38 
39 #ifdef CHECK_MEMORY_LEAKS
40 #include <foreign/nvwa/debug_new.h>
41 #endif // CHECK_MEMORY_LEAKS
42 
43 
44 // ===========================================================================
45 // method definitions
46 // ===========================================================================
47 // ---------------------------------------------------------------------------
48 // static initialisation methods
49 // ---------------------------------------------------------------------------
50 void
51 MSDevice_Tripinfo::buildVehicleDevices(SUMOVehicle& v, std::vector<MSDevice*>& into) {
52  if (OptionsCont::getOptions().isSet("tripinfo-output")) {
53  MSDevice_Tripinfo* device = new MSDevice_Tripinfo(v, "tripinfo_" + v.getID());
54  into.push_back(device);
55  }
56 }
57 
58 
59 // ---------------------------------------------------------------------------
60 // MSDevice_Tripinfo-methods
61 // ---------------------------------------------------------------------------
62 MSDevice_Tripinfo::MSDevice_Tripinfo(SUMOVehicle& holder, const std::string& id)
63  : MSDevice(holder, id), myDepartLane(""), myDepartPos(-1), myDepartSpeed(-1),
64  myWaitingSteps(0), myArrivalTime(-1), myArrivalLane(""), myArrivalPos(-1), myArrivalSpeed(-1) {
65 }
66 
67 
69 }
70 
71 
72 bool
74  SUMOReal /*newPos*/, SUMOReal newSpeed) {
75  if (newSpeed <= SUMO_const_haltingSpeed) {
77  }
78  return true;
79 }
80 
81 
82 bool
86  myDepartLane = static_cast<MSVehicle&>(veh).getLane()->getID();
87  }
89  myDepartSpeed = veh.getSpeed();
90  }
91  return true;
92 }
93 
94 
95 bool
100  if (!MSGlobals::gUseMesoSim) {
101  myArrivalLane = static_cast<MSVehicle&>(veh).getLane()->getID();
102  }
103  // @note vehicle may have moved past its arrivalPos during the last step
104  // due to non-zero arrivalspeed but we consider it as arrived at the desired position
106  myArrivalSpeed = veh.getSpeed();
107  }
108  return true;
109 }
110 
111 
112 void
114  SUMOReal routeLength = myHolder.getRoute().getLength();
115  // write
116  OutputDevice& os = OutputDevice::getDeviceByOption("tripinfo-output");
117  os.openTag("tripinfo") << " id=\"" << myHolder.getID() << "\" ";
118  routeLength -= myDepartPos;
119  os << "depart=\"" << time2string(myHolder.getDeparture()) << "\" "
120  << "departLane=\"" << myDepartLane << "\" "
121  << "departPos=\"" << myDepartPos << "\" "
122  << "departSpeed=\"" << myDepartSpeed << "\" "
123  << "departDelay=\"" << time2string(myHolder.getDeparture() - myHolder.getParameter().depart) << "\" ";
124  if (myArrivalLane != "") {
125  routeLength -= MSLane::dictionary(myArrivalLane)->getLength() - myArrivalPos;
126  }
127  os << "arrival=\"" << time2string(myArrivalTime) << "\" "
128  << "arrivalLane=\"" << myArrivalLane << "\" "
129  << "arrivalPos=\"" << myArrivalPos << "\" "
130  << "arrivalSpeed=\"" << myArrivalSpeed << "\" "
131  << "duration=\"" << time2string(myArrivalTime - myHolder.getDeparture()) << "\" "
132  << "routeLength=\"" << routeLength << "\" "
133  << "waitSteps=\"" << myWaitingSteps << "\" "
134  << "rerouteNo=\"" << myHolder.getNumberReroutes();
135  const std::vector<MSDevice*>& devices = myHolder.getDevices();
136  std::ostringstream str;
137  for (std::vector<MSDevice*>::const_iterator i = devices.begin(); i != devices.end(); ++i) {
138  if (i != devices.begin()) {
139  str << ' ';
140  }
141  str << (*i)->getID();
142  }
143  os << "\" devices=\"" << str.str()
144  << "\" vType=\"" << myHolder.getVehicleType().getID()
145  << "\" vaporized=\"" << (myHolder.getEdge() == *(myHolder.getRoute().end() - 1) ? "" : "0")
146  << "\"";
147 }
148 
149 
150 /****************************************************************************/
151