LCOV - code coverage report
Current view: top level - src/microsim/output - MSFullExport.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 72 72 100.0 %
Date: 2024-05-05 15:31:14 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2012-2024 German Aerospace Center (DLR) and others.
       4             : // This program and the accompanying materials are made available under the
       5             : // terms of the Eclipse Public License 2.0 which is available at
       6             : // https://www.eclipse.org/legal/epl-2.0/
       7             : // This Source Code may also be made available under the following Secondary
       8             : // Licenses when the conditions for such availability set forth in the Eclipse
       9             : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10             : // or later which is available at
      11             : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12             : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13             : /****************************************************************************/
      14             : /// @file    MSFullExport.cpp
      15             : /// @author  Daniel Krajzewicz
      16             : /// @author  Mario Krumnow
      17             : /// @author  Michael Behrisch
      18             : /// @author  Jakob Erdmann
      19             : /// @date    2012-04-26
      20             : ///
      21             : // Dumping a hugh List of Parameters available in the Simulation
      22             : /****************************************************************************/
      23             : #include <config.h>
      24             : 
      25             : #include <utils/iodevices/OutputDevice.h>
      26             : #include <utils/emissions/PollutantsInterface.h>
      27             : #include <utils/emissions/HelpersHarmonoise.h>
      28             : #include <utils/geom/GeomHelper.h>
      29             : #include <microsim/MSEdge.h>
      30             : #include <microsim/MSEdgeControl.h>
      31             : #include <microsim/MSLane.h>
      32             : #include <microsim/MSNet.h>
      33             : #include <microsim/MSVehicle.h>
      34             : #include <microsim/MSVehicleControl.h>
      35             : #include <microsim/traffic_lights/MSTLLogicControl.h>
      36             : #include <microsim/traffic_lights/MSTrafficLightLogic.h>
      37             : #include "MSFullExport.h"
      38             : 
      39             : 
      40             : // ===========================================================================
      41             : // method definitions
      42             : // ===========================================================================
      43             : void
      44         960 : MSFullExport::write(OutputDevice& of, SUMOTime timestep) {
      45        1920 :     of.openTag("data") << " timestep=\"" << time2string(timestep) << "\"";
      46             :     //Vehicles
      47         960 :     writeVehicles(of);
      48             :     //Edges
      49         960 :     writeEdge(of);
      50             :     //TrafficLights
      51         960 :     writeTLS(of, timestep);
      52         960 :     of.closeTag();
      53         960 : }
      54             : 
      55             : 
      56             : void
      57         960 : MSFullExport::writeVehicles(OutputDevice& of) {
      58         960 :     of.openTag("vehicles");
      59         960 :     MSVehicleControl& vc = MSNet::getInstance()->getVehicleControl();
      60        1920 :     for (MSVehicleControl::constVehIt it = vc.loadedVehBegin(); it != vc.loadedVehEnd(); ++it) {
      61         960 :         const SUMOVehicle* veh = it->second;
      62         960 :         const MSVehicle* microVeh = dynamic_cast<const MSVehicle*>(veh);
      63         960 :         if (veh->isOnRoad()) {
      64         876 :             std::string fclass = veh->getVehicleType().getID();
      65         876 :             fclass = fclass.substr(0, fclass.find_first_of("@"));
      66         876 :             PollutantsInterface::Emissions emiss = PollutantsInterface::computeAll(
      67         876 :                     veh->getVehicleType().getEmissionClass(), veh->getSpeed(),
      68         876 :                     veh->getAcceleration(), veh->getSlope(),
      69         876 :                     veh->getEmissionParameters());
      70        2628 :             of.openTag("vehicle").writeAttr("id", veh->getID()).writeAttr("eclass", PollutantsInterface::getName(veh->getVehicleType().getEmissionClass()));
      71        4380 :             of.writeAttr("CO2", emiss.CO2).writeAttr("CO", emiss.CO).writeAttr("HC", emiss.HC).writeAttr("NOx", emiss.NOx);
      72        3504 :             of.writeAttr("PMx", emiss.PMx).writeAttr("fuel", emiss.fuel).writeAttr("electricity", emiss.electricity);
      73         876 :             of.writeAttr("noise", HelpersHarmonoise::computeNoise(veh->getVehicleType().getEmissionClass(), veh->getSpeed(), veh->getAcceleration()));
      74        2628 :             of.writeAttr("route", veh->getRoute().getID()).writeAttr("type", fclass);
      75         876 :             if (microVeh != nullptr) {
      76         576 :                 of.writeAttr("waiting", microVeh->getWaitingSeconds());
      77        1152 :                 of.writeAttr("lane", microVeh->getLane()->getID());
      78             :             }
      79        2628 :             of.writeAttr("pos", veh->getPositionOnLane()).writeAttr("speed", veh->getSpeed());
      80        3504 :             of.writeAttr("angle", GeomHelper::naviDegree(veh->getAngle())).writeAttr("x", veh->getPosition().x()).writeAttr("y", veh->getPosition().y());
      81        1752 :             of.closeTag();
      82             :         }
      83             :     }
      84         960 :     of.closeTag();
      85         960 : }
      86             : 
      87             : void
      88         960 : MSFullExport::writeEdge(OutputDevice& of) {
      89         960 :     of.openTag("edges");
      90         960 :     MSEdgeControl& ec = MSNet::getInstance()->getEdgeControl();
      91             :     const MSEdgeVector& edges = ec.getEdges();
      92       43200 :     for (MSEdgeVector::const_iterator e = edges.begin(); e != edges.end(); ++e) {
      93       42240 :         MSEdge& edge = **e;
      94       42240 :         if (!MSGlobals::gUsingInternalLanes && !edge.isNormal()) {
      95        7680 :             continue;
      96             :         }
      97      103680 :         of.openTag("edge").writeAttr("id", edge.getID()).writeAttr("traveltime", edge.getCurrentTravelTime());
      98             :         const std::vector<MSLane*>& lanes = edge.getLanes();
      99       78720 :         for (std::vector<MSLane*>::const_iterator lane = lanes.begin(); lane != lanes.end(); ++lane) {
     100       44160 :             writeLane(of, **lane);
     101             :         }
     102       69120 :         of.closeTag();
     103             :     }
     104         960 :     of.closeTag();
     105         960 : }
     106             : 
     107             : 
     108             : void
     109       44160 : MSFullExport::writeLane(OutputDevice& of, const MSLane& lane) {
     110      176640 :     of.openTag("lane").writeAttr("id", lane.getID()).writeAttr("CO", lane.getEmissions<PollutantsInterface::CO>()).writeAttr("CO2", lane.getEmissions<PollutantsInterface::CO2>());
     111      176640 :     of.writeAttr("NOx", lane.getEmissions<PollutantsInterface::NO_X>()).writeAttr("PMx", lane.getEmissions<PollutantsInterface::PM_X>()).writeAttr("HC", lane.getEmissions<PollutantsInterface::HC>());
     112      132480 :     of.writeAttr("noise", lane.getHarmonoise_NoiseEmissions()).writeAttr("fuel", lane.getEmissions<PollutantsInterface::FUEL>());
     113      132480 :     of.writeAttr("electricity", lane.getEmissions<PollutantsInterface::ELEC>()).writeAttr("maxspeed", lane.getSpeedLimit());
     114      176640 :     of.writeAttr("meanspeed", lane.getMeanSpeed()).writeAttr("occupancy", lane.getNettoOccupancy()).writeAttr("vehicle_count", lane.getVehicleNumber());
     115       44160 :     of.closeTag();
     116       44160 : }
     117             : 
     118             : 
     119             : void
     120         960 : MSFullExport::writeTLS(OutputDevice& of, SUMOTime /* timestep */) {
     121         960 :     of.openTag("tls");
     122         960 :     MSTLLogicControl& vc = MSNet::getInstance()->getTLSControl();
     123         960 :     std::vector<std::string> ids = vc.getAllTLIds();
     124        5280 :     for (std::vector<std::string>::const_iterator id_it = ids.begin(); id_it != ids.end(); ++id_it) {
     125        4320 :         MSTLLogicControl::TLSLogicVariants& vars = MSNet::getInstance()->getTLSControl().get(*id_it);
     126        4320 :         const MSTrafficLightLogic::LaneVectorVector& lanes = vars.getActive()->getLaneVectors();
     127             : 
     128             :         std::vector<std::string> laneIDs;
     129       48480 :         for (MSTrafficLightLogic::LaneVectorVector::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
     130             :             const MSTrafficLightLogic::LaneVector& llanes = (*i);
     131       88320 :             for (MSTrafficLightLogic::LaneVector::const_iterator j = llanes.begin(); j != llanes.end(); ++j) {
     132       44160 :                 laneIDs.push_back((*j)->getID());
     133             :             }
     134             :         }
     135             : 
     136        4320 :         std::string lane_output = "";
     137       48480 :         for (int i1 = 0; i1 < (int)laneIDs.size(); ++i1) {
     138       88320 :             lane_output += laneIDs[i1] + " ";
     139             :         }
     140             : 
     141        4320 :         std::string state = vars.getActive()->getCurrentPhaseDef().getState();
     142       17280 :         of.openTag("trafficlight").writeAttr("id", *id_it).writeAttr("state", state).closeTag();
     143        4320 :     }
     144         960 :     of.closeTag();
     145         960 : }
     146             : 
     147             : 
     148             : /****************************************************************************/

Generated by: LCOV version 1.14