Upload
madlyn-grant
View
216
Download
0
Embed Size (px)
Citation preview
Workarounds in Public Transit Modelling with EMME and Perl Matt Carlson & John Armstrong
12th October 2007
21st International EMME Conference, Toronto
Contents
• Introduction to need for workarounds
• Case Studies
• EMME Wish Lists
Introduction
• EMME – Established in the UK in large public transport models:• Railplan (Transport for London)• Docklands Public Transport Model (Docklands Light Railway,
London)• PLANET (Department for Transport)
• However, there are cases where additional tools are needed in addition to EMME:• Processing electronic timetable data for rail services input to
EMME• ‘Cleaning up’ EMME outputs of transit lines• Reversing of EMME transit lines
• Hence scripting languages used
Scripting Languages
• AWK used with EMME/2 for decades
• Python used increasingly with Emme 3
• Perl used recently in Arup
• Doesn’t matter too much: just need to get the job done
Case Study 1 – Exporting EMME Transit Lines
• No matter how ‘readable’ the data is when imported to EMME, it is exported like this…
• Awkward spacing• No ‘clues’ about nodes
(multiple 6-digit nodes at stations don’t easily convert to unique and readable 4 character labels)
Step 1
• Remove carriage returns where us3 values are ‘orphaned’ on to new lines
Step 2
• Read all elements from the tidier file…
• …and re-export desired data with Names
Wish List 1
• To be able to choose which data is exported by EMME, including Database attributes
Case Study 2 – Reversing Transit Lines
INRO has included a facility in the network editor for reversing lines interactively, but what if:
1. An entire network needs to be transposed (such as to create a PM network from an AM)?
2. The reverse journeys required different nodes?
Use a script to reverse the lines
Example Network – DLR
04
02
ja
04
09
ka
BB800E
BB801W
C A843U
DK110EDK110E DK110E
DK110EDK110E DK110E
DK110E
DK110E
DK110E
DK110E DK110E DK110E DK110E DK110E DK110E DK110E
DK110E
DK110W
DK110WDK110WDK110W
DK110WDK110WDK110W
DK110W
DK110W
DK110W
DK110W
DK110W
DK110W
DK110W
DK110WDK110W
DK110WD
K111
N
DK111N
DK111N
DK111N
DK
11
1N
DK111N
DK
11
1N
DK111N
DK111N
DK1
11N
DK
11
1N
DK111N
DK111N
DK111N
DK11
1S
DK111S
DK11
1S
DK
11
1S
DK1
11S
DK11
1S
DK
11
1S
DK111S
DK
11
1S
DK111S
DK111S
DK111S
DK111S
DK112EDK112E DK112E
DK112E
DK11
2E
DK
11
2E
DK112E
DK
11
2E
DK112E
DK112E
DK112E
DK112EDK112
W
DK112W
DK112W
DK112W
DK
11
2W
DK112W
DK
11
2W
DK112W
DK112W
DK112W
DK112WDK112W
DK112W
DK113EDK113E DK113E
DK113E DK113E DK113E
DK113E
DK113E
DK113EDK113E DK113E
DK113E
DK113W
DK113WDK113WDK113W
DK113W
DK113W
DK113W
DK113WDK113W
DK113WDK113W
DK113W
DK130N
DK130N
DK1
30N
DK
13
0N
DK130
N
DK130N
DK130N
DK130
S
DK130S
DK
13
0S
DK
13
0S
DK1
30S
DK13
0S
DK131E
DK131EDK131E DK131E
DK131ED
K131W
DK131WDK131W
DK131W
DK131W
DK132E
DK132E
DK132E
DK
13
2E
DK132E
DK132E
DK132EDK132E DK132E
DK132E
DK132W
DK132WDK132W
DK132W
DK132W
DK132W
DK
13
2W
DK
132W
DK132W
DK
13
2W
DK133
E
DK133E
DK133E
DK
13
3E
DK133E
DK133E
DK133E DK133E DK133E DK133E DK133E DK133E DK133E
DK133E
DK133W
DK133WDK133WDK133W
DK133WDK133WDK133W
DK133W
DK133W
DK133W
DK
13
3W
DK1
33W
DK133W
DK
13
3W
HX
50
2D
HX
50
2U
H X503D
H X503U
LE510U
LE511U
LE516D
LE517D
LN
84
5U
MP652N
MP652S
ND
82
5N
ND
82
6S
PD513D
PD515D
PD531U
PD
65
2D
PD
65
2U
PD
653D
PD
653U
SC 801D
SC
804D
SC 808D
SC 810D
TT001D
TT001U
TT
00
2D
TT
00
2U
TT
00
3U
TT
00
4D
VE811D
VE834U
WR 651D
WR 651U
WT883U
WT884U
WT
89
0U
WT
91
0D
1 0 5 9 01 0 5 9 1
1 1 4 9 01 1 4 9 1
7 0 1 9 07 0 1 9 1
7 0 2 9 07 0 2 9 1
7 0 3 9 07 0 3 9 1
7 0 4 9 07 0 4 9 1
7 0 7 9 07 0 7 9 1
7 0 8 9 07 0 8 9 1
8 0 2 9 08 0 2 9 1
8 0 3 9 08 0 3 9 1
8 0 4 9 08 0 4 9 1
8 0 5 9 08 0 5 9 1
8 0 6 9 08 0 6 9 1
8 0 7 9 08 0 7 9 1
8 0 8 9 08 0 8 9 1
8 0 9 9 08 0 9 9 1
9 1 1 9 09 1 1 9 1
9 1 3 9 09 1 3 9 1
1 0 0 1 9 01 0 0 1 9 1
1 0 0 2 9 01 0 0 2 9 1 1 0 0 3 9 01 0 0 3 9 1
1 0 0 4 9 01 0 0 4 9 1
1 0 0 5 9 01 0 0 5 9 11 0 0 6 9 01 0 0 6 9 1
1 0 0 7 9 01 0 0 7 9 1 1 0 0 8 9 01 0 0 8 9 1 1 0 0 9 9 01 0 0 9 9 11 0 1 0 9 01 0 1 0 9 1
1 0 1 3 9 01 0 1 3 9 1 1 0 1 4 9 01 0 1 4 9 1
1 0 1 5 9 01 0 1 5 9 1
1 0 1 6 9 01 0 1 6 9 1
1 1 0 5 7 21 1 0 5 7 31 1 0 5 9 0
1 1 0 5 9 11 1 0 5 9 2
1 1 0 7 9 01 1 0 7 9 1
1 1 0 9 7 21 1 0 9 7 3
1 1 1 0 9 01 1 1 0 9 1
1 1 1 1 9 01 1 1 1 9 1
1 2 0 3 7 21 2 0 3 7 31 2 0 3 8 01 2 0 3 9 01 2 0 3 9 1
1 2 0 4 9 01 2 0 4 9 1
3 9 0 5 9 03 9 0 5 9 1
3 9 0 8 9 03 9 0 8 9 1
3 9 0 9 9 03 9 0 9 9 1
8 2 0 1 9 08 2 0 1 9 1
8 2 0 5 9 0
8 2 0 5 9 1
8 2 0 6 9 08 2 0 6 9 1
Example Network (Inset)
• Note separate nodes by direction• To enable line-to-line interchange movements at
complex stations
04
02
ja
04
09
ka
BB800E
BB801W
C A843U
DK110E
DK110E
DK110E
DK110E
DK110E
DK110W
DK110W
DK110W
DK110W
DK110W
DK111N
DK111N
DK111N
DK
11
1N
DK111N
DK1
11N
DK
11
1N
DK1
11N
DK111S
DK
11
1S
DK1
11S
DK111S
DK
11
1S
DK111S
DK1
11S
DK111S
DK112E
DK112E
DK112E
DK
11
2E
DK112E
DK1
12E
DK112E
DK112W
DK112W
DK112W
DK
11
2W
DK112W
DK112W
DK112W
DK113E
DK113E
DK113E
DK113E
DK113E
DK113W
DK113W
DK113W
DK113W
DK113W
DK130N
DK130N
DK130N
DK
13
0N
DK130N
DK1
30N
DK
13
0N
DK1
30N
DK130S
DK
13
0S
DK1
30S
DK130S
DK
13
0S
DK130S
DK130S
DK130S
DK131E
DK131W
DK132E
DK132W
DK133E
DK13
3W
HX
50
2D
HX
50
2U
HX503D
HX503U
LE510U
LE511U
LE516D
LE517D
LN
84
5U
MP652N
MP652S
ND
82
5N
ND
82
6S
PD513D
PD515D
PD531U
PD
65
2D
PD
65
2U
PD
653D
PD
653U
SC 801D
SC
804D
SC 808D
SC 810D
TT001D
TT001U
TT
00
2D
TT
00
2U T
T0
03U
TT0
04
D
VE811D
VE834U
WR 651D
WR 651U
WT883U
WT884U
WT89
0U
WT91
0D
7 0 1 9 07 0 1 9 1
8 0 4 9 08 0 4 9 1
8 0 5 9 0
8 0 5 9 1
8 0 6 9 0
8 0 6 9 1
8 0 7 9 08 0 7 9 1
8 0 8 9 08 0 8 9 1
04
02
ja
04
09
ka
BB800E
BB801W
C A843U
DK110EDK110E DK110E
DK110EDK110E DK110E
DK110E
DK110E
DK110E
DK110E DK110E DK110E DK110E DK110E DK110E DK110E
DK110E
DK110W
DK110WDK110WDK110W
DK110WDK110WDK110W
DK110W
DK110W
DK110W
DK110W
DK110W
DK110W
DK110W
DK110WDK110W
DK110W
DK111N
DK111N
DK111N
DK111N
DK
11
1N
DK111N
DK
11
1N
DK111N
DK111N
DK1
11N
DK
11
1N
DK111N
DK1
11N
DK111N
DK1
11S
DK1
11S
DK111S
DK
11
1S
DK1
11S
DK111S
DK
11
1S
DK111S
DK
11
1S
DK111S
DK111S
DK111S
DK111S
DK112EDK112E DK112E
DK112E
DK112E
DK
11
2E
DK112E
DK
11
2E
DK112E
DK112E
DK112E
DK112EDK112W
DK112W
DK112W
DK112W
DK
11
2W
DK112W
DK
11
2W
DK112W
DK112W
DK112W
DK112WDK112W
DK112W
DK113EDK113E DK113E
DK113E DK113E DK113E
DK113E
DK113E
DK113EDK113E DK113E
DK113E
DK113W
DK113WDK113WDK113W
DK113W
DK113W
DK113W
DK113WDK113W
DK113WDK113W
DK113W
DK130N
DK130N
DK1
30N
DK
13
0N
DK130N
DK1
30N
DK130N
DK1
30S
DK1
30S
DK130S
DK
13
0S
DK1
30S
DK130S
DK131E
DK131EDK131E DK131E
DK131ED
K131W
DK131WDK131W
DK131W
DK131W
DK132E
DK132E
DK132E
DK
13
2E
DK132E
DK132E
DK132EDK132E DK132E
DK132E
DK132W
DK132WDK132W
DK132W
DK132W
DK132W
DK
13
2W
DK132W
DK132W
DK1
32W
DK133E
DK133E
DK133E
DK
13
3E
DK133E
DK133E
DK133E DK133E DK133E DK133E DK133E DK133E DK133E
DK133E
DK133W
DK133WDK133WDK133W
DK133WDK133WDK133W
DK133W
DK133W
DK133W
DK
13
3W
DK133W
DK133W
DK1
33
W
HX
50
2D
HX
50
2U
HX503D
HX503U
LE510U
LE511U
LE516D
LE517D
LN
84
5U
MP652N
MP652S
ND
82
5N
ND
82
6S
PD513D
PD515D
PD531U
PD
65
2D
PD
65
2U
PD
653D
PD
653U
SC 801D
SC
804D
SC 808D
SC 810D
TT001D
TT001U
TT
00
2D
TT
00
2U
TT
00
3U
TT0
04
D
VE811D
VE834U
WR 651D
WR 651U
WT883U
WT884U
WT89
0U
WT91
0D
1 0 5 9 01 0 5 9 1
1 1 4 9 01 1 4 9 1
7 0 1 9 07 0 1 9 1
7 0 2 9 07 0 2 9 1
7 0 3 9 07 0 3 9 1
7 0 4 9 07 0 4 9 1
7 0 7 9 07 0 7 9 1
7 0 8 9 07 0 8 9 1
8 0 2 9 08 0 2 9 1
8 0 3 9 08 0 3 9 1
8 0 4 9 08 0 4 9 1
8 0 5 9 08 0 5 9 1
8 0 6 9 08 0 6 9 1
8 0 7 9 08 0 7 9 1
8 0 8 9 08 0 8 9 1
8 0 9 9 08 0 9 9 1
9 1 1 9 09 1 1 9 1
9 1 3 9 09 1 3 9 1
1 0 0 1 9 01 0 0 1 9 1
1 0 0 2 9 01 0 0 2 9 1 1 0 0 3 9 01 0 0 3 9 1
1 0 0 4 9 01 0 0 4 9 1
1 0 0 5 9 01 0 0 5 9 11 0 0 6 9 01 0 0 6 9 1
1 0 0 7 9 01 0 0 7 9 1 1 0 0 8 9 01 0 0 8 9 1 1 0 0 9 9 01 0 0 9 9 11 0 1 0 9 01 0 1 0 9 1
1 0 1 3 9 01 0 1 3 9 1 1 0 1 4 9 01 0 1 4 9 1
1 0 1 5 9 01 0 1 5 9 1
1 0 1 6 9 01 0 1 6 9 1
1 1 0 5 7 21 1 0 5 7 31 1 0 5 9 0
1 1 0 5 9 11 1 0 5 9 2
1 1 0 7 9 01 1 0 7 9 1
1 1 0 9 7 21 1 0 9 7 3
1 1 1 0 9 01 1 1 0 9 1
1 1 1 1 9 01 1 1 1 9 1
1 2 0 3 7 21 2 0 3 7 31 2 0 3 8 01 2 0 3 9 01 2 0 3 9 1
1 2 0 4 9 01 2 0 4 9 1
3 9 0 5 9 03 9 0 5 9 1
3 9 0 8 9 03 9 0 8 9 1
3 9 0 9 9 03 9 0 9 9 1
8 2 0 1 9 08 2 0 1 9 1
8 2 0 5 9 0
8 2 0 5 9 1
8 2 0 6 9 08 2 0 6 9 1
Reverse Lines
• Use a script to read a ‘tidied’ output:• Input all values into an array• Export in reverse order• Look up opposite node
Wish List 2
• Splitting of stations into so many nodes would be un-necessary if line-to-line transfer information was more easily extracted• Currently there is a need to re-code the network with one node
per line and extract the line-to-line data (as transfer.mac* and transfer.awk*)• Perhaps if something similar to auto turn movements for transit
were output at the end of an assignment…
* See transfer.zip by Heinz Spiess at http://www.inro.ca/en/download/macros.php
Case Study 3 – Processing Transit Line Data
• Railplan Model (Rail, Metro, Tram, Bus)
• Rail is more complicated:• Stopping patterns vary,• Trains join and split,• Timetables change more
frequently
• Other modes simple by comparison• Usually headways only difference
• Need an automated approach
Data Sources 1 – Network Rail CIF
• Network Rail use a ‘Common Interface Format’ (CIF)
• This contains all rail movements in a given timetable period including• Freight Trains• Empty stock movements
• 3 Million+ Lines
• Cryptic Format
• Example: Manchester-London
Data Sources 2 – Issues
• Very little vehicle information• E.g. EMU 125mph – data suited to train pathing not passenger
use
• No capacity information (4/8/12 car???)
• Need to convert to multiple station nodes
• Need to convert to transit line codes
Methods - Software
• Perl is used
• Perl = Practical Extraction and Reporting Language
• Open Source
• Cross Platform
www.perl.org
Methods - Overview
1. Extract subset of ‘relevant’ trains from CIF;
2. For ‘relevant’ trains extract the subset of ‘relevant’ nodes required;
3. Look up ‘relevant’ nodes dependent on direction and TOC;
4. Subtract journey times between ‘relevant’ nodes;
5. Aggregation of identical lines;
6. Allocate a Railplan service code to each line;
7. Assign Vehicle Types;
8. Export in Railplan format;
9. Import to EMME
10. Harmonise times & Fix Join-Split
1 - Extract subset of ‘relevant’ trains from CIF
• Is a passenger service• Not freight or empty stock
• Is in a relevant TOC• Runs in the south east of the UK
• Is within the correct time period• Passes most important station between 7-10am / 10am-4pm
TOC TIPLOC Hierarchy Name
SW WATRLMN 1 London Waterloo
SW SOTON 2 Southampton Cent
SW RDNGSTN 3 Reading
SW RDNG4AB 3 Reading 4A/B
SW PSEA 4 Portsmouth & S
ES WATRINT 1 Waterloo International
ES ASHFKI 2 Ashford (Kent) International
SN VICTRIC 1 London Victoria
SN CHRX 2 London Charing Cross
SN LNDNBDE 3 London Bridge
SN KENOLYM 4 Kensington Olympia
SN ECROYDN 5 East Croydon
SN WCROYDN 6 West Croydon
SN BRGHTN 7 Brighton
SE CHRX 1 London Charing Cross
SE CANONST 2 London Cannon Street
SE LNDNBDE 3 London Bridge
2 - For ‘relevant’ trains extract the subset of ‘relevant’ nodes required
• Skeletal nature of model means stops near edge of model are ignored
3 - Look up ‘relevant’ nodes dependent on direction and TOC
• Stations are often split into separate nodes by direction
• Note:• 4 nodes at Raynes Park• 7 nodes at Waterloo
N E W
N E W
W IM B
W IM B
W IM BW IM B
H A Y D
H A Y D
R A Y N
R A Y N
R A Y N
R A Y N W IM BW IM B
M O T S
M O T S
M O R D
M O R D
S T
S T
S O U T
S O U T
G e n e r a l w o r k s h e e t
R a ilp la n M a in C I F C o n v e r s io n
S c e n a r io 8 2 0 0 : I P 0 . 8
2 0 0 7 - 0 5 - 0 2 1 6 : 4 2 ( M a t t . C a r ls o n )
W A T E R L O O S .W E S T ( L O W N U M B E R S ) ( D O W N )
3 1 0 1 6 6
W A T E R L O O S .W E S T ( L O W N U M B E R S ) ( U P )
3 1 0 1 6 7
W A T E R L O O E U R O S T A R ( B O T H )
3 1 0 1 8 0
W A T E R L O O S .W . ( W IN D S O R ) ( D O W N )
3 1 0 1 8 2
W A T E R L O O S .W . ( W IN D S O R ) ( U P )
3 1 0 1 8 3
W A T E R L O O S .W . ( M ID N U M B E R S ) ( D O W N )
3 1 0 1 8 4W A T E R L O O S .W E S T ( M ID - N U M B E R S ) ( U P )
3 1 0 1 8 5
G e n e r a l w o r k s h e e t
R a ilp la n M a in C I F C o n v e r s io n
S c e n a r io 8 2 0 0 : I P 0 . 8
2 0 0 7 - 0 5 - 0 2 1 6 : 3 6 ( M a t t . C a r ls o n )
M O O R
M O O R
F E N C
F E N C
B L A CB L A CB L A CB L A C
C IT YC IT Y
C A N N
C A N N
C H A R
C H A R
V IC TV IC TV IC TV IC TV IC TV IC TV IC TV IC T
B 'S E
B 'S E
B 'S E
B 'S E
Q U E E
W A T EW A T EW A T EW A T EW A T EW A T EW A T E
W A T E
W A T E
V A U X
V A U X
V A U XV A U X
L O N DL O N DL O N DL O N D
L O N DL O N D
L O N DL O N D
E L E P
E L E P
G e n e r a l w o r k s h e e t
R a ilp la n M a in C I F C o n v e r s io n
S c e n a r io 8 2 0 0 : I P 0 . 8
2 0 0 7 - 0 5 - 0 2 1 6 : 3 9 ( M a t t . C a r ls o n )
4 - Subtract journey times between ‘relevant’ nodes
• The journey time is stored in us3
• This avoids problems with times for ‘irrelevant’ nodes• i.e. subtract the times between modelled nodes after discarding
‘irrelevant’ nodes
5 - Aggregation of identical lines
• Lines with identical stopping patterns are aggregated
• This includes:• noboa• noali
6 - Allocate a Railplan service code to each line
•Lines are named according to TOC, O-D Pair, Direction
TOC Origin Destination Updated Identifier
Direction
CC FENCHRS FN D CC GRAYS UPMNSTR KO U CC UPMNSTR GRAYS KO D CC UPMNSTR PITSEA KO D CC FENCHRS FN U CH MARYLBN MR U CH HWYCOMB BHAMSNH TO D CH MARYLBN MR D CH PADTON XX U CH PADTON XX D ES WATRINT ER D ES WATRINT ER U
7 - Assign Vehicle Types
•Vehicles are assigned according to:•TOC
•Timetabled Type
•Speed
TOC TrainType Speed RailplanTrainAM RailplanTrainIP CC EMU 326 325 CC EMU 75 326 325 CC EMU357 326 325 CC EMU357 100 326 325 CH DMUE 226 225 CH DMUE 100 226 225 CH DMUN 212 210 CH DMUN 75 212 210 CH DMUS 75 212 210 CH DMUT 212 210
8 - Export in Railplan format
• Note: Non-interpolated times
9 - Import to EMME
• Interpolate us3 times with splitime.mac
• Reset noboa and noali flags from us1 and us2• This allows splitime to work with ‘timing points’ as well as stops
10 – Modify in EMME
• Harmonise times for common stop-stop sections
• Fix join-split times
10a – Harmonise Times
• All Stop-to-Stop pairs are consistent and rounded to an integer us3
• Including common Stop-to-Stop pairs on different routes
P D 5 1 8 D
P D 5 1 8 D
P D 5 1 8 D
PD
51
8D
P D 5 2 3 D
P D 5 2 3 D
PD
52
3D
P D 5 2 3 D
P D 5 2 3 D
10b – Fix Join-Split Times
• Sections ‘x’ minutes long where trains stop at a dummy node are:• x-0.01 minutes on main leg• 0.01 minutes on dummy leg
3.0
0
3.0
0
4.9
9
4.0
0
3.0
03
.00
5.0
0
1.3
7
1.0
70
.99
1.2
8
7.0
0
2.0
0 4 .0 0
5 .00
3.0
0
3 .0 0
3.0
0
4.9
9
0.0
1
4.0
0
7.0
0
3.0
0
4.9
9
0.0
1
Transit Lines are Output (as Case Study 1)
• Transit Lines exported:• Node Names
shown for clarity• us3 times
interpolated and ‘bucket-rounded’ to 2 d.p.• Un-necessary info
(us1, us2) removed from file.
Wish List 3
• To model join-split trains as a single line, e.g. Y-shape
• To be able to view transit lines in terms of stop-stop times, not node-node times:• Similar to configurable attributes• Underlying segment data could still
be stored as now
3 1 3 8 5
1 6 0 6 0
7 3 1 7 2
3 6 7 6 2
4 0 1 2 7
1 9 6 8 8
7 7 7 5 3
3 7 8 3 5
5 9 8 8 9
2 9 8 0 2
9 5 1 3 7
1 7 2 9 7 5
2 5 6 9 1
3 0 8 4 9 3
7 4 9 7 7
4 4 9 4 5
7 1 0 1 0
2 9 5 8 8
5 7 2 2 6
2 7 0 5 7
5 9 8 8 8
2 9 1 8 9
4 7 3 0 7
3 6 7 1 2
7 3 0 4 9
6 6 3 3 1
6 6 5 2 8
2 7 2 7 33 8 5 1 8
2 0 9 9 1
4 1 8 2 1
2 5 0 8 5
8 6 9
3 4 9 4
3 8 4 9 1
2 9 9 7 3
3 8 0 1 1
3 0 1 1 8
7 4 6 1 3
8 6 5 4 2
6 0 8 1 5
9 4 4 4 1
2 7 9 3 9
2 1 8 3 9
1 1 3 7 1 2
1 0 3 3 7 0
7 5 5 7 5
3 1 8 6 0
5 0 7 2 2
1 7 6 3 7
7 5 8 0 9
4 8 4 3 3
5 2 1 4 7
2 1 6 2 5
4 1 0 2 0
2 5 6 8 6
8 5 4 4 3
1 0 7 3 0 4
2 5 6 4 2
1 6 2 2 2
7 5 9 0 9
1 7 5 9 7 8
5 4 7 2 0
1 4 8 9 2
9 2 4 6 7
4 8 1 8 7
9 6 0 1 0
4 0 4 7 4 6
4 5 9 5 8 6
2 6 1 8 5 0
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 41 5
1 6
1 7
1 8
1 9
2 0
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
2 9
3 0
3 1
3 2
3 3
3 4
3 5
Conclusions
• Various tedious or tricky operations are made possible by use of a scripting language
• Learning a scripting language pays off very quickly
Matt CarlsonArup
13 Fitzroy Street
LondonW1T 4BQ
UK+44 20 7755 4114
linkedin.com/in/mattcarlson