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").writeAttr("id", myHolder.getID());
118  routeLength -= myDepartPos;
119  os.writeAttr("depart", time2string(myHolder.getDeparture())).writeAttr("departLane", myDepartLane)
120  .writeAttr("departPos", myDepartPos).writeAttr("departSpeed", myDepartSpeed)
122  if (myArrivalLane != "") {
123  routeLength -= MSLane::dictionary(myArrivalLane)->getLength() - myArrivalPos;
124  }
125  os.writeAttr("arrival", time2string(myArrivalTime)).writeAttr("arrivalLane", myArrivalLane)
126  .writeAttr("arrivalPos", myArrivalPos).writeAttr("arrivalSpeed", myArrivalSpeed)
128  .writeAttr("routeLength", routeLength).writeAttr("waitSteps", myWaitingSteps)
129  .writeAttr("rerouteNo", myHolder.getNumberReroutes());
130  const std::vector<MSDevice*>& devices = myHolder.getDevices();
131  std::ostringstream str;
132  for (std::vector<MSDevice*>::const_iterator i = devices.begin(); i != devices.end(); ++i) {
133  if (i != devices.begin()) {
134  str << ' ';
135  }
136  str << (*i)->getID();
137  }
138  os.writeAttr("devices", str.str()).writeAttr("vType", myHolder.getVehicleType().getID())
139  .writeAttr("vaporized", (myHolder.getEdge() == *(myHolder.getRoute().end() - 1) ? "" : "0"));
140 }
141 
142 
143 /****************************************************************************/
144