SUMO - Simulation of Urban MObility
MSDevice_Tripinfo.cpp
Go to the documentation of this file.
1 /****************************************************************************/
10 // A device which collects info on the vehicle trip
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
13 // Copyright (C) 2009-2014 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include <microsim/MSNet.h>
34 #include <microsim/MSLane.h>
35 #include <microsim/MSVehicle.h>
38 #include "MSDevice_Tripinfo.h"
39 
40 #ifdef CHECK_MEMORY_LEAKS
41 #include <foreign/nvwa/debug_new.h>
42 #endif // CHECK_MEMORY_LEAKS
43 
44 
45 // ===========================================================================
46 // method definitions
47 // ===========================================================================
48 // ---------------------------------------------------------------------------
49 // static initialisation methods
50 // ---------------------------------------------------------------------------
51 void
52 MSDevice_Tripinfo::buildVehicleDevices(SUMOVehicle& v, std::vector<MSDevice*>& into) {
53  if (OptionsCont::getOptions().isSet("tripinfo-output")) {
54  MSDevice_Tripinfo* device = new MSDevice_Tripinfo(v, "tripinfo_" + v.getID());
55  into.push_back(device);
56  }
57 }
58 
59 
60 // ---------------------------------------------------------------------------
61 // MSDevice_Tripinfo-methods
62 // ---------------------------------------------------------------------------
63 MSDevice_Tripinfo::MSDevice_Tripinfo(SUMOVehicle& holder, const std::string& id)
64  : MSDevice(holder, id), myDepartLane(""), myDepartPos(-1), myDepartSpeed(-1),
65  myWaitingSteps(0), myArrivalTime(-1), myArrivalLane(""), myArrivalPos(-1), myArrivalSpeed(-1) {
66 }
67 
68 
70 }
71 
72 
73 bool
75  SUMOReal /*newPos*/, SUMOReal newSpeed) {
76  if (newSpeed <= SUMO_const_haltingSpeed) {
78  }
79  return true;
80 }
81 
82 
83 bool
87  myDepartLane = static_cast<MSVehicle&>(veh).getLane()->getID();
88  }
90  myDepartSpeed = veh.getSpeed();
91  }
92  return true;
93 }
94 
95 
96 bool
101  if (!MSGlobals::gUseMesoSim) {
102  myArrivalLane = static_cast<MSVehicle&>(veh).getLane()->getID();
103  }
104  // @note vehicle may have moved past its arrivalPos during the last step
105  // due to non-zero arrivalspeed but we consider it as arrived at the desired position
107  myArrivalSpeed = veh.getSpeed();
108  }
109  return true;
110 }
111 
112 
113 void
115  SUMOReal routeLength = myHolder.getRoute().getLength();
116  // write
117  OutputDevice& os = OutputDevice::getDeviceByOption("tripinfo-output");
118  os.openTag("tripinfo").writeAttr("id", myHolder.getID());
119  routeLength -= myDepartPos;
120  os.writeAttr("depart", time2string(myHolder.getDeparture())).writeAttr("departLane", myDepartLane)
121  .writeAttr("departPos", myDepartPos).writeAttr("departSpeed", myDepartSpeed)
123  if (myArrivalLane != "") {
124  routeLength -= MSLane::dictionary(myArrivalLane)->getLength() - myArrivalPos;
125  }
126  os.writeAttr("arrival", time2string(myArrivalTime)).writeAttr("arrivalLane", myArrivalLane)
127  .writeAttr("arrivalPos", myArrivalPos).writeAttr("arrivalSpeed", myArrivalSpeed)
129  .writeAttr("routeLength", routeLength).writeAttr("waitSteps", myWaitingSteps)
130  .writeAttr("rerouteNo", myHolder.getNumberReroutes());
131  const std::vector<MSDevice*>& devices = myHolder.getDevices();
132  std::ostringstream str;
133  for (std::vector<MSDevice*>::const_iterator i = devices.begin(); i != devices.end(); ++i) {
134  if (i != devices.begin()) {
135  str << ' ';
136  }
137  str << (*i)->getID();
138  }
139  os.writeAttr("devices", str.str()).writeAttr("vType", myHolder.getVehicleType().getID())
140  .writeAttr("vaporized", (myHolder.getEdge() == *(myHolder.getRoute().end() - 1) ? "" : "0"));
141 }
142 
143 
144 /****************************************************************************/
145 
SUMOTime myArrivalTime
The vehicle's arrival time.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:257
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:77
virtual const MSRoute & getRoute() const =0
Returns the current route.
A device which collects info on the vehicle trip (mainly on departure and arrival) ...
SUMOVehicle & myHolder
The vehicle that stores the device.
Definition: MSDevice.h:153
virtual SUMOReal getPositionOnLane() const =0
Get the vehicle's position along the lane.
virtual const MSEdge * getEdge() const =0
Returns the edge the vehicle is currently at.
Notification
Definition of a vehicle state.
std::string time2string(SUMOTime t)
Definition: SUMOTime.cpp:61
void generateOutput() const
Called on writing tripinfo output.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSDevice * > &into)
Build devices for the given vehicle, if needed.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:159
SUMOReal myArrivalPos
The position on the lane the vehicle arrived at.
~MSDevice_Tripinfo()
Destructor.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
Definition: MSNet.h:216
bool notifyMove(SUMOVehicle &veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal newSpeed)
Checks for waiting steps when the vehicle moves.
const MSLane * getLane() const
Returns the lane the reminder works on.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:67
SUMOReal myDepartSpeed
The speed on departure.
SUMOReal myArrivalSpeed
The speed when arriving.
const std::string & getID() const
Returns the id.
Definition: Named.h:60
bool notifyEnter(SUMOVehicle &veh, MSMoveReminder::Notification reason)
Saves departure info on insertion.
virtual const std::vector< MSDevice * > & getDevices() const =0
Returns this vehicle's devices.
Representation of a vehicle.
Definition: SUMOVehicle.h:64
unsigned int myWaitingSteps
The overall number of waiting steps.
The vehicle arrived at its destination (is deleted)
SUMOTime depart
The vehicle's departure time.
SUMOReal myDepartPos
The position on the lane the vehicle departed at.
SUMOReal getLength() const
Definition: MSRoute.cpp:255
std::string myDepartLane
The lane the vehicle departed at.
Abstract in-vehicle device.
Definition: MSDevice.h:69
static bool dictionary(const std::string &id, MSLane *lane)
Static (sic!) container methods {.
Definition: MSLane.cpp:828
The vehicle has departed (was inserted into the network)
virtual SUMOReal getSpeed() const =0
Returns the vehicle's current speed.
MSRouteIterator end() const
Returns the end of the list of edges to pass.
Definition: MSRoute.cpp:81
std::string myArrivalLane
The lane the vehicle arrived at.
virtual SUMOTime getDeparture() const =0
Returns this vehicle's real departure time.
static OutputDevice & getDeviceByOption(const std::string &name)
Returns the device described by the option.
virtual const SUMOVehicleParameter & getParameter() const =0
Returns the vehicle's parameter (including departure definition)
MSDevice_Tripinfo()
dummy constructor
const SUMOReal SUMO_const_haltingSpeed
the speed threshold at which vehicles are considered as halting
Definition: StdDefs.h:54
const std::string & getID() const
Returns the name of the vehicle type.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:71
bool notifyLeave(SUMOVehicle &veh, SUMOReal lastPos, MSMoveReminder::Notification reason)
Saves arrival info.
#define SUMOReal
Definition: config.h:215
static const bool gUseMesoSim
Definition: MSGlobals.h:99
virtual SUMOReal getArrivalPos() const =0
Returns this vehicle's desired arrivalPos for its current route (may change on reroute) ...
virtual unsigned int getNumberReroutes() const =0
Returns the number of new routes this vehicle got.
virtual const std::string & getID() const =0
Get the vehicle's ID.
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
virtual const MSVehicleType & getVehicleType() const =0
Returns the vehicle's type.