Hello,

Ah, that makes sense. However, the output also contains an error. The
complete list of vehicle definitions is in a block comment, since the
configuration comments at the start of the file are not properly closed
before the vehicle definitions are written. I attached the file that
sort_routes.py generated, I only removed all vehicles in between the first
and the last one.

In the python code I see that the original lines are copied until it reads
"<routes". But in comment lines there is a flag definition "<routes-output"
so the copying ends at that line unintendedly. Apart from that, all the
route distributions and vehicle definitions in the file that dfrouter
generated start after a line with "<additional>" instead of "<routes>". So
I guess the python file should be altered a bit here. I fixed the python
file for my case, I'm not sure how generic it is. But I attached the
changed python file so you can have a look at it. I only changed the
contents of the for-loop in the main method.

Greetings,
Pieter


On 19 February 2014 16:03, Jakob Erdmann <[email protected]> wrote:

> Hello,
> you need to sort the emitters file (containing <vehicle> elements).
> regards,
> Jakob
>
>
> 2014-02-19 12:15 GMT+01:00 Pieter Loof <[email protected]>:
>
> Hello,
>>
>> Thank you for the useful reactions, I see there is a tool for sorting the
>> route file. However, when I run sort_routes.py I get the output "read 0
>> elements. wrote 0 elements." and no errors. The output file that is
>> generated contains some comments, but no route data. Now that I think of
>> it, doesn't the python script need the vehicle file in order to be able to
>> sort the routes?
>>
>> I read these reactions just after I sent a mail with an overview of my
>> bug reports (which also includes this scenario as "sumo_segfault" but then
>> with screenshot and reduced vehicle file size). So if the crash problem we
>> are discussing is solved already then you can ignore this scenario that I
>> just sent again in my bug overview message.
>>
>> Greetings,
>> Pieter
>>
>>
>> On 19 February 2014 09:16, Jakob Erdmann <[email protected]>wrote:
>>
>>> Hello,
>>> the crash appears to be resolved by changes in the latest svn revision
>>> (not just related to slight changes in driving dynamics).
>>> regards,
>>> Jakob
>>>
>>>
>>> 2014-02-19 8:26 GMT+01:00 Jakob Erdmann <[email protected]>:
>>>
>>> Hello,
>>>> thank for for reporting the crash and sending the files.. I was able to
>>>> reproduce it with 0.19.0 and will look into the matter. As a workaround you
>>>> may want to use the latest svn version which ran the scenario without
>>>> crashing.
>>>>
>>>> Please note that the option --lanechange.duration which you are using
>>>> is rather new and bugs were recently discovered: (
>>>> http://sumo-sim.org/trac.wsgi/ticket/1152,
>>>> http://sumo-sim.org/trac.wsgi/ticket/1153).
>>>>
>>>> Regarding the problem of unsorted vehicles in the dfrouter output,
>>>> please look at the updated documentation here:
>>>> http://sumo-sim.org/wiki/Demand/Routes_from_Observation_Points#How_to_include_the_files
>>>> As Daniel mentioned we do not use DFRouter very often, which is why
>>>> this annoyance is not yet fixed. (But here is a ticket:
>>>> http://sumo-sim.org/trac.wsgi/ticket/1158 because I do think it is a
>>>> defect)
>>>> regards,
>>>> Jakob
>>>>
>>>>
>>>> 2014-02-17 14:35 GMT+01:00 Pieter Loof <[email protected]>:
>>>>
>>>> Hello,
>>>>>
>>>>> Giving the route and vehicle file to SUMO both via the "-r " flag in
>>>>> the correct order solved the errors. But now I am running into a different
>>>>> problem again. When running SUMO I get a lot of warnings about discarded
>>>>> vehicles because the route file is not sorted. Apart from that, the
>>>>> simulation runs and exits normally. So again I run into the problem of the
>>>>> route file not being sorted, although it is generated by DFRouter and I 
>>>>> did
>>>>> not alter it. Because thousands of vehicles are discarded, the scenario
>>>>> output becomes unreliable for me.
>>>>>
>>>>> Now I guess a simple way to solve this is to put both the route and
>>>>> vehicle file in the list of additional files in the correct order. This
>>>>> simple solution works, the errors about the unsorted route file do not
>>>>> occur. But when running the simulation now, the simulation suddenly closes
>>>>> with a segmentation fault after 1503 steps. This happens repeatedly and
>>>>> both with and without GUI. Apart from some warnings about teleported
>>>>> vehicles and changed depart speeds because of close by junctions, the
>>>>> simulation seems to run normally up to the segmentation fault. So I guess 
>>>>> I
>>>>> ran into another bug? I added the scenario for which the segmentation 
>>>>> fault
>>>>> occurs. I simplified the scenario by removing some files and flags again
>>>>> and checked that the fault still occurs. The scenario can be run by 
>>>>> running
>>>>> sumo or sumo-gui on the provided configuration file.
>>>>>
>>>>> Greetings,
>>>>> Pieter
>>>>>
>>>>>
>>>>> On 5 February 2014 12:52, Jakob Erdmann <[email protected]>wrote:
>>>>>
>>>>>> Hello,
>>>>>> I think I have finally figured out the underlying misunderstanding.
>>>>>> Please read the following (new) documentation:
>>>>>> http://sumo-sim.org/wiki/SUMO#Loading_order_of_input_files
>>>>>>
>>>>>> http://sumo-sim.org/wiki/Demand/Routes_from_Observation_Points#How_to_include_the_files
>>>>>> regards,
>>>>>> Jakob
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2014-02-04 Jakob Erdmann <[email protected]>:
>>>>>>
>>>>>> Hello,
>>>>>>> regarding 1)
>>>>>>> in config-files,
>>>>>>> <additional-files value="file1 file2 file3"/> and
>>>>>>> <additional-files value="file1,file2,file3"/> should both work. What
>>>>>>> error message do you get?
>>>>>>>
>>>>>>> regarding 2)
>>>>>>> most likely there is something wrong with the route file itself. It
>>>>>>> should generally be possible to use the -r option for route files.
>>>>>>> Only if the routes are unsorted (wrt departure time) you need to use
>>>>>>> -a because -a does not perform incremental loading but loads the whole 
>>>>>>> file
>>>>>>> instead.
>>>>>>>
>>>>>>> Note, that in your route file any <route> elements must come before
>>>>>>> <vehicle route=""> elements referencing the former.
>>>>>>>
>>>>>>> regards,
>>>>>>> Jakob
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2014-02-04 Pieter Loof <[email protected]>:
>>>>>>>
>>>>>>> Hi all,
>>>>>>>>
>>>>>>>> I just tried using the --save-configuration option for both
>>>>>>>> DFRouter and
>>>>>>>> SUMO. It succesfully creates a config file, but I ran into a few
>>>>>>>> small
>>>>>>>> problems.
>>>>>>>>
>>>>>>>> Problem 1:
>>>>>>>>
>>>>>>>> I know that the additional files in a .sumocfg file is a
>>>>>>>> space-separator
>>>>>>>> list, like this:
>>>>>>>>      <additional-files value="file1 file2 file3"/>
>>>>>>>>
>>>>>>>> Now, in whatever way I try to give the additional files as flag to
>>>>>>>> a sumo
>>>>>>>> command, it keeps saving it to the config file in the wrong format.
>>>>>>>> As far
>>>>>>>> as I know the flag for additional files should be a comma-separated
>>>>>>>> list,
>>>>>>>> like this:
>>>>>>>>      sumo -a file1,file2,file
>>>>>>>>
>>>>>>>> But when I run the command and look at the produced config file, I
>>>>>>>> see that
>>>>>>>> the commas are stll there, it looks like this:
>>>>>>>>      <additional-files value="file1,file2,file3"/>
>>>>>>>>
>>>>>>>> So there are still commas in between, and running SUMO with this
>>>>>>>> config
>>>>>>>> file gives errors that I do not receive when the list is
>>>>>>>> space-separated. I
>>>>>>>> tried a few different ways of formatting the "-a <FILE>" using
>>>>>>>> commas or
>>>>>>>> spaces as separator with and without enclosing braces, brackets or
>>>>>>>> quotes,
>>>>>>>> but the generated format is never correct. Am I doing something
>>>>>>>> wrong?
>>>>>>>>
>>>>>>>> Problem 2:
>>>>>>>>
>>>>>>>> When generating the sumo config file, using the flag "-r <FILE>" to
>>>>>>>> give
>>>>>>>> the route file, then the route file is written as
>>>>>>>>      <route-files value=file/>
>>>>>>>>
>>>>>>>> But when running SUMO using the generated config file, errors occur
>>>>>>>> about
>>>>>>>> invalid references to routes. The only solution seems to be to give
>>>>>>>> the
>>>>>>>> route file under the "-a <FILE>" flag. If the route file should be
>>>>>>>> an
>>>>>>>> additional file, then please fix the config generation process or
>>>>>>>> change
>>>>>>>> the documentation about providing the route file.
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Pieter
>>>>>>>>
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>> Managing the Performance of Cloud-Based Applications
>>>>>>>> Take advantage of what the Cloud has to offer - Avoid Common
>>>>>>>> Pitfalls.
>>>>>>>> Read the Whitepaper.
>>>>>>>>
>>>>>>>> http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
>>>>>>>> _______________________________________________
>>>>>>>> sumo-user mailing list
>>>>>>>> [email protected]
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/sumo-user
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
<?xml version="1.0" encoding="UTF-8"?>

<!-- generated on Wed Feb 19 18:52:27 2014 by SUMO dfrouter Version 0.19.0
<?xml version="1.0" encoding="UTF-8"?>

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:noNamespaceSchemaLocation="http://sumo-sim.org/xsd/dfrouterConfiguration.xsd";>

    <input>
        <net-file value="/home/pieter/workspace/pieterthesis/Networks/Rotterdam_auto/Rotterdam.net.xml"/>
        <detector-files value="/home/pieter/workspace/pieterthesis/Networks/Rotterdam_auto/test/Rotterdam.det.xml"/>
        <measure-files value="/home/pieter/workspace/pieterthesis/Networks/Rotterdam_auto/test/Rotterdam.msr.csv"/>
    </input>

    <output>
        <routes-output value="/home/pieter/workspace/pieterthesis/Networks/Rotterdam_auto/test/Rotterdam.rou.xml"/>
    <vehicle depart="0.00" departLane="0" departPos="136.00" departSpeed="max" id="emitter_RWS01_MONIBAS_0151hrl0714ra_0_0" route="126729770_to_64223567#1" type="PKW"/>
    <vehicle depart="10796.20" departLane="0" departPos="392.00" departSpeed="max" id="emitter_RWS01_MONIBAS_0131hrr0158ra_0_10796202" route="7531972_to_64223567#1" type="PKW"/>
</routes>
#!/usr/bin/env python
"""
@file    sort_routes.py
@author  Jakob Erdmann
@author  Michael Behrisch
@date    2011-07-14
@version $Id: sort_routes.py 14677 2013-09-11 08:30:08Z behrisch $

This script sorts the vehicles in the given route file by their depart time
SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
Copyright (C) 2007-2013 DLR (http://www.dlr.de/) and contributors

This file is part of SUMO.
SUMO is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
"""
import sys
import os
import re
from xml.dom import pulldom
from xml.sax import handler
from xml.sax import make_parser
from xml.sax import handler
from optparse import OptionParser

def get_options(args=None):
    USAGE = "Usage: " + sys.argv[0] + " <routefile>"
    optParser = OptionParser()
    optParser.add_option("-o", "--outfile", help="name of output file")
    optParser.add_option("-b", "--big", action="store_true", default=False, 
            help="Use alternative sortign strategy for large files (slower but more memory efficient)")
    options, args = optParser.parse_args(args=args)
    if len(args) != 1:
        sys.exit(USAGE)
    options.routefile = args[0]
    if options.outfile is None:
        options.outfile = options.routefile + ".sorted"
    return options 


def sort_departs(routefilename, outfile):
    routes_doc = pulldom.parse(sys.argv[1])
    vehicles = []
    for event, parsenode in routes_doc:
        if event == pulldom.START_ELEMENT and (parsenode.localName == 'vehicle' or parsenode.localName == 'flow'):
            vehicle = parsenode # now we know it's a vehicle or a flow
            routes_doc.expandNode(vehicle)
            if (parsenode.localName == 'vehicle'):
                depart = int(float(vehicle.getAttribute('depart')))
                vehicles.append((depart, vehicle.toprettyxml(indent="", newl="")))
            elif (parsenode.localName == 'flow'):
                begin = int(float(vehicle.getAttribute('begin')))
                vehicles.append((begin, vehicle.toprettyxml(indent="", newl="")))
    print('read %s elements.' % len(vehicles))
    vehicles.sort()
    for depart, vehiclexml in vehicles:
        outfile.write(" "*4)
        outfile.write(vehiclexml)
        outfile.write("\n")
    print('wrote %s elements.' % len(vehicles))


class RouteHandler(handler.ContentHandler):
    def __init__(self, elements_with_depart):
        self.DEPART_ATTR = {'vehicle' : 'depart', 'flow' : 'begin'}
        self.elements_with_depart = elements_with_depart
        self._depart = None

    def setDocumentLocator(self,locator):
        self.locator = locator

    def startElement(self,name,attrs):
        if name in self.DEPART_ATTR.keys():
            self._depart = attrs[self.DEPART_ATTR[name]]
            self._start_line = self.locator.getLineNumber()

    def endElement(self,name):
        if name in self.DEPART_ATTR.keys():
            end_line = self.locator.getLineNumber()
            self.elements_with_depart.append((self._depart, self._start_line, end_line))


def create_line_index(file):
    print "Building line offset index for %s" % file
    result = []
    offset = 0
    with open(file, 'rb') as f: # need to read binary here for correct offsets
        for line in f:
            result.append(offset)
            offset += len(line)
    return result


def get_element_lines(routefilename):
    # [(depart, line_index_where_element_starts, line_index_where_element_ends), ...]
    print "Parsing %s for line indices and departs" % routefilename
    result = []
    parser = make_parser()
    parser.setContentHandler(RouteHandler(result))
    parser.parse(open(routefilename))
    print "  found %s items" % len(result)
    return result


def copy_elements(routefilename, outfilename, element_lines, line_offsets):
    print "Copying elements from %s to %s sorted by departure" % (
            routefilename, outfilename)
    outfile = open(outfilename, 'w')
    # copy header
    for line in open(routefilename):
        outfile.write(line)
        if '<routes' in line:
            break
    with open(routefilename) as f: # don't read binary here for line end conversion
        for depart, start, end in element_lines:
            # convert from 1-based to 0-based indices
            f.seek(line_offsets[start - 1])
            for i in range(end - start + 1):
                outfile.write(f.readline())
    outfile.write('</routes>')
    outfile.close()


def main(args=None):
    options = get_options(args=args)
    if options.big:
        line_offsets = create_line_index(options.routefile)
        element_lines = get_element_lines(options.routefile)
        element_lines.sort()
        copy_elements(options.routefile, options.outfile, element_lines, line_offsets)
    else:
        outfile = open(options.outfile, 'w')
        for line in open(options.routefile):
            if '<routes>' in line or '<additional>' in line:
                outfile.write('<routes>\n')
                break
            outfile.write(line)
        sort_departs(options.routefile, outfile)
        outfile.write('</routes>')
        outfile.close()


if __name__ == "__main__":
    main()
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
_______________________________________________
sumo-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sumo-user

Reply via email to