eclipse-sumo / sumo

Eclipse SUMO is an open source, highly portable, microscopic and continuous traffic simulation package designed to handle large networks. It allows for intermodal simulation including pedestrians and comes with a large set of tools for scenario creation.
https://eclipse.dev/sumo
Eclipse Public License 2.0
2.58k stars 1.44k forks source link

Native installer and packaging for sumo on macOS #15213

Open RobertHilbrich opened 4 months ago

RobertHilbrich commented 4 months ago

Overview

It seems that the macOS packaging approach so far has not be satisfying for a lot of users. We should investigate other options - probably native macOS options.

Requirements

Proposal

Things to discuss

Implementation

Here are my notes from googling and checking the usage of pkgbuild and productbuild. There is also CPack, but I assume, that it is a wiser choice to use macOS tools.

SUMO Framework Package

App Packages

Distribution XML for the Installer

Installer Package

namdre commented 4 months ago

was typo in commit msg.

angelobanse commented 1 month ago

After using this unsigned installer in a new macOS 14 VM (with no homebrew), this is can be said:

But following problems appeared:

-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               sumo-gui [4045]
Path:                  /Applications/SUMO sumo-gui.app/Contents/MacOS/SUMO sumo-gui
Identifier:            sumo-gui
Version:               ???
Code Type:             ARM-64 (Native)
Parent Process:        launchd [1]
User ID:               501

Date/Time:             2024-10-10 12:08:10.5632 +0200
OS Version:            macOS 14.0 (23A344)
Report Version:        12
Anonymous UUID:        D7BDC147-9415-58AC-F8F5-0B924FCE56D0

Time Awake Since Boot: 5200 seconds

System Integrity Protection: enabled

Crashed Thread:        0

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000

Termination Reason:    Namespace DYLD, Code 1 Library missing
Library not loaded: /opt/homebrew/*/libX11.6.dylib
Referenced from: <1FF4D311-14E1-3677-8360-F297F0BE47C6> /Library/Frameworks/EclipseSUMO.framework/Versions/1.21.0/EclipseSUMO/bin/sumo-gui
Reason: tried: '/Library/Frameworks/EclipseSUMO.framework/Versions/Current/EclipseSUMO/lib/libX11.6.dylib' (no such file), '/libX11.6.dylib' (no such file), '/opt/homebrew/*/libX11.6.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/*/libX11.6.dylib' (no such file), '/opt/homebrew/*/libX11.6.dylib' (no such file)
(terminated at launch; ignore backtrace)

Thread 0 Crashed:
0   dyld                                   0x1802f5b48 __abort_with_payload + 8
1   dyld                                   0x180302108 abort_with_payload_wrapper_internal + 104
2   dyld                                   0x18030213c abort_with_payload + 16
3   dyld                                   0x180289518 dyld4::halt(char const*, dyld4::StructuredError const*) + 304
4   dyld                                   0x1802861e8 dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3884
5   dyld                                   0x180284f44 start + 1948

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000006   x1: 0x0000000000000001   x2: 0x000000016da3a7b0   x3: 0x0000000000000093
    x4: 0x000000016da3a3b0   x5: 0x0000000000000000   x6: 0x0000000000000000   x7: 0x0000000000000000
    x8: 0x0000000000000020   x9: 0x000000016da3a321  x10: 0x000000000000000a  x11: 0x0000000000000000
   x12: 0x0000000000000034  x13: 0x1000000000000000  x14: 0x0000000000000004  x15: 0x0000000000008000
   x16: 0x0000000000000209  x17: 0x000000018028237c  x18: 0x0000000000000000  x19: 0x0000000000000000
   x20: 0x000000016da3a3b0  x21: 0x0000000000000093  x22: 0x000000016da3a7b0  x23: 0x0000000000000001
   x24: 0x0000000000000006  x25: 0x000000016da3b218  x26: 0x000000016da3b158  x27: 0x0000000000000000
   x28: 0x000000001f070004   fp: 0x000000016da3a380   lr: 0x0000000180302108
    sp: 0x000000016da3a340   pc: 0x00000001802f5b48 cpsr: 0x80001000
   far: 0x000000010481c000  esr: 0x56000080  Address size fault

Binary Images:
       0x103aec000 -        0x103c9ffff libxerces-c-3.2.dylib (*) <04358baf-8b42-31bb-8419-aee3c9219e7d> /Library/Frameworks/EclipseSUMO.framework/Versions/1.21.0/EclipseSUMO/lib/libxerces-c-3.2.dylib
       0x104198000 -        0x1043cffff libproj.25.dylib (*) <79f9b985-b266-3325-be10-869f65d72a56> /Library/Frameworks/EclipseSUMO.framework/Versions/1.21.0/EclipseSUMO/lib/libproj.25.dylib
       0x103800000 -        0x103817fff libintl.8.dylib (*) <9924fd2d-8556-34b2-add9-ab2838b3359b> /Library/Frameworks/EclipseSUMO.framework/Versions/1.21.0/EclipseSUMO/lib/libintl.8.dylib
       0x10385c000 -        0x103873fff libfmt.11.dylib (*) <127bf9ed-34cf-3e1a-a2b1-fb5818e8c935> /Library/Frameworks/EclipseSUMO.framework/Versions/1.21.0/EclipseSUMO/lib/libfmt.11.dylib
       0x104530000 -        0x1046fffff libFOX-1.6.0.dylib (*) <f2c2ba1f-1988-3776-b718-4628de88549a> /Library/Frameworks/EclipseSUMO.framework/Versions/1.21.0/EclipseSUMO/lib/libFOX-1.6.0.dylib
       0x1023c4000 -        0x102beffff sumo-gui (*) <1ff4d311-14e1-3677-8360-f297f0be47c6> /Library/Frameworks/EclipseSUMO.framework/Versions/1.21.0/EclipseSUMO/bin/sumo-gui
       0x18027f000 -        0x180312873 dyld (*) <ffd8ab66-c9ab-31df-ab80-3a3dff367ddd> /usr/lib/dyld
               0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=907.2M resident=0K(0%) swapped_out_or_unallocated=907.2M(100%)
Writable regions: Total=16.3M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=16.3M(100%)

                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
STACK GUARD                       56.0M        1 
Stack                             8176K        1 
VM_ALLOCATE                         16K        1 
__DATA                            5147K        8 
__DATA_CONST                       534K        7 
__DATA_DIRTY                         7K        1 
__LINKEDIT                       892.6M        7 
__TEXT                            14.7M        7 
dyld private memory               4384K        4 
===========                     =======  ======= 
TOTAL                            981.1M       37 

-----------
Full Report
-----------

{"app_name":"sumo-gui","timestamp":"2024-10-10 12:08:10.00 +0200","app_version":"","slice_uuid":"1ff4d311-14e1-3677-8360-f297f0be47c6","build_version":"","platform":1,"share_with_app_devs":0,"is_first_party":1,"bug_type":"309","os_version":"macOS 14.0 (23A344)","roots_installed":0,"incident_id":"D7219A41-382F-4617-BC24-460F9BBD3855","name":"sumo-gui"}
{
  "uptime" : 5200,
  "procRole" : "Default",
  "version" : 2,
  "userID" : 501,
  "deployVersion" : 210,
  "modelCode" : "VirtualMac2,1",
  "coalitionID" : 1392,
  "osVersion" : {
    "train" : "macOS 14.0",
    "build" : "23A344",
    "releaseType" : "User"
  },
  "captureTime" : "2024-10-10 12:08:10.5632 +0200",
  "codeSigningMonitor" : 0,
  "incident" : "D7219A41-382F-4617-BC24-460F9BBD3855",
  "pid" : 4045,
  "translated" : false,
  "cpuType" : "ARM-64",
  "roots_installed" : 0,
  "bug_type" : "309",
  "procLaunch" : "2024-10-10 12:08:10.5064 +0200",
  "procStartAbsTime" : 125368375186,
  "procExitAbsTime" : 125369733392,
  "procName" : "sumo-gui",
  "procPath" : "\/Applications\/SUMO sumo-gui.app\/Contents\/MacOS\/SUMO sumo-gui",
  "parentProc" : "launchd",
  "parentPid" : 1,
  "coalitionName" : "org.eclipse.sumo.apps.sumo-gui",
  "crashReporterKey" : "D7BDC147-9415-58AC-F8F5-0B924FCE56D0",
  "codeSigningID" : "sumo-gui",
  "codeSigningTeamID" : "",
  "codeSigningFlags" : 570556929,
  "codeSigningValidationCategory" : 10,
  "codeSigningTrustLevel" : 4294967295,
  "instructionByteStream" : {"beforePC":"NAEAANQAAAAQAQAAGAEAACABAAAoAQAAMAEAAEwBAAAwQYDSARAA1A==","atPC":"AwEAVH8jA9X9e7+p\/QMAkcww\/pe\/AwCR\/XvBqP8PX9bAA1\/WEC2A0g=="},
  "sip" : "enabled",
  "exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
  "termination" : {"code":1,"flags":518,"namespace":"DYLD","indicator":"Library missing","details":["(terminated at launch; ignore backtrace)"],"reasons":["Library not loaded: \/opt\/homebrew\/*\/libX11.6.dylib","Referenced from: <1FF4D311-14E1-3677-8360-F297F0BE47C6> \/Library\/Frameworks\/EclipseSUMO.framework\/Versions\/1.21.0\/EclipseSUMO\/bin\/sumo-gui","Reason: tried: '\/Library\/Frameworks\/EclipseSUMO.framework\/Versions\/Current\/EclipseSUMO\/lib\/libX11.6.dylib' (no such file), '\/libX11.6.dylib' (no such file), '\/opt\/homebrew\/*\/libX11.6.dylib' (no such file), '\/System\/Volumes\/Preboot\/Cryptexes\/OS\/opt\/homebrew\/*\/libX11.6.dylib' (no such file), '\/opt\/homebrew\/*\/libX11.6.dylib' (no such file)"]},
  "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
  "faultingThread" : 0,
  "threads" : [{"triggered":true,"id":41018,"threadState":{"x":[{"value":6},{"value":1},{"value":6134409136},{"value":147},{"value":6134408112},{"value":0},{"value":0},{"value":0},{"value":32},{"value":6134407969},{"value":10},{"value":0},{"value":52},{"value":1152921504606846976},{"value":4},{"value":32768},{"value":521},{"value":6445081468,"symbolLocation":416,"symbol":"__simple_bprintf"},{"value":0},{"value":0},{"value":6134408112},{"value":147},{"value":6134409136},{"value":1},{"value":6},{"value":6134411800},{"value":6134411608},{"value":0},{"value":520552452}],"flavor":"ARM_THREAD_STATE64","lr":{"value":6445605128},"cpsr":{"value":2147487744},"fp":{"value":6134408064},"sp":{"value":6134408000},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":6445554504,"matchesCrashFrame":1},"far":{"value":4370579456}},"frames":[{"imageOffset":486216,"symbol":"__abort_with_payload","symbolLocation":8,"imageIndex":6},{"imageOffset":536840,"symbol":"abort_with_payload_wrapper_internal","symbolLocation":104,"imageIndex":6},{"imageOffset":536892,"symbol":"abort_with_payload","symbolLocation":16,"imageIndex":6},{"imageOffset":42264,"symbol":"dyld4::halt(char const*, dyld4::StructuredError const*)","symbolLocation":304,"imageIndex":6},{"imageOffset":29160,"symbol":"dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)","symbolLocation":3884,"imageIndex":6},{"imageOffset":24388,"symbol":"start","symbolLocation":1948,"imageIndex":6}]}],
  "usedImages" : [
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4356751360,
    "size" : 1785856,
    "uuid" : "04358baf-8b42-31bb-8419-aee3c9219e7d",
    "path" : "\/Library\/Frameworks\/EclipseSUMO.framework\/Versions\/1.21.0\/EclipseSUMO\/lib\/libxerces-c-3.2.dylib",
    "name" : "libxerces-c-3.2.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4363747328,
    "size" : 2326528,
    "uuid" : "79f9b985-b266-3325-be10-869f65d72a56",
    "path" : "\/Library\/Frameworks\/EclipseSUMO.framework\/Versions\/1.21.0\/EclipseSUMO\/lib\/libproj.25.dylib",
    "name" : "libproj.25.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4353687552,
    "size" : 98304,
    "uuid" : "9924fd2d-8556-34b2-add9-ab2838b3359b",
    "path" : "\/Library\/Frameworks\/EclipseSUMO.framework\/Versions\/1.21.0\/EclipseSUMO\/lib\/libintl.8.dylib",
    "name" : "libintl.8.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4354064384,
    "size" : 98304,
    "uuid" : "127bf9ed-34cf-3e1a-a2b1-fb5818e8c935",
    "path" : "\/Library\/Frameworks\/EclipseSUMO.framework\/Versions\/1.21.0\/EclipseSUMO\/lib\/libfmt.11.dylib",
    "name" : "libfmt.11.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4367515648,
    "size" : 1900544,
    "uuid" : "f2c2ba1f-1988-3776-b718-4628de88549a",
    "path" : "\/Library\/Frameworks\/EclipseSUMO.framework\/Versions\/1.21.0\/EclipseSUMO\/lib\/libFOX-1.6.0.dylib",
    "name" : "libFOX-1.6.0.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4332470272,
    "size" : 8568832,
    "uuid" : "1ff4d311-14e1-3677-8360-f297f0be47c6",
    "path" : "\/Library\/Frameworks\/EclipseSUMO.framework\/Versions\/1.21.0\/EclipseSUMO\/bin\/sumo-gui",
    "name" : "sumo-gui"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 6445068288,
    "size" : 604276,
    "uuid" : "ffd8ab66-c9ab-31df-ab80-3a3dff367ddd",
    "path" : "\/usr\/lib\/dyld",
    "name" : "dyld"
  },
  {
    "size" : 0,
    "source" : "A",
    "base" : 0,
    "uuid" : "00000000-0000-0000-0000-000000000000"
  }
],
  "sharedCache" : {
  "base" : 6444318720,
  "size" : 4012523520,
  "uuid" : "7906534c-5d2b-3ba8-b9c6-93a5cf1b7b50"
},
  "vmSummary" : "ReadOnly portion of Libraries: Total=907.2M resident=0K(0%) swapped_out_or_unallocated=907.2M(100%)\nWritable regions: Total=16.3M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=16.3M(100%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nSTACK GUARD                       56.0M        1 \nStack                             8176K        1 \nVM_ALLOCATE                         16K        1 \n__DATA                            5147K        8 \n__DATA_CONST                       534K        7 \n__DATA_DIRTY                         7K        1 \n__LINKEDIT                       892.6M        7 \n__TEXT                            14.7M        7 \ndyld private memory               4384K        4 \n===========                     =======  ======= \nTOTAL                            981.1M       37 \n",
  "legacyInfo" : {
  "threadTriggered" : {

  }
},
  "logWritingSignature" : "4746f81565e29451af87796ac75a02023896db97",
  "trialInfo" : {
  "rollouts" : [
    {
      "rolloutId" : "60da5e84ab0ca017dace9abf",
      "factorPackIds" : {

      },
      "deploymentId" : 240000008
    },
    {
      "rolloutId" : "61675b89201f677a9a4cbd65",
      "factorPackIds" : {
        "HEALTH_FEATURE_AVAILABILITY" : "64d14f3e1008ca2fac17a163"
      },
      "deploymentId" : 240000064
    }
  ],
  "experiments" : [

  ]
}
}

Model: VirtualMac2,1, BootROM 10151.1.1, 4 processors, 8 GB, SMC 
Memory Module: unknown, Unknown
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Ethernet, Ethernet, en0
USB Device: USB31Bus
USB Device: Virtual USB Digitizer
USB Device: Virtual USB Keyboard
Thunderbolt Bus: 

angelobanse commented 1 month ago

Here the full tree view of the resulting directories and files inside /Library/Frameworks/EclipseSUMO.framework/Versions/1.21.0/:

Click to expand ``` . ├── EclipseSUMO │   ├── bin │   │   ├── activitygen │   │   ├── dfrouter │   │   ├── duarouter │   │   ├── emissionsDrivingCycle │   │   ├── emissionsMap │   │   ├── jtrrouter │   │   ├── marouter │   │   ├── netconvert │   │   ├── netedit │   │   ├── netgenerate │   │   ├── od2trips │   │   ├── polyconvert │   │   ├── sumo │   │   └── sumo-gui │   ├── include │   │   └── libsumo │   │   ├── BusStop.h │   │   ├── Calibrator.h │   │   ├── ChargingStation.h │   │   ├── Edge.h │   │   ├── GUI.h │   │   ├── InductionLoop.h │   │   ├── Junction.h │   │   ├── Lane.h │   │   ├── LaneArea.h │   │   ├── MeanData.h │   │   ├── MultiEntryExit.h │   │   ├── OverheadWire.h │   │   ├── POI.h │   │   ├── ParkingArea.h │   │   ├── Person.h │   │   ├── Polygon.h │   │   ├── Rerouter.h │   │   ├── Route.h │   │   ├── RouteProbe.h │   │   ├── Simulation.h │   │   ├── TraCIConstants.h │   │   ├── TraCIDefs.h │   │   ├── TrafficLight.h │   │   ├── VariableSpeedSign.h │   │   ├── Vehicle.h │   │   ├── VehicleType.h │   │   ├── libsumo.h │   │   └── libtraci.h │   ├── lib │   │   ├── libFOX-1.6.0.dylib │   │   ├── libfmt.11.dylib │   │   ├── libfontconfig.1.dylib │   │   ├── libfreetype.6.dylib │   │   ├── libgdal.35.dylib │   │   ├── libgl2ps.1.dylib │   │   ├── libintl.8.dylib │   │   ├── libjpeg.8.dylib │   │   ├── libpng16.16.dylib │   │   ├── libproj.25.dylib │   │   ├── libsumocpp.dylib │   │   ├── libtiff.6.dylib │   │   ├── libtracicpp.dylib │   │   └── libxerces-c-3.2.dylib │   └── share │   └── sumo │   ├── cmake │   │   ├── SUMOConfig-release.cmake │   │   └── SUMOConfig.cmake │   ├── data │   │   ├── 3D │   │   │   ├── car-microcargo-citrus.mtl │   │   │   ├── car-microcargo-citrus.obj │   │   │   ├── car-minibus-citrus.mtl │   │   │   ├── car-minibus-citrus.obj │   │   │   ├── car-normal-citrus.mtl │   │   │   ├── car-normal-citrus.obj │   │   │   ├── humanResting.mtl │   │   │   ├── humanResting.obj │   │   │   ├── poleBase.obj │   │   │   ├── tl.obj.mtl │   │   │   ├── tlg.obj │   │   │   ├── tlr.obj │   │   │   ├── tlu.obj │   │   │   ├── tly.obj │   │   │   ├── tram.mtl │   │   │   └── tram.obj │   │   ├── emissions │   │   │   ├── MMPEVEM │   │   │   │   ├── BMW_i3.xml │   │   │   │   ├── Citroen_e-C4.rou.xml │   │   │   │   ├── Hyundai_Ioniq_5.rou.xml │   │   │   │   ├── Opel_Corsa_Electric.rou.xml │   │   │   │   ├── Opel_Mokka-e.rou.xml │   │   │   │   ├── Peugeot_e-2008.rou.xml │   │   │   │   ├── Peugeot_e-208.rou.xml │   │   │   │   ├── SUV.xml │   │   │   │   ├── VW_ID3.xml │   │   │   │   ├── VW_ID4.xml │   │   │   │   └── VW_eUp.xml │   │   │   ├── PHEMlight │   │   │   │   ├── PC_D_EU4.PHEMLight.veh │   │   │   │   ├── PC_D_EU4.csv │   │   │   │   ├── PC_D_EU4_FC.csv │   │   │   │   ├── PC_G_EU4.PHEMLight.veh │   │   │   │   ├── PC_G_EU4.csv │   │   │   │   └── PC_G_EU4_FC.csv │   │   │   └── PHEMlight5 │   │   │   ├── Deterioration.det │   │   │   ├── Mileage.vma │   │   │   ├── NOxCor.tno │   │   │   ├── PC_EU4_D_MW.PHEMLight.veh │   │   │   ├── PC_EU4_D_MW.csv │   │   │   ├── PC_EU4_D_MW_FC.csv │   │   │   ├── PC_EU4_G.PHEMLight.veh │   │   │   ├── PC_EU4_G.csv │   │   │   └── PC_EU4_G_FC.csv │   │   ├── font │   │   │   └── Roboto-Medium.ttf │   │   ├── lang │   │   │   ├── visumEN.txt │   │   │   ├── visumFR.txt │   │   │   └── visumIT.txt │   │   ├── locale │   │   │   ├── de │   │   │   │   └── LC_MESSAGES │   │   │   │   └── sumo.mo │   │   │   ├── es │   │   │   │   └── LC_MESSAGES │   │   │   │   └── sumo.mo │   │   │   ├── fr │   │   │   │   └── LC_MESSAGES │   │   │   │   └── sumo.mo │   │   │   ├── hu │   │   │   │   └── LC_MESSAGES │   │   │   │   └── sumo.mo │   │   │   ├── it │   │   │   │   └── LC_MESSAGES │   │   │   │   └── sumo.mo │   │   │   ├── tr │   │   │   │   └── LC_MESSAGES │   │   │   │   └── sumo.mo │   │   │   ├── zh │   │   │   │   └── LC_MESSAGES │   │   │   │   └── sumo.mo │   │   │   └── zh-Hant │   │   │   └── LC_MESSAGES │   │   │   └── sumo.mo │   │   ├── logo │   │   │   ├── netedit-application-icon.ico │   │   │   ├── sumo-128x138.png │   │   │   ├── sumo-145x50.png │   │   │   └── sumo-application-icon.ico │   │   ├── po │   │   │   ├── de_gui.po │   │   │   ├── de_py.po │   │   │   ├── de_sumo.po │   │   │   ├── es_gui.po │   │   │   ├── es_py.po │   │   │   ├── es_sumo.po │   │   │   ├── fr_gui.po │   │   │   ├── fr_py.po │   │   │   ├── fr_sumo.po │   │   │   ├── hu_gui.po │   │   │   ├── hu_py.po │   │   │   ├── hu_sumo.po │   │   │   ├── it_gui.po │   │   │   ├── it_py.po │   │   │   ├── it_sumo.po │   │   │   ├── tr_gui.po │   │   │   ├── tr_py.po │   │   │   ├── tr_sumo.po │   │   │   ├── zh-Hant_gui.po │   │   │   ├── zh-Hant_py.po │   │   │   ├── zh-Hant_sumo.po │   │   │   ├── zh_gui.po │   │   │   ├── zh_py.po │   │   │   └── zh_sumo.po │   │   ├── typemap │   │   │   ├── navteqPolyconvert.typ.xml │   │   │   ├── opendriveNetconvert.typ.xml │   │   │   ├── opendriveNetconvertBicycle.typ.xml │   │   │   ├── opendriveNetconvertPedestrians.typ.xml │   │   │   ├── osmNetconvert.typ.xml │   │   │   ├── osmNetconvertAerialway.typ.xml │   │   │   ├── osmNetconvertAirport.typ.xml │   │   │   ├── osmNetconvertBicycle.typ.xml │   │   │   ├── osmNetconvertBidiRail.typ.xml │   │   │   ├── osmNetconvertExtraRail.typ.xml │   │   │   ├── osmNetconvertPedestrians.typ.xml │   │   │   ├── osmNetconvertPedestriansNES.typ.xml │   │   │   ├── osmNetconvertRailUsage.typ.xml │   │   │   ├── osmNetconvertShips.typ.xml │   │   │   ├── osmNetconvertUrbanDe.typ.xml │   │   │   ├── osmPolyconvert.typ.xml │   │   │   ├── osmPolyconvertRail.typ.xml │   │   │   └── visumPolyconvert.typ.xml │   │   └── xsd │   │   ├── activitygenConfiguration.xsd │   │   ├── additional_file.xsd │   │   ├── amitran │   │   │   ├── linkdata.xsd │   │   │   ├── network.xsd │   │   │   ├── od.xsd │   │   │   ├── routes.xsd │   │   │   └── trajectories.xsd │   │   ├── baseTypes.xsd │   │   ├── battery_file.xsd │   │   ├── calibratorstats_file.xsd │   │   ├── collision_file.xsd │   │   ├── connections_file.xsd │   │   ├── datamode_file.xsd │   │   ├── det_e1_file.xsd │   │   ├── det_e1meso_file.xsd │   │   ├── det_e2_file.xsd │   │   ├── det_e3_file.xsd │   │   ├── detectors_file.xsd │   │   ├── dfrouterConfiguration.xsd │   │   ├── duarouterConfiguration.xsd │   │   ├── edgediff_file.xsd │   │   ├── edges_file.xsd │   │   ├── emission_file.xsd │   │   ├── fcd_file.xsd │   │   ├── full_file.xsd │   │   ├── genericparameter_file.xsd │   │   ├── instant_e1_file.xsd │   │   ├── jtrrouterConfiguration.xsd │   │   ├── marouterConfiguration.xsd │   │   ├── meandataTypes.xsd │   │   ├── meandata_file.xsd │   │   ├── net_file.xsd │   │   ├── netconvertConfiguration.xsd │   │   ├── neteditConfiguration.xsd │   │   ├── netgenerateConfiguration.xsd │   │   ├── netstate_file.xsd │   │   ├── nodes_file.xsd │   │   ├── od2tripsConfiguration.xsd │   │   ├── person_summary_file.xsd │   │   ├── polyconvertConfiguration.xsd │   │   ├── ptlines_file.xsd │   │   ├── queue_file.xsd │   │   ├── routeTypes.xsd │   │   ├── routes_file.xsd │   │   ├── state_file.xsd │   │   ├── statistic_file.xsd │   │   ├── stopinfo_file.xsd │   │   ├── summary_file.xsd │   │   ├── sumoConfiguration.xsd │   │   ├── tazTypes.xsd │   │   ├── taz_file.xsd │   │   ├── tllogic_file.xsd │   │   ├── tlsstates_file.xsd │   │   ├── tlsswitches_file.xsd │   │   ├── tripinfo_file.xsd │   │   ├── turns_file.xsd │   │   ├── types_file.xsd │   │   ├── viewsettings_file.xsd │   │   └── vtypeprobe_file.xsd │   └── tools │   ├── README_Contributing.md │   ├── assign │   │   ├── bestIteration.py │   │   ├── cadytsIterate.py │   │   ├── costFunctionChecker.py │   │   ├── costMemory.py │   │   ├── duaIterate.py │   │   ├── duaIterateMix.py │   │   ├── duaIterate_analysis.py │   │   ├── duaIterate_reroutingAnalysis.py │   │   └── one-shot.py │   ├── averageTripStatistics.py │   ├── build_config │   │   ├── buildMacOSInstaller.py │   │   ├── buildPyDoc.py │   │   ├── buildWindowsSUMOWheel.py │   │   ├── build_wheels.sh │   │   ├── checkAuthors.py │   │   ├── checkStyle.py │   │   ├── dailyBuildMSVC.py │   │   ├── dailyNetedit.py │   │   ├── dailyUpdateMakeGCC.sh │   │   ├── download_artifact.py │   │   ├── filterDebugDLL.py │   │   ├── history.py │   │   ├── i18n.py │   │   ├── obsoleteTranslations.py │   │   ├── performance.py │   │   ├── pom.py │   │   ├── rebuildConfigDocsAndXsd.py │   │   ├── schemaCheck.py │   │   ├── setup-libsumo.py │   │   ├── setup-libtraci.py │   │   ├── setup-sumo.py │   │   ├── setup-sumolib.py │   │   ├── setup-traci.py │   │   ├── status.py │   │   ├── templates.py │   │   ├── typemap.py │   │   ├── updateDailyVersion.py │   │   ├── updateMessageIDs.py │   │   ├── updateReleaseInfo.py │   │   ├── version.py │   │   ├── wheels.sh │   │   └── wix.py │   ├── contributed │   │   ├── convertMapMat2XML.M │   │   ├── lisum │   │   │   └── pom.xml │   │   ├── saga │   │   ├── sumopy │   │   │   ├── __init__.py │   │   │   ├── agilepy │   │   │   │   ├── __init__.py │   │   │   │   ├── lib_base │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── arrayman.py │   │   │   │   │   ├── classman.py │   │   │   │   │   ├── exports.py │   │   │   │   │   ├── geometry.py │   │   │   │   │   ├── imports.py │   │   │   │   │   ├── logger.py │   │   │   │   │   ├── misc.py │   │   │   │   │   ├── processes.py │   │   │   │   │   ├── test_classman_classes.py │   │   │   │   │   ├── test_classman_misc.py │   │   │   │   │   ├── test_classman_save.py │   │   │   │   │   ├── test_classman_tables.py │   │   │   │   │   ├── test_polylines.xml │   │   │   │   │   └── xmlman.py │   │   │   │   ├── lib_misc │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── docgen.py │   │   │   │   │   ├── matplotlibtools.py │   │   │   │   │   └── runner.py │   │   │   │   └── lib_wx │   │   │   │   ├── __init__.py │   │   │   │   ├── images │   │   │   │   │   ├── Document_Export_24px.png │   │   │   │   │   ├── Document_Import_24px.png │   │   │   │   │   ├── arrow_cursor_drag_16px.png │   │   │   │   │   ├── arrow_cursor_drag_24px.png │   │   │   │   │   ├── arrow_cursor_drag_32px.png │   │   │   │   │   ├── circle_empty_16px.png │   │   │   │   │   ├── circle_empty_24px.png │   │   │   │   │   ├── fig_menu_icon.png │   │   │   │   │   ├── gtk-zoom-fit.png │   │   │   │   │   ├── gtk_2fit_zoom_16px.png │   │   │   │   │   ├── gtk_2fit_zoom_24px.png │   │   │   │   │   ├── gtk_2fit_zoom_32px.png │   │   │   │   │   ├── gtk_2fit_zoom_48px.png │   │   │   │   │   ├── gtk_2in_zoom_16px.png │   │   │   │   │   ├── gtk_2in_zoom_24px.png │   │   │   │   │   ├── gtk_2in_zoom_32px.png │   │   │   │   │   ├── gtk_2out_zoom_16px.png │   │   │   │   │   ├── gtk_2out_zoom_24px.png │   │   │   │   │   ├── gtk_2out_zoom_32px.png │   │   │   │   │   ├── gtk_configure_24px.png │   │   │   │   │   ├── gtk_fit_zoom_24px.png │   │   │   │   │   ├── gtk_in_zoom_24px.png │   │   │   │   │   ├── gtk_out_zoom_24px.png │   │   │   │   │   ├── gtk_print_16px.png │   │   │   │   │   ├── gtk_print_24px.png │   │   │   │   │   ├── gtk_sort_16px.png │   │   │   │   │   ├── gtk_sort_24px.png │   │   │   │   │   ├── gtk_sort_32px.png │   │   │   │   │   ├── gtk_sortdown_16px.png │   │   │   │   │   ├── gtk_sortdown_24px.png │   │   │   │   │   ├── gtk_sortdown_32px.png │   │   │   │   │   ├── icon_browse_24px.png │   │   │   │   │   ├── icon_results_24px.png │   │   │   │   │   ├── icon_select_components.png │   │   │   │   │   ├── line_16px.png │   │   │   │   │   ├── line_24px.png │   │   │   │   │   ├── magnifier-zoom-in.png │   │   │   │   │   ├── move_vertex_24px.png │   │   │   │   │   ├── polygon2_24px.png │   │   │   │   │   ├── polygon_24px.png │   │   │   │   │   └── polyline_24px.png │   │   │   │   ├── mainframe.py │   │   │   │   ├── modulegui.py │   │   │   │   ├── objbrowser.py │   │   │   │   ├── objpanel.py │   │   │   │   ├── ogleditor.py │   │   │   │   ├── processdialog.py │   │   │   │   ├── test_app.py │   │   │   │   ├── test_glcanvas.py │   │   │   │   ├── test_notebook.py │   │   │   │   ├── test_polylines.xml │   │   │   │   ├── toolbox.py │   │   │   │   └── wxmisc.py │   │   │   ├── coremodules │   │   │   │   ├── __init__.py │   │   │   │   ├── demand │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── demand.py │   │   │   │   │   ├── demandbase.py │   │   │   │   │   ├── detectorflows.py │   │   │   │   │   ├── detectorflows_wxgui.py │   │   │   │   │   ├── images │   │   │   │   │   │   ├── fig_detectorflows_24px.png │   │   │   │   │   │   ├── fig_od_16px.png │   │   │   │   │   │   ├── fig_od_24px.png │   │   │   │   │   │   ├── fig_od_32px.png │   │   │   │   │   │   ├── fig_public_transport_24px.png │   │   │   │   │   │   ├── fig_public_transport_32px.png │   │   │   │   │   │   ├── fig_turnflow_16px.png │   │   │   │   │   │   ├── fig_turnflow_24px.png │   │   │   │   │   │   ├── fig_turnflow_32px.png │   │   │   │   │   │   ├── icon_mpl.png │   │   │   │   │   │   ├── icon_virtualpopulation.jpg │   │   │   │   │   │   ├── route3_24px.png │   │   │   │   │   │   ├── trip3_24px.png │   │   │   │   │   │   └── vehicle_24px.png │   │   │   │   │   ├── origin_to_destination.py │   │   │   │   │   ├── origin_to_destination_mpl.py │   │   │   │   │   ├── origin_to_destination_wxgui.py │   │   │   │   │   ├── publictransportservices.py │   │   │   │   │   ├── publictransportservices_wxgui.py │   │   │   │   │   ├── turnflows.py │   │   │   │   │   ├── turnflows_wxgui.py │   │   │   │   │   ├── vehicles.py │   │   │   │   │   ├── virtualpop.py │   │   │   │   │   ├── virtualpop_results.py │   │   │   │   │   ├── virtualpop_results_mpl.py │   │   │   │   │   ├── virtualpop_wxgui.py │   │   │   │   │   └── wxgui.py │   │   │   │   ├── landuse │   │   │   │   │   ├── CREATE_ZONES.py │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── images │   │   │   │   │   │   ├── Files-Osm-icon_16px.png │   │   │   │   │   │   ├── Files-Osm-icon_24.png │   │   │   │   │   │   ├── Files-Osm-icon_32px.png │   │   │   │   │   │   ├── city-icon_24px.png │   │   │   │   │   │   ├── fig_facility.png │   │   │   │   │   │   ├── fig_zone.png │   │   │   │   │   │   ├── fig_zone_24px.png │   │   │   │   │   │   ├── fig_zone_green.png │   │   │   │   │   │   ├── fig_zone_green_24px.png │   │   │   │   │   │   ├── gtk_configure_24px.png │   │   │   │   │   │   ├── icon_sumo_24px.png │   │   │   │   │   │   ├── icon_sumo_32px.png │   │   │   │   │   │   ├── map_24px.png │   │   │   │   │   │   ├── map_add_24px.png │   │   │   │   │   │   └── map_del_24px.png │   │   │   │   │   ├── landuse.py │   │   │   │   │   ├── maps.py │   │   │   │   │   └── wxgui.py │   │   │   │   ├── misc │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── images │   │   │   │   │   │   └── icon_mpl.png │   │   │   │   │   ├── matplottools.py │   │   │   │   │   ├── shapefile.py │   │   │   │   │   └── shapeformat.py │   │   │   │   ├── modules_common.py │   │   │   │   ├── network │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── images │   │   │   │   │   │   ├── Files-Osm-icon_16px.png │   │   │   │   │   │   ├── Files-Osm-icon_24.png │   │   │   │   │   │   ├── Files-Osm-icon_32px.png │   │   │   │   │   │   ├── fig_connection.png │   │   │   │   │   │   ├── fig_crossing.png │   │   │   │   │   │   ├── fig_crossing_24px.png │   │   │   │   │   │   ├── fig_crossing_32px.png │   │   │   │   │   │   ├── fig_link.png │   │   │   │   │   │   ├── fig_node.png │   │   │   │   │   │   ├── gtk_configure_24px.png │   │   │   │   │   │   ├── icon_graph.png │   │   │   │   │   │   ├── icon_mpl.png │   │   │   │   │   │   ├── icon_station.png │   │   │   │   │   │   ├── icon_sumo_24px.png │   │   │   │   │   │   ├── icon_sumo_32px.png │   │   │   │   │   │   ├── icon_turnratio.png │   │   │   │   │   │   └── netedit.png │   │   │   │   │   ├── netconvert.py │   │   │   │   │   ├── netedit_config.xml │   │   │   │   │   ├── netgenerate.py │   │   │   │   │   ├── network.py │   │   │   │   │   ├── network_editor.py │   │   │   │   │   ├── networktools.py │   │   │   │   │   ├── networkxtools.py │   │   │   │   │   ├── osmnx_import.py │   │   │   │   │   ├── publictransportnet.py │   │   │   │   │   ├── publictransportnet_wxgui.py │   │   │   │   │   ├── routing.py │   │   │   │   │   └── wxgui.py │   │   │   │   ├── scenario │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── images │   │   │   │   │   │   └── city-icon_24px.png │   │   │   │   │   ├── scenario.py │   │   │   │   │   └── wxgui.py │   │   │   │   └── simulation │   │   │   │   ├── __init__.py │   │   │   │   ├── images │   │   │   │   │   ├── icon_mpl.png │   │   │   │   │   ├── icon_results_24px.png │   │   │   │   │   └── icon_sumo.png │   │   │   │   ├── result_oglviewer.py │   │   │   │   ├── results.py │   │   │   │   ├── results_mpl.py │   │   │   │   ├── simplaconfig.py │   │   │   │   ├── simulation.py │   │   │   │   ├── simulationbase.py │   │   │   │   ├── sumo.py │   │   │   │   ├── sumo_guiconfig.xml │   │   │   │   ├── sumo_virtualpop.py │   │   │   │   ├── sumo_virtualpop_cml.bash │   │   │   │   ├── sumo_virtualpop_iterate.py │   │   │   │   ├── taxi.py │   │   │   │   └── wxgui.py │   │   │   ├── examples │   │   │   │   ├── demo_od_turnflows │   │   │   │   │   ├── demo_dem_od_bikes.csv │   │   │   │   │   └── demo_dem_tf_car.csv │   │   │   │   └── scripts │   │   │   │   └── sumopy_sim.py │   │   │   ├── fixHeader.sh │   │   │   ├── images │   │   │   │   ├── icon_SUMOPy_big.png │   │   │   │   └── icon_sumopy.png │   │   │   ├── plugins │   │   │   │   ├── __init__.py │   │   │   │   ├── common │   │   │   │   │   ├── __init__.py │   │   │   │   │   └── wxgui.py │   │   │   │   ├── hcprt │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── hcprt.py │   │   │   │   │   ├── images │   │   │   │   │   │   ├── icon_hcprt.png │   │   │   │   │   │   ├── icon_mpl.png │   │   │   │   │   │   └── icon_results_24px.png │   │   │   │   │   ├── results_mpl.py │   │   │   │   │   └── wxgui.py │   │   │   │   ├── mapmatching │   │   │   │   │   ├── __init__.py │   │   │   │   │   ├── images │   │   │   │   │   │   ├── icon_g.png │   │   │   │   │   │   ├── icon_gps.png │   │   │   │   │   │   ├── icon_gps_large.png │   │   │   │   │   │   ├── icon_od.png │   │   │   │   │   │   ├── icon_odmatrix.png │   │   │   │   │   │   ├── icon_results_24px.png │   │   │   │   │   │   ├── icon_sim.png │   │   │   │   │   │   └── icon_vp.png │   │   │   │   │   ├── mapmatching.py │   │   │   │   │   ├── results_mpl.py │   │   │   │   │   └── wxgui.py │   │   │   │   └── prt │   │   │   │   ├── __init__.py │   │   │   │   ├── images │   │   │   │   │   ├── icon_compressor.png │   │   │   │   │   ├── icon_mpl.png │   │   │   │   │   ├── icon_prt.png │   │   │   │   │   ├── icon_results_24px.png │   │   │   │   │   └── icon_sumo.png │   │   │   │   ├── prt.py │   │   │   │   ├── results_mpl.py │   │   │   │   └── wxgui.py │   │   │   ├── sumopy_gui.py │   │   │   └── sumopy_userman_v01_contrib.pdf │   │   └── traci4matlab │   ├── countEdgeUsage.py │   ├── createScreenshotSequence.py │   ├── createVehTypeDistribution.py │   ├── detector │   │   ├── aggregateFlows.py │   │   ├── detector.py │   │   ├── edgeDataFromFlow.py │   │   ├── filterFlows.py │   │   ├── flowFromEdgeData.py │   │   ├── flowFromRoutes.py │   │   ├── flowrouter.py │   │   ├── mapDetectors.py │   │   ├── plotFlows.py │   │   ├── routeUsage.py │   │   └── validate.py │   ├── devel │   │   ├── checkTests.py │   │   ├── debug2sel.py │   │   ├── debug2shapes.py │   │   ├── longpath.py │   │   ├── orphaned_tests.py │   │   ├── rebuild_cscope.sh │   │   ├── scalability.py │   │   └── timing.py │   ├── distributeChargingStations.py │   ├── district │   │   ├── aggregateAndSplitMatrices.py │   │   ├── countConnectionsInDistricts.py │   │   ├── districtMapper.py │   │   ├── filterDistricts.py │   │   ├── gridDistricts.py │   │   └── stationDistricts.py │   ├── drt │   │   ├── darpSolvers.py │   │   ├── drtOnline.py │   │   ├── drtOrtools.py │   │   ├── orToolsDataModel.py │   │   └── ortools_pdp.py │   ├── edgesInDistricts.py │   ├── emissions │   │   ├── findMinDiffModel.py │   │   ├── hbefa2sumo.py │   │   └── nefz.py │   ├── extractTest.py │   ├── fcdReplay.py │   ├── findAllRoutes.py │   ├── game │   │   ├── A10KW │   │   │   ├── build.sh │   │   │   ├── extra.rou.xml │   │   │   ├── osm.net.xml │   │   │   ├── osm.passenger.rou.xml │   │   │   ├── osm.passenger_mw.rou.xml │   │   │   ├── osm.passenger_mwb.rou.xml │   │   │   ├── osm.poly.xml │   │   │   ├── osm.truck.rou.xml │   │   │   ├── osm.truck_mw.rou.xml │   │   │   ├── osm.truck_mwb.rou.xml │   │   │   └── osm.view.xml │   │   ├── A10KW.sumocfg │   │   ├── DRT │   │   │   ├── buildDRT.sh │   │   │   ├── drt.pois.xml │   │   │   ├── drt.rou.xml │   │   │   ├── drt2.rou.xml │   │   │   ├── drt_demo.rou.xml │   │   │   ├── drtstops.xml │   │   │   ├── gv.xml │   │   │   ├── osm.net.xml │   │   │   ├── randomRides.py │   │   │   ├── rides.xml │   │   │   ├── rides2.xml │   │   │   ├── rides3.xml │   │   │   └── rides_demo.xml │   │   ├── DRT.sumocfg │   │   ├── DRT2.sumocfg │   │   ├── DRT_demo.sumocfg │   │   ├── bs3Dosm.sumocfg │   │   ├── bs3d │   │   │   ├── bs.net.xml │   │   │   ├── bs.netccfg │   │   │   ├── bs3.3ds │   │   │   ├── bs3d.rou.xml │   │   │   ├── bs3d.settings.xml │   │   │   ├── bsplain.con.xml │   │   │   ├── bsplain.edg.xml │   │   │   ├── bsplain.nod.xml │   │   │   ├── bsplain.tll.xml │   │   │   └── view_B.xml │   │   ├── bs3d.sumocfg │   │   ├── corridor │   │   │   ├── corridor.net.xml │   │   │   ├── corridor.rou.xml │   │   │   ├── corridor.settings.xml │   │   │   └── dlr.gif │   │   ├── corridor.sumocfg │   │   ├── cross │   │   │   ├── cross.con.xml │   │   │   ├── cross.edg.xml │   │   │   ├── cross.net.xml │   │   │   ├── cross.netccfg │   │   │   ├── cross.nod.xml │   │   │   ├── cross.png │   │   │   ├── cross.rou.xml │   │   │   ├── cross.settings.xml │   │   │   ├── cross.tls.add.xml │   │   │   ├── cross.tls_opt.add.xml │   │   │   └── cross3d.settings.xml │   │   ├── cross.sumocfg │   │   ├── cross3d.sumocfg.disabled │   │   ├── cross_demo.sumocfg │   │   ├── cross_opt.sumocfg.disabled │   │   ├── dlr.gif │   │   ├── fkk_in │   │   │   ├── 678000_5405000_small.png │   │   │   ├── fkk_in.rou.xml │   │   │   ├── fkk_in.settings.xml │   │   │   ├── fkk_in.tls.add.xml │   │   │   ├── ingolstadt.net.xml.gz │   │   │   └── phasen.png │   │   ├── fkk_in.sumocfg │   │   ├── grid6 │   │   │   ├── dlr.gif │   │   │   ├── grid6.con.xml │   │   │   ├── grid6.edg.xml │   │   │   ├── grid6.net.xml │   │   │   ├── grid6.netccfg │   │   │   ├── grid6.nod.xml │   │   │   ├── grid6.poi.xml │   │   │   ├── grid6.rou.xml │   │   │   ├── grid6.tll.xml │   │   │   └── settings.xml │   │   ├── grid6.sumocfg │   │   ├── highway │   │   │   ├── highway.net.xml │   │   │   ├── highway.rou.xml │   │   │   ├── highway_bremen.gif │   │   │   └── settings.xml │   │   ├── highway.sumocfg │   │   ├── hiking │   │   │   ├── hiking.net.xml │   │   │   ├── hiking.rou.xml │   │   │   ├── hiking.sumocfg │   │   │   ├── log │   │   │   └── view.xml │   │   ├── hiking.py │   │   ├── input_additional.add.xml │   │   ├── kuehne │   │   │   ├── dlr.gif │   │   │   ├── kuehne.net.xml │   │   │   ├── kuehne.netgcfg │   │   │   ├── kuehne.rou.xml │   │   │   └── settings.xml │   │   ├── kuehne.sumocfg.disabled │   │   ├── minwait.py │   │   ├── qr_sumo.dlr.de.gif │   │   ├── racing │   │   │   ├── racing.rou.xml │   │   │   ├── racing.sumocfg │   │   │   ├── racing.typ.xml │   │   │   ├── rerouter.add.xml │   │   │   ├── spreewaldring.edg.xml │   │   │   ├── spreewaldring.net.xml │   │   │   ├── spreewaldring.netccfg │   │   │   ├── spreewaldring.nod.xml │   │   │   ├── spreewaldring.osm │   │   │   └── view.xml │   │   ├── racing.py │   │   ├── ramp │   │   │   ├── ramp.net.xml │   │   │   ├── ramp.rou.xml │   │   │   └── ramp_settings.xml │   │   ├── ramp.sumocfg │   │   ├── rebuild_networks.sh │   │   ├── runner.py │   │   ├── runner.spec │   │   ├── sounds │   │   │   ├── car_horn1.wav │   │   │   ├── car_horn2.wav │   │   │   ├── car_horn3.wav │   │   │   └── license.txt │   │   ├── square │   │   │   ├── dlr.gif │   │   │   ├── settings.xml │   │   │   ├── square.net.xml │   │   │   ├── square.netgcfg │   │   │   ├── square.poi.xml │   │   │   ├── square.rou.xml │   │   │   └── square.tll.xml │   │   ├── square.sumocfg │   │   └── sumo_logo.gif │   ├── generateBidiDistricts.py │   ├── generateContinuousRerouters.py │   ├── generateParkingAreaRerouters.py │   ├── generateParkingAreas.py │   ├── generateParkingLots.py │   ├── generateRailSignalConstraints.py │   ├── generateRerouters.py │   ├── import │   │   ├── citybrain │   │   │   ├── citybrain_flow.py │   │   │   ├── citybrain_infostep.py │   │   │   └── citybrain_road.py │   │   ├── dxf │   │   │   └── dxf2jupedsim.py │   │   ├── gtfs │   │   │   ├── gtfs2fcd.py │   │   │   ├── gtfs2osm.py │   │   │   └── gtfs2pt.py │   │   ├── matsim │   │   │   └── matsim_importPlans.py │   │   ├── opendrive │   │   │   └── signal_POIs_from_xodr.py │   │   ├── osm │   │   │   └── osmTaxiStop.py │   │   ├── transportationTestProblems.py │   │   ├── vissim │   │   │   ├── convert_detectors2SUMO.py │   │   │   ├── convert_vissimXML_flows_statRoutes.py │   │   │   ├── tls_vissimXML2SUMOnet_update.py │   │   │   ├── vissim2poly.py │   │   │   ├── vissim_parseBusStops.py │   │   │   └── vissim_parseRoutes.py │   │   └── visum │   │   ├── visum_convertEdgeTypes.py │   │   ├── visum_convertRoutes.py │   │   ├── visum_convertTurnPercentages.py │   │   └── visum_parseZaehlstelle.py │   ├── jtcrouter.py │   ├── lib │   │   └── rmsd.py │   ├── libsumo │   │   └── __init__.py │   ├── libtraci │   │   └── __init__.py │   ├── net │   │   ├── abstractRail.py │   │   ├── buildFullGraph.py │   │   ├── createRoundaboutConnections.py │   │   ├── generateStationEdges.py │   │   ├── net2geojson.py │   │   ├── net2jpsgeometry.py │   │   ├── net2kml.py │   │   ├── net2poly.py │   │   ├── netcheck.py │   │   ├── netdiff.py │   │   ├── netduplicate.py │   │   ├── netmatch.py │   │   ├── network_statistics.py │   │   ├── odConnectionsCheck.py │   │   ├── patchVClasses.py │   │   ├── prepareVISUM.py │   │   ├── reduceLanes.py │   │   ├── reprojectpolys.py │   │   ├── split_at_stops.py │   │   ├── visum_mapDistricts.py │   │   ├── xmlconnections_mapEdges.py │   │   ├── xmledges_applyOffset.py │   │   └── xmlnodes_applyOffset.py │   ├── osmBuild.py │   ├── osmGet.py │   ├── osmWebWizard.py │   ├── output │   │   ├── aggregateBatteryOutput.py │   │   ├── analyze_pedestrian_jam.py │   │   ├── analyze_teleports.py │   │   ├── attributeCompare.py │   │   ├── attributeDiff.py │   │   ├── attributeStats.py │   │   ├── computeCoordination.py │   │   ├── computePassengerCounts.py │   │   ├── computeStoppingPlaceUsage.py │   │   ├── countLaneChanges.py │   │   ├── edgeDataDiff.py │   │   ├── edgeDataStatistics.py │   │   ├── fcdDiff.py │   │   ├── generateITetrisIntersectionMetrics.py │   │   ├── generateITetrisNetworkMetrics.py │   │   ├── generateMeanDataDefinitions.py │   │   ├── generateTLSE1Detectors.py │   │   ├── generateTLSE2Detectors.py │   │   ├── generateTLSE3Detectors.py │   │   ├── netdumpdiff.py │   │   ├── netdumpmean.py │   │   ├── parkingSearchTraffic.py │   │   ├── scheduleStats.py │   │   ├── statisticsElements.py │   │   ├── stopOrder.py │   │   ├── tables.py │   │   ├── timingStats.py │   │   ├── tripStatistics.py │   │   ├── tripinfoByTAZ.py │   │   ├── tripinfoByType.py │   │   ├── tripinfoDiff.py │   │   ├── vehLanes.py │   │   ├── vehroute2amitranOD.py │   │   ├── vehrouteCountValidation.py │   │   ├── vehrouteDiff.py │   │   └── walkFactor.py │   ├── plot_trajectories.py │   ├── ptlines2flows.py │   ├── purgatory │   │   ├── 0103to0110.py │   │   ├── 0123to0130.py │   │   ├── Assignment.py │   │   ├── accelerations.py │   │   ├── assign.py │   │   ├── batch0103to0110.py │   │   ├── binary2plain.py │   │   ├── dijkstra.py │   │   ├── districts2poly.py │   │   ├── elements.py │   │   ├── inputs.py │   │   ├── launcher.py │   │   ├── netextract.py │   │   ├── netstats.py │   │   ├── network.py │   │   ├── osmPopulationExtractor.py │   │   ├── outputs.py │   │   ├── patchNetFiles.py │   │   ├── pedestrianFlow.py │   │   ├── plotXMLAttr.py │   │   ├── plot_tripinfo_distributions.py │   │   ├── pois2inductionLoops.py │   │   ├── route2trips.py │   │   ├── routeChoices.py │   │   └── routes_Join.py │   ├── pyproject.toml │   ├── randomTrips.py │   ├── req_ci.txt │   ├── req_dev.txt │   ├── req_test_server.txt │   ├── requirements.txt │   ├── route │   │   ├── addParkingAreaStops2Routes.py │   │   ├── addParkingAreaStops2Trips.py │   │   ├── addStopDelay.py │   │   ├── addStops2Routes.py │   │   ├── addTAZ.py │   │   ├── analyzePersonPlans.py │   │   ├── checkStopOrder.py │   │   ├── cutRoutes.py │   │   ├── cutTrips.py │   │   ├── implausibleRoutes.py │   │   ├── route2OD.py │   │   ├── route2alts.py │   │   ├── route2poly.py │   │   ├── route2sel.py │   │   ├── routeStats.py │   │   ├── route_1htoDay.py │   │   ├── route_departOffset.py │   │   ├── routecheck.py │   │   ├── routecompare.py │   │   ├── scaleTimeLine.py │   │   ├── sort_routes.py │   │   ├── splitRandom.py │   │   ├── splitRouteFiles.py │   │   ├── tracegenerator.py │   │   ├── tracemapper.py │   │   └── vehicle2flow.py │   ├── routeSampler.py │   ├── runSeeds.py │   ├── shapes │   │   ├── CSV2polyconvertXML.py │   │   ├── circlePolygon.py │   │   ├── poi_alongRoads.py │   │   ├── poi_atTLS.py │   │   └── poi_at_stops.py │   ├── simpla │   │   ├── __init__.py │   │   ├── _config.py │   │   ├── _platoon.py │   │   ├── _platoonmanager.py │   │   ├── _platoonmode.py │   │   ├── _pvehicle.py │   │   ├── _reporting.py │   │   ├── _utils.py │   │   └── template.cfg.xml │   ├── stateReplay.py │   ├── sumolib │   │   ├── __init__.py │   │   ├── color.py │   │   ├── datastructures │   │   │   ├── OrderedMultiSet.py │   │   │   └── __init__.py │   │   ├── files │   │   │   ├── __init__.py │   │   │   ├── additional.py │   │   │   └── selection.py │   │   ├── fpdiff.py │   │   ├── geomhelper.py │   │   ├── miscutils.py │   │   ├── net │   │   │   ├── __init__.py │   │   │   ├── connection.py │   │   │   ├── edge.py │   │   │   ├── generator │   │   │   │   ├── __init__.py │   │   │   │   ├── corridor.py │   │   │   │   ├── cross.py │   │   │   │   ├── demand.py │   │   │   │   ├── grid.py │   │   │   │   ├── network.py │   │   │   │   └── straight.py │   │   │   ├── lane.py │   │   │   ├── netshiftadaptor.py │   │   │   ├── node.py │   │   │   └── roundabout.py │   │   ├── options.py │   │   ├── output │   │   │   ├── __init__.py │   │   │   ├── convert │   │   │   │   ├── __init__.py │   │   │   │   ├── fcdfilter.py │   │   │   │   ├── gpsdat.py │   │   │   │   ├── gpx.py │   │   │   │   ├── ipg.py │   │   │   │   ├── keplerjson.py │   │   │   │   ├── kml.py │   │   │   │   ├── ns2.py │   │   │   │   ├── omnet.py │   │   │   │   ├── phem.py │   │   │   │   ├── poi.py │   │   │   │   ├── shawn.py │   │   │   │   └── trj.py │   │   │   ├── dump.py │   │   │   └── inductionloop.py │   │   ├── route.py │   │   ├── scenario │   │   │   ├── __init__.py │   │   │   ├── checkFlows.py │   │   │   ├── pop2.py │   │   │   ├── runsdb.py │   │   │   ├── scenarios │   │   │   │   ├── BasicCorridor │   │   │   │   │   ├── net.net.xml │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── BasicCross │   │   │   │   │   ├── net.net.xml │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── BasicCrossL │   │   │   │   │   ├── net.net.xml │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── BasicNet │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── BasicRiLSACorridor3 │   │   │   │   │   ├── network.net.xml │   │   │   │   │   ├── routes_BasicRiLSACorridor3(1-31).rou.alt.xml │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── BasicRiLSANet2x2 │   │   │   │   │   ├── network.net.xml │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── RealWorld │   │   │   │   │   ├── RiLSA_example1 │   │   │   │   │   │   ├── genroutes.rou.xml │   │   │   │   │   │   ├── makeRoutes.py │   │   │   │   │   │   ├── measures.add.xml │   │   │   │   │   │   ├── net.net.xml │   │   │   │   │   │   ├── rilsa1.net.xml │   │   │   │   │   │   ├── rilsa1_tls.add.xml │   │   │   │   │   │   ├── routes.rou.xml │   │   │   │   │   │   ├── run.sumo.cfg │   │   │   │   │   │   ├── tls.add.xml │   │   │   │   │   │   └── vtypes.add.xml │   │   │   │   │   ├── RiLSA_example2 │   │   │   │   │   │   ├── genroutes.rou.xml │   │   │   │   │   │   ├── makeRoutes.py │   │   │   │   │   │   ├── net.net.xml │   │   │   │   │   │   ├── rilsa2.net.xml │   │   │   │   │   │   ├── rilsa2_tls.add.xml │   │   │   │   │   │   ├── routes.rou.xml │   │   │   │   │   │   ├── run.sumo.cfg │   │   │   │   │   │   ├── tls_add.add.xml │   │   │   │   │   │   └── vtypes.add.xml │   │   │   │   │   ├── RiLSA_example3 │   │   │   │   │   │   ├── genroutes.rou.xml │   │   │   │   │   │   ├── makeRoutes.py │   │   │   │   │   │   ├── net.net.xml │   │   │   │   │   │   ├── rilsa3.net.xml │   │   │   │   │   │   ├── rilsa3_tls.add.xml │   │   │   │   │   │   ├── routes.rou.xml │   │   │   │   │   │   ├── run.sumo.cfg │   │   │   │   │   │   ├── tls_add.add.xml │   │   │   │   │   │   └── vtypes.add.xml │   │   │   │   │   ├── RiLSA_example4 │   │   │   │   │   │   ├── genroutes.rou.xml │   │   │   │   │   │   ├── makeRoutes.py │   │   │   │   │   │   ├── net.net.xml │   │   │   │   │   │   ├── rilsa4.net.xml │   │   │   │   │   │   ├── rilsa4_tls.add.xml │   │   │   │   │   │   ├── routes.rou.xml │   │   │   │   │   │   ├── run.sumo.cfg │   │   │   │   │   │   ├── tls_add.add.xml │   │   │   │   │   │   └── vtypes.add.xml │   │   │   │   │   ├── acosta │   │   │   │   │   │   ├── acosta.rou.xml │   │   │   │   │   │   ├── acosta_bus_stops.add.xml │   │   │   │   │   │   ├── acosta_buslanes.net.xml │   │   │   │   │   │   ├── acosta_busses.add.xml │   │   │   │   │   │   ├── acosta_detectors.add.xml │   │   │   │   │   │   ├── acosta_tls.add.xml │   │   │   │   │   │   ├── acosta_vtypes.add.xml │   │   │   │   │   │   ├── e1_output.xml │   │   │   │   │   │   ├── meta.txt │   │   │   │   │   │   ├── run.sumo.cfg │   │   │   │   │   │   └── sumo_log.txt │   │   │   │   │   ├── joined │   │   │   │   │   │   ├── joined.rou.xml │   │   │   │   │   │   ├── joined_bus_stops.add.xml │   │   │   │   │   │   ├── joined_buslanes.net.xml │   │   │   │   │   │   ├── joined_busses.add.xml │   │   │   │   │   │   ├── joined_detectors.add.xml │   │   │   │   │   │   ├── joined_tls.add.xml │   │   │   │   │   │   ├── joined_vtypes.add.xml │   │   │   │   │   │   ├── meta.txt │   │   │   │   │   │   ├── run.sumo.cfg │   │   │   │   │   │   └── sumo_log.txt │   │   │   │   │   └── pasubio │   │   │   │   │   ├── meta.txt │   │   │   │   │   ├── pasubio.phase.sumo.cfg │   │   │   │   │   ├── pasubio.phase.tls.add.xml │   │   │   │   │   ├── pasubio.platoon.detectors.add.xml │   │   │   │   │   ├── pasubio.platoon.sumo.cfg │   │   │   │   │   ├── pasubio.platoon.tls.add.xml │   │   │   │   │   ├── pasubio.platoon.tripinfo.xml │   │   │   │   │   ├── pasubio.request.sumo.cfg │   │   │   │   │   ├── pasubio.rou.xml │   │   │   │   │   ├── pasubio.swarm.sumo.cfg │   │   │   │   │   ├── pasubio.swarm.tls.add.xml │   │   │   │   │   ├── pasubio_bus_stops.add.xml │   │   │   │   │   ├── pasubio_buslanes.net.xml │   │   │   │   │   ├── pasubio_busses.add.xml │   │   │   │   │   ├── pasubio_detectors.add.xml │   │   │   │   │   ├── pasubio_tls.add.xml │   │   │   │   │   ├── pasubio_tls_2.add.xml │   │   │   │   │   ├── pasubio_vtypes.add.xml │   │   │   │   │   ├── run.sumo.cfg │   │   │   │   │   └── sumo_log.txt │   │   │   │   ├── RiLSA1 │   │   │   │   │   ├── !rilsaTLSdef.txt │   │   │   │   │   ├── build.netc.cfg │   │   │   │   │   ├── input_connections.con.xml │   │   │   │   │   ├── input_edges.edg.xml │   │   │   │   │   ├── input_nodes.nod.xml │   │   │   │   │   ├── rilsa1.net.xml │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── RiLSA1BothTLS │   │   │   │   │   ├── !rilsaTLSdef.txt │   │   │   │   │   ├── build.netc.cfg │   │   │   │   │   ├── input_connections.con.xml │   │   │   │   │   ├── input_edges.edg.xml │   │   │   │   │   ├── input_nodes.nod.xml │   │   │   │   │   ├── rilsa1both.net.xml │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── RiLSA1OutTLS │   │   │   │   │   ├── !rilsaTLSdef.txt │   │   │   │   │   ├── build.netc.cfg │   │   │   │   │   ├── input_connections.con.xml │   │   │   │   │   ├── input_edges.edg.xml │   │   │   │   │   ├── input_nodes.nod.xml │   │   │   │   │   ├── rilsa1.net.xml │   │   │   │   │   └── tls.add.xml │   │   │   │   ├── __init__.py │   │   │   │   ├── basic_corridor.py │   │   │   │   ├── basic_cross.py │   │   │   │   ├── basic_crossl.py │   │   │   │   ├── basic_net.py │   │   │   │   ├── basic_rilsacorridor3.py │   │   │   │   ├── basic_rilsanet.py │   │   │   │   ├── basic_rilsanet2x2.py │   │   │   │   ├── net.net.xml │   │   │   │   ├── real_world.py │   │   │   │   ├── rilsa1.py │   │   │   │   ├── rilsa1_both_tls.py │   │   │   │   ├── rilsa1_both_tls24.py │   │   │   │   ├── rilsa1_out_tls.py │   │   │   │   └── rilsa1_out_tls24.py │   │   │   └── vtypes │   │   │   ├── vtypes2010.add.xml │   │   │   ├── vtypes2014.add.xml │   │   │   ├── vtypes2020.add.xml │   │   │   ├── vtypes2030.add.xml │   │   │   └── vtypes2040.add.xml │   │   ├── sensors │   │   │   ├── __init__.py │   │   │   └── inductive_loop.py │   │   ├── shapes │   │   │   ├── __init__.py │   │   │   ├── poi.py │   │   │   └── polygon.py │   │   ├── statistics.py │   │   ├── translation.py │   │   ├── vehicletype.py │   │   ├── version.py │   │   ├── visualization │   │   │   ├── __init__.py │   │   │   └── helpers.py │   │   └── xml.py │   ├── tileGet.py │   ├── tls │   │   ├── buildTransitions.py │   │   ├── createTlsCsv.py │   │   ├── tls_check.py │   │   ├── tls_csv2SUMO.py │   │   └── tls_csvSignalGroups.py │   ├── tlsCoordinator.py │   ├── tlsCycleAdaptation.py │   ├── tools.pyproj │   ├── tools.sln │   ├── traceExporter.py │   ├── traci │   │   ├── __init__.py │   │   ├── _busstop.py │   │   ├── _calibrator.py │   │   ├── _chargingstation.py │   │   ├── _edge.py │   │   ├── _gui.py │   │   ├── _inductionloop.py │   │   ├── _junction.py │   │   ├── _lane.py │   │   ├── _lanearea.py │   │   ├── _meandata.py │   │   ├── _multientryexit.py │   │   ├── _overheadwire.py │   │   ├── _parkingarea.py │   │   ├── _person.py │   │   ├── _poi.py │   │   ├── _polygon.py │   │   ├── _rerouter.py │   │   ├── _route.py │   │   ├── _routeprobe.py │   │   ├── _simulation.py │   │   ├── _trafficlight.py │   │   ├── _variablespeedsign.py │   │   ├── _vehicle.py │   │   ├── _vehicletype.py │   │   ├── check_constants.py │   │   ├── connection.py │   │   ├── constants.py │   │   ├── domain.py │   │   ├── exceptions.py │   │   ├── main.py │   │   ├── rebuildConstants.py │   │   ├── step.py │   │   ├── storage.py │   │   └── traciToHex.py │   ├── trigger │   │   ├── csv2vss.py │   │   └── meandata2vss.py │   ├── turn-defs │   │   ├── connections.py │   │   ├── generateTurnDefs.py │   │   ├── generateTurnRatios.py │   │   ├── turnCount2EdgeCount.py │   │   ├── turnFile2EdgeRelations.py │   │   └── turndefinitions.py │   ├── visualization │   │   ├── macrOutput.py │   │   ├── mpl_dump_onNet.py │   │   ├── mpl_dump_timeline.py │   │   ├── mpl_dump_twoAgainst.py │   │   ├── mpl_tripinfos_twoAgainst.py │   │   ├── plotWKT.py │   │   ├── plotXMLAttributes.py │   │   ├── plot_csv_bars.py │   │   ├── plot_csv_pie.py │   │   ├── plot_csv_timeline.py │   │   ├── plot_net_dump.py │   │   ├── plot_net_selection.py │   │   ├── plot_net_speeds.py │   │   ├── plot_net_trafficLights.py │   │   └── plot_summary.py │   ├── webWizard │   │   ├── SimpleWebSocketServer.py │   │   ├── __init__.py │   │   ├── images │   │   │   ├── bicycle.png │   │   │   ├── bus.png │   │   │   ├── favicon.ico │   │   │   ├── generate.png │   │   │   ├── map.png │   │   │   ├── motorcycle.png │   │   │   ├── passenger.png │   │   │   ├── pedestrian.png │   │   │   ├── rail.png │   │   │   ├── rail_urban.png │   │   │   ├── road.png │   │   │   ├── ship.png │   │   │   ├── tram.png │   │   │   └── truck.png │   │   ├── index.html │   │   ├── jquery-3.5.1.min.js │   │   ├── lib.js │   │   ├── script.js │   │   └── style.css │   └── xml │   ├── addSchema.py │   ├── changeAttribute.py │   ├── csv2xml.py │   ├── filterElements.py │   ├── protobuf2xml.py │   ├── xml2csv.py │   ├── xml2protobuf.py │   └── xsd.py └── Resources └── Info.plist ```