SUMO - Simulation of Urban MObility
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
SUMOXMLDefinitions.h
Go to the documentation of this file.
1
/****************************************************************************/
12
// Definitions of elements and attributes known by SUMO
13
/****************************************************************************/
14
// SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
15
// Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
16
/****************************************************************************/
17
//
18
// This file is part of SUMO.
19
// SUMO is free software: you can redistribute it and/or modify
20
// it under the terms of the GNU General Public License as published by
21
// the Free Software Foundation, either version 3 of the License, or
22
// (at your option) any later version.
23
//
24
/****************************************************************************/
25
#ifndef SUMOXMLDefinitions_h
26
#define SUMOXMLDefinitions_h
27
28
29
// ===========================================================================
30
// included modules
31
// ===========================================================================
32
#ifdef _MSC_VER
33
#include <
windows_config.h
>
34
#else
35
#include <
config.h
>
36
#endif
37
38
#include <
utils/common/StringBijection.h
>
39
40
// ===========================================================================
41
// definitions
42
// ===========================================================================
49
enum
SumoXMLTag
{
51
SUMO_TAG_NOTHING
,
53
SUMO_TAG_NET
,
55
SUMO_TAG_EDGE
,
57
SUMO_TAG_LANE
,
59
SUMO_TAG_POI
,
61
SUMO_TAG_POLY
,
63
SUMO_TAG_JUNCTION
,
65
SUMO_TAG_E1DETECTOR
,
66
SUMO_TAG_INDUCTION_LOOP
,
68
SUMO_TAG_E2DETECTOR
,
69
SUMO_TAG_LANE_AREA_DETECTOR
,
71
SUMO_TAG_E3DETECTOR
,
72
SUMO_TAG_ENTRY_EXIT_DETECTOR
,
74
SUMO_TAG_MEANDATA_EDGE
,
76
SUMO_TAG_MEANDATA_LANE
,
78
SUMO_TAG_DET_ENTRY
,
80
SUMO_TAG_DET_EXIT
,
82
SUMO_TAG_EDGEFOLLOWDETECTOR
,
84
SUMO_TAG_INSTANT_INDUCTION_LOOP
,
86
SUMO_TAG_VSS
,
88
SUMO_TAG_CALIBRATOR
,
90
SUMO_TAG_REROUTER
,
92
SUMO_TAG_BUS_STOP
,
94
SUMO_TAG_VTYPEPROBE
,
96
SUMO_TAG_ROUTEPROBE
,
98
SUMO_TAG_ROUTES
,
100
SUMO_TAG_VEHICLE
,
102
SUMO_TAG_VTYPE
,
104
SUMO_TAG_ROUTE
,
106
SUMO_TAG_REQUEST
,
108
SUMO_TAG_SOURCE
,
110
SUMO_TAG_TAZ
,
112
SUMO_TAG_TAZSOURCE
,
114
SUMO_TAG_TAZSINK
,
116
SUMO_TAG_TLLOGIC
,
118
SUMO_TAG_PHASE
,
120
SUMO_TAG_TRIP
,
122
SUMO_TAG_FLOW
,
124
SUMO_TAG_STEP
,
126
SUMO_TAG_INTERVAL
,
128
SUMO_TAG_TIMEDEVENT
,
130
SUMO_TAG_FROMEDGE
,
132
SUMO_TAG_TOEDGE
,
134
SUMO_TAG_SINK
,
135
SUMO_TAG_PARAM
,
136
SUMO_TAG_WAUT
,
137
SUMO_TAG_WAUT_SWITCH
,
138
SUMO_TAG_WAUT_JUNCTION
,
139
SUMO_TAG_SEGMENT
,
140
SUMO_TAG_DELETE
,
141
SUMO_TAG_STOP
,
142
SUMO_TAG_DEST_PROB_REROUTE
,
143
SUMO_TAG_CLOSING_REROUTE
,
144
SUMO_TAG_ROUTE_PROB_REROUTE
,
145
SUMO_TAG_POLYTYPE
,
146
SUMO_TAG_CONNECTION
,
147
SUMO_TAG_PROHIBITION
,
148
SUMO_TAG_SPLIT
,
149
SUMO_TAG_NODE
,
150
SUMO_TAG_TYPE
,
151
SUMO_TAG_DETECTOR_DEFINITION
,
152
SUMO_TAG_ROUTE_DISTRIBUTION
,
153
SUMO_TAG_VTYPE_DISTRIBUTION
,
154
SUMO_TAG_VAPORIZER
,
155
SUMO_TAG_ROUNDABOUT
,
156
SUMO_TAG_JOIN
,
157
SUMO_TAG_JOINEXCLUDE
,
158
159
SUMO_TAG_WAY
,
160
SUMO_TAG_ND
,
161
SUMO_TAG_TAG
,
162
SUMO_TAG_RELATION
,
163
SUMO_TAG_MEMBER
,
164
165
SUMO_TAG_VIEWSETTINGS
,
166
SUMO_TAG_VIEWSETTINGS_DECAL
,
167
SUMO_TAG_VIEWSETTINGS_SCHEME
,
168
SUMO_TAG_VIEWSETTINGS_OPENGL
,
169
SUMO_TAG_VIEWSETTINGS_BACKGROUND
,
170
SUMO_TAG_VIEWSETTINGS_EDGES
,
171
SUMO_TAG_VIEWSETTINGS_VEHICLES
,
172
SUMO_TAG_VIEWSETTINGS_PERSONS
,
173
SUMO_TAG_VIEWSETTINGS_JUNCTIONS
,
174
SUMO_TAG_VIEWSETTINGS_ADDITIONALS
,
175
SUMO_TAG_VIEWSETTINGS_POIS
,
176
SUMO_TAG_VIEWSETTINGS_POLYS
,
177
SUMO_TAG_VIEWSETTINGS_LEGEND
,
178
SUMO_TAG_INCLUDE
,
179
SUMO_TAG_DELAY
,
180
SUMO_TAG_VIEWPORT
,
181
SUMO_TAG_SNAPSHOT
,
182
SUMO_TAG_BREAKPOINTS_FILE
,
183
SUMO_TAG_LOCATION
,
184
SUMO_TAG_COLORSCHEME
,
185
SUMO_TAG_ENTRY
,
186
187
SUMO_TAG_CF_KRAUSS
,
188
SUMO_TAG_CF_KRAUSS_PLUS_SLOPE
,
189
SUMO_TAG_CF_KRAUSS_ORIG1
,
190
SUMO_TAG_CF_SMART_SK
,
191
SUMO_TAG_CF_DANIEL1
,
192
SUMO_TAG_CF_IDM
,
193
SUMO_TAG_CF_IDMM
,
194
SUMO_TAG_CF_PWAGNER2009
,
195
SUMO_TAG_CF_BKERNER
,
196
SUMO_TAG_CF_WIEDEMANN
,
197
198
SUMO_TAG_PERSON
,
199
SUMO_TAG_RIDE
,
200
SUMO_TAG_WALK
,
201
205
AGEN_TAG_GENERAL
,
206
/* streets object */
207
AGEN_TAG_STREET
,
208
209
/* workingHours object */
210
AGEN_TAG_WORKHOURS
,
211
AGEN_TAG_OPENING
,
212
AGEN_TAG_CLOSING
,
213
214
/* school object */
215
AGEN_TAG_SCHOOLS
,
216
AGEN_TAG_SCHOOL
,
217
218
/* busStation and bus objects */
219
AGEN_TAG_BUSSTATION
,
220
AGEN_TAG_BUSLINE
,
221
AGEN_TAG_STATIONS
,
222
AGEN_TAG_REV_STATIONS
,
223
AGEN_TAG_STATION
,
224
AGEN_TAG_FREQUENCY
,
225
226
/* population and children accompaniment brackets */
227
AGEN_TAG_POPULATION
,
228
AGEN_TAG_BRACKET
,
229
//AGEN_TAG_CHILD_ACOMP,
230
231
/* city entrances */
232
AGEN_TAG_CITYGATES
,
233
AGEN_TAG_ENTRANCE
,
234
235
/* parameters */
236
AGEN_TAG_PARAM
237
238
};
239
240
247
enum
SumoXMLAttr
{
249
SUMO_ATTR_NOTHING
,
250
/* common attributes */
251
SUMO_ATTR_ID
,
252
SUMO_ATTR_REFID
,
253
SUMO_ATTR_NAME
,
254
SUMO_ATTR_TYPE
,
255
SUMO_ATTR_PRIORITY
,
256
SUMO_ATTR_NUMLANES
,
257
SUMO_ATTR_SPEED
,
258
SUMO_ATTR_ONEWAY
,
259
SUMO_ATTR_WIDTH
,
260
SUMO_ATTR_REMOVE
,
261
SUMO_ATTR_LENGTH
,
262
SUMO_ATTR_X
,
263
SUMO_ATTR_Y
,
264
SUMO_ATTR_Z
,
265
SUMO_ATTR_CENTER_X
,
266
SUMO_ATTR_CENTER_Y
,
267
SUMO_ATTR_CENTER_Z
,
268
/* sumo-junction attributes */
269
SUMO_ATTR_KEY
,
270
SUMO_ATTR_REQUESTSIZE
,
271
SUMO_ATTR_REQUEST
,
272
SUMO_ATTR_RESPONSE
,
273
SUMO_ATTR_PROGRAMID
,
274
SUMO_ATTR_OFFSET
,
275
SUMO_ATTR_ENDOFFSET
,
276
SUMO_ATTR_INCLANES
,
277
SUMO_ATTR_INTLANES
,
279
SUMO_ATTR_WEIGHT
,
280
SUMO_ATTR_EDGE
,
282
SUMO_ATTR_EDGES
,
283
/* vehicle attributes */
284
SUMO_ATTR_DEPART
,
285
SUMO_ATTR_DEPARTLANE
,
286
SUMO_ATTR_DEPARTPOS
,
287
SUMO_ATTR_DEPARTSPEED
,
288
SUMO_ATTR_ARRIVALLANE
,
289
SUMO_ATTR_ARRIVALPOS
,
290
SUMO_ATTR_ARRIVALSPEED
,
291
SUMO_ATTR_ROUTE
,
292
SUMO_ATTR_MAXSPEED
,
293
SUMO_ATTR_ACCEL
,
294
SUMO_ATTR_DECEL
,
295
SUMO_ATTR_VCLASS
,
296
SUMO_ATTR_REPNUMBER
,
297
SUMO_ATTR_SPEEDFACTOR
,
298
SUMO_ATTR_SPEEDDEV
,
299
SUMO_ATTR_LANE_CHANGE_MODEL
,
300
SUMO_ATTR_MINGAP
,
301
/* Car following model attributes */
302
SUMO_ATTR_SIGMA
,
// used by: Krauss
303
SUMO_ATTR_TAU
,
// Krauss
304
SUMO_ATTR_TMP1
,
305
SUMO_ATTR_TMP2
,
306
SUMO_ATTR_TMP3
,
307
SUMO_ATTR_TMP4
,
308
SUMO_ATTR_TMP5
,
309
/* route alternatives / distribution attributes */
310
SUMO_ATTR_LAST
,
311
SUMO_ATTR_COST
,
312
SUMO_ATTR_PROB
,
313
SUMO_ATTR_PROBS
,
314
SUMO_ATTR_ROUTES
,
315
SUMO_ATTR_VTYPES
,
316
/* trip definition attributes */
317
SUMO_ATTR_LANE
,
318
SUMO_ATTR_LANES
,
319
SUMO_ATTR_FROM
,
320
SUMO_ATTR_TO
,
321
SUMO_ATTR_PERIOD
,
322
SUMO_ATTR_FROM_TAZ
,
323
SUMO_ATTR_TO_TAZ
,
324
SUMO_ATTR_REROUTE
,
325
SUMO_ATTR_PERSON_CAPACITY
,
326
SUMO_ATTR_PERSON_NUMBER
,
327
/* source definitions */
328
SUMO_ATTR_FUNCTION
,
329
SUMO_ATTR_POSITION
,
330
SUMO_ATTR_FREQUENCY
,
331
SUMO_ATTR_STYLE
,
332
SUMO_ATTR_FILE
,
333
SUMO_ATTR_JUNCTION
,
334
SUMO_ATTR_NUMBER
,
335
SUMO_ATTR_DURATION
,
336
SUMO_ATTR_UNTIL
,
338
SUMO_ATTR_TIME
,
340
SUMO_ATTR_BEGIN
,
342
SUMO_ATTR_END
,
344
SUMO_ATTR_TLID
,
346
SUMO_ATTR_TLTYPE
,
348
SUMO_ATTR_TLLINKINDEX
,
350
SUMO_ATTR_SHAPE
,
352
SUMO_ATTR_SPREADTYPE
,
354
SUMO_ATTR_COLOR
,
356
SUMO_ATTR_DIR
,
358
SUMO_ATTR_STATE
,
360
SUMO_ATTR_LAYER
,
362
SUMO_ATTR_FILL
,
363
SUMO_ATTR_PREFIX
,
364
SUMO_ATTR_DISCARD
,
365
366
SUMO_ATTR_FROM_LANE
,
367
SUMO_ATTR_TO_LANE
,
368
SUMO_ATTR_DEST
,
369
SUMO_ATTR_SOURCE
,
370
SUMO_ATTR_VIA
,
372
SUMO_ATTR_NODES
,
373
// Attributes for actuated traffic lights:
375
SUMO_ATTR_MINDURATION
,
377
SUMO_ATTR_MAXDURATION
,
378
// Attributes for junction-internal lanes
380
SUMO_ATTR_FOES
,
381
// Attributes for detectors
383
SUMO_ATTR_CONT
,
384
SUMO_ATTR_HALTING_TIME_THRESHOLD
,
385
SUMO_ATTR_HALTING_SPEED_THRESHOLD
,
386
SUMO_ATTR_JAM_DIST_THRESHOLD
,
387
388
SUMO_ATTR_WAUT_ID
,
389
SUMO_ATTR_JUNCTION_ID
,
390
SUMO_ATTR_PROCEDURE
,
391
SUMO_ATTR_SYNCHRON
,
392
SUMO_ATTR_REF_TIME
,
393
SUMO_ATTR_START_PROG
,
394
395
SUMO_ATTR_OFF
,
396
SUMO_ATTR_FRIENDLY_POS
,
397
SUMO_ATTR_SPLIT_VTYPE
,
398
SUMO_ATTR_UNCONTROLLED
,
399
SUMO_ATTR_PASS
,
400
SUMO_ATTR_BUS_STOP
,
401
SUMO_ATTR_LINE
,
402
SUMO_ATTR_LINES
,
403
SUMO_ATTR_VALUE
,
404
SUMO_ATTR_PROHIBITOR
,
405
SUMO_ATTR_PROHIBITED
,
406
SUMO_ATTR_ALLOW
,
407
SUMO_ATTR_DISALLOW
,
408
SUMO_ATTR_PREFER
,
409
SUMO_ATTR_CONTROLLED_INNER
,
410
SUMO_ATTR_VEHSPERHOUR
,
411
SUMO_ATTR_OUTPUT
,
412
SUMO_ATTR_HEIGHT
,
413
SUMO_ATTR_GUISHAPE
,
414
SUMO_ATTR_OSGFILE
,
415
SUMO_ATTR_IMGFILE
,
416
SUMO_ATTR_ANGLE
,
417
SUMO_ATTR_EMISSIONCLASS
,
418
SUMO_ATTR_IMPATIENCE
,
419
SUMO_ATTR_STARTPOS
,
420
SUMO_ATTR_ENDPOS
,
421
SUMO_ATTR_TRIGGERED
,
422
SUMO_ATTR_PARKING
,
423
SUMO_ATTR_EXPECTED
,
424
SUMO_ATTR_INDEX
,
425
426
SUMO_ATTR_ENTERING
,
427
SUMO_ATTR_EXCLUDE_EMPTY
,
428
SUMO_ATTR_WITH_INTERNAL
,
429
SUMO_ATTR_TRACK_VEHICLES
,
430
SUMO_ATTR_MAX_TRAVELTIME
,
431
SUMO_ATTR_MIN_SAMPLES
,
432
433
SUMO_ATTR_LON
,
434
SUMO_ATTR_LAT
,
435
SUMO_ATTR_K
,
436
SUMO_ATTR_V
,
437
SUMO_ATTR_REF
,
438
SUMO_ATTR_HREF
,
439
SUMO_ATTR_ZOOM
,
440
SUMO_ATTR_INTERPOLATED
,
441
SUMO_ATTR_THRESHOLD
,
442
443
SUMO_ATTR_NET_OFFSET
,
444
SUMO_ATTR_CONV_BOUNDARY
,
445
SUMO_ATTR_ORIG_BOUNDARY
,
446
SUMO_ATTR_ORIG_PROJ
,
447
448
SUMO_ATTR_CF_PWAGNER2009_TAULAST
,
449
SUMO_ATTR_CF_PWAGNER2009_APPROB
,
450
SUMO_ATTR_CF_IDM_DELTA
,
451
SUMO_ATTR_CF_IDM_STEPPING
,
452
SUMO_ATTR_CF_IDMM_ADAPT_FACTOR
,
453
SUMO_ATTR_CF_IDMM_ADAPT_TIME
,
454
SUMO_ATTR_CF_KERNER_PHI
,
455
SUMO_ATTR_CF_WIEDEMANN_SECURITY
,
456
SUMO_ATTR_CF_WIEDEMANN_ESTIMATION
,
457
458
SUMO_ATTR_GENERATE_WALKS
,
459
SUMO_ATTR_ACTTYPE
,
460
SUMO_ATTR_SLOPE
,
461
SUMO_ATTR_VERSION
,
462
463
467
/* general object */
468
AGEN_ATTR_INHABITANTS
,
469
AGEN_ATTR_HOUSEHOLDS
,
470
AGEN_ATTR_CHILDREN
,
471
AGEN_ATTR_RETIREMENT
,
472
AGEN_ATTR_CARS
,
473
AGEN_ATTR_UNEMPLOYEMENT
,
474
AGEN_ATTR_MAX_FOOT_DIST
,
475
AGEN_ATTR_IN_TRAFFIC
,
476
AGEN_ATTR_OUT_TRAFFIC
,
477
478
/* streets object */
479
//SUMO_ATTR_EDGE already defined
480
AGEN_ATTR_POPULATION
,
481
AGEN_ATTR_OUT_WORKPOSITION
,
482
483
/* workHours object */
484
AGEN_ATTR_HOUR
,
485
AGEN_ATTR_PROP
,
486
487
/* school object */
488
//SUMO_ATTR_EDGE, SUMO_ATTR_POSITION, SUMO_ATTR_TYPE already defined
489
AGEN_ATTR_CAPACITY
,
490
AGEN_ATTR_OPENING
,
491
AGEN_ATTR_CLOSING
,
492
493
/* busStation and Bus objects */
494
// ID, EDGE, POSITION, REFID, BEGIN and END are already defined
495
AGEN_ATTR_MAX_TRIP_DURATION
,
496
//AGEN_ATTR_ORDER,
497
AGEN_ATTR_RATE
,
498
499
/* population and children accompaniment brackets */
500
AGEN_ATTR_BEGINAGE
,
501
AGEN_ATTR_ENDAGE
,
502
AGEN_ATTR_PEOPLENBR
,
503
504
/* parameters */
505
AGEN_ATTR_CARPREF
,
506
AGEN_ATTR_CITYSPEED
,
507
AGEN_ATTR_FREETIMERATE
,
508
AGEN_ATTR_UNI_RAND_TRAFFIC
,
509
AGEN_ATTR_DEP_VARIATION
,
510
511
/* city gates */
512
AGEN_ATTR_INCOMING
,
513
AGEN_ATTR_OUTGOING
,
514
515
//@name Netedit Attributes (used as virtual property holders, must be in SumoXMLAttr)
516
//
518
/* whether a feature has been loaded,guessed,modified or approved */
519
GNE_ATTR_MODIFICATION_STATUS
,
520
/* first coordinate of edge shape */
521
GNE_ATTR_SHAPE_START
,
522
/* last coordinate of edge shape */
523
GNE_ATTR_SHAPE_END
525
};
526
527
/*
528
* definitions of special SumoXML-attribute values.
529
* Since these enums shall be used in switch statements we keep them separated
530
* @{
531
*/
532
538
enum
SumoXMLNodeType
{
539
NODETYPE_UNKNOWN
,
// terminator
540
NODETYPE_TRAFFIC_LIGHT
,
541
NODETYPE_TRAFFIC_LIGHT_NOJUNCTION
,
// junction controlled only by traffic light but without other prohibitions
542
NODETYPE_PRIORITY
,
543
NODETYPE_PRIORITY_STOP
,
// like priority but all minor links have stop signs
544
NODETYPE_RIGHT_BEFORE_LEFT
,
545
NODETYPE_ALLWAY_STOP
,
546
NODETYPE_DISTRICT
,
547
NODETYPE_NOJUNCTION
,
548
NODETYPE_INTERNAL
,
549
NODETYPE_DEAD_END
,
550
NODETYPE_DEAD_END_DEPRECATED
551
};
552
553
559
enum
SumoXMLEdgeFunc
{
560
EDGEFUNC_NORMAL
,
561
EDGEFUNC_CONNECTOR
,
562
EDGEFUNC_SINK
,
563
EDGEFUNC_SOURCE
,
564
EDGEFUNC_INTERNAL
565
};
566
567
576
enum
LaneSpreadFunction
{
577
LANESPREAD_RIGHT
,
578
LANESPREAD_CENTER
579
};
580
581
594
enum
LinkState
{
596
LINKSTATE_TL_GREEN_MAJOR
=
'G'
,
598
LINKSTATE_TL_GREEN_MINOR
=
'g'
,
600
LINKSTATE_TL_RED
=
'r'
,
602
LINKSTATE_TL_YELLOW_MAJOR
=
'Y'
,
604
LINKSTATE_TL_YELLOW_MINOR
=
'y'
,
606
LINKSTATE_TL_OFF_BLINKING
=
'o'
,
608
LINKSTATE_TL_OFF_NOSIGNAL
=
'O'
,
610
LINKSTATE_MAJOR
=
'M'
,
612
LINKSTATE_MINOR
=
'm'
,
614
LINKSTATE_EQUAL
=
'='
,
616
LINKSTATE_STOP
=
's'
,
618
LINKSTATE_ALLWAY_STOP
=
'w'
,
620
LINKSTATE_DEADEND
=
'-'
621
};
622
623
630
enum
LinkDirection
{
632
LINKDIR_STRAIGHT
= 0,
634
LINKDIR_TURN
,
636
LINKDIR_LEFT
,
638
LINKDIR_RIGHT
,
640
LINKDIR_PARTLEFT
,
642
LINKDIR_PARTRIGHT
,
644
LINKDIR_NODIR
645
};
646
647
651
enum
TrafficLightType
{
652
TLTYPE_STATIC
,
653
TLTYPE_ACTUATED
,
654
TLTYPE_AGENT
655
};
656
657
659
665
class
SUMOXMLDefinitions
{
666
667
public
:
669
static
StringBijection<int>::Entry
tags
[];
670
672
static
StringBijection<int>::Entry
attrs
[];
673
675
static
StringBijection<int>
Tags
;
676
678
static
StringBijection<int>
Attrs
;
679
681
682
static
StringBijection<SumoXMLNodeType>
NodeTypes
;
683
684
static
StringBijection<SumoXMLEdgeFunc>
EdgeFunctions
;
685
686
static
StringBijection<LaneSpreadFunction>
LaneSpreadFunctions
;
687
688
static
StringBijection<LinkState>
LinkStates
;
689
690
static
StringBijection<LinkDirection>
LinkDirections
;
691
692
static
StringBijection<TrafficLightType>
TrafficLightTypes
;
694
695
private
:
696
697
static
StringBijection<SumoXMLNodeType>::Entry
sumoNodeTypeValues
[];
698
699
static
StringBijection<SumoXMLEdgeFunc>::Entry
sumoEdgeFuncValues
[];
700
701
static
StringBijection<LaneSpreadFunction>::Entry
laneSpreadFunctionValues
[];
702
703
static
StringBijection<LinkState>::Entry
linkStateValues
[];
704
705
static
StringBijection<LinkDirection>::Entry
linkDirectionValues
[];
706
707
static
StringBijection<TrafficLightType>::Entry
trafficLightTypesVales
[];
708
709
};
710
711
#endif
712
713
/****************************************************************************/
714
build
buildd
sumo-0.18~dfsg
src
utils
xml
SUMOXMLDefinitions.h
Generated on Wed Oct 23 2013 01:15:12 for SUMO - Simulation of Urban MObility by
1.8.4