Classes used to build the computational domain¶
Destination class used to build a destination¶

class
cromosim.domain.
Destination
(name, colors, excluded_colors=[], desired_velocity_from_color=[], fmm_speed=None, velocity_scale=1, next_destination=None, next_domain=None, next_transit_box=None)[source]¶ Bases:
object
A Destination object contains all the information necessary to direct people to a goal, for example a door, a staircase or another floor.
Examples
 Examples with one destination:
cromosim/examples/domain/domain_room.py
cromosim/examples/domain/domain_stadium.py
 Example with several destinations:
cromosim/examples/domain/domain_shibuya_crossing.py
 Example with a destination described in a json file
cromosim/examples/domain/domain_from_json.py
 Attributes
 name: string
name of the destination
 colors: list
List of colors
[ [r,g,b],... ]
drawing the destination. For example, a door can be represented by a red line. excluded_colors: list
List of colors
[ [r,g,b],... ]
representing obstacles that cannot be crossed for someone wishing to go to this destination: the walls of course, but possibly another objects only visible to the people concerned by this destination. desired_velocity_from_color: list
Allows you to associate a desired velocity (vx, vy) with a color (r, g, b):
[ [r,g,b, vx,vy],... ]
. fmm_speed: numpy array
To automatically calculate the desired velocity leading to this destination, a FastMarching method is used to calculate the travel time to this destination. The opposite of the gradient of this time gives the desired velocity. This method solves the Eikonal equation
grad D = 1/fmm_speed
. By changing thefmm_speed
(1 everywhere by default) you can make certain areas slower and thus modify the desired velocity to divert people velocity_scale: float
Multiplying coefficient used in front of the desired velocity vector (which is renormalized). For example on a staircase one may wish to reduce the speed of people.
 next_destination: string
Name of the next destination. Useful for linking destinations one after the other
 next_domain: string
Name of the next domain where is the next_destination
 next_transit_box: list
The people in the current domain present in this box will be duplicated in the next_domain. A box is defined by four points:
[x0, y0, x1, y1, x2, y2, x3, y3]
 distance: numpy array
Distance (if
fmm_speed
== 1) or travel time (iffmm_speed
!= 1) to the destination desired_velocity_X: numpy array
First component of the desired velocity
 desired_velocity_Y: numpy array
Second component of the desired velocity
Domain class used to build the computational domain¶

class
cromosim.domain.
Domain
(name='Domain', background='White', pixel_size=1.0, xmin=0.0, width=100, ymin=0.0, height=100, wall_colors=[[0, 0, 0]], npzfile=None)[source]¶ Bases:
object
 To define the computational domain:
a background: empty (white) or a PNG image which only contains the colors white, red (for the doors) and black (for the walls)
 supplementary doors represented by matplotlib shapes:
line2D
 supplementary walls represented by matplotlib shapes:
line2D
,circle
,ellipse
,rectangle
orpolygon
To compute the obstacle distances and the desired velocities
Examples
 A simple room
cromosim/examples/domain/domain_room.py
 A circular domain
cromosim/examples/domain/domain_stadium.py
 A domain with several destinations
cromosim/examples/domain/domain_shibuya_crossing.py
 A domain built from json file (where is its description)
cromosim/examples/domain/domain_from_json.py
 Attributes
 pixel_size: float
size of a pixel in meters
 width: int
width of the background image (number of pixels)
 height: int
height of the background image (number of pixels)
 xmin: float
x coordinate of the origin (bottom left corner)
 xmax: float
xmax = xmin + width*pixel_size
 ymin: float
y coordinate of the origin (bottom left corner)
 ymax: float
ymax = ymin + height*pixel_size
 X: numpy array
x coordinates (meshgrid)
 Y: numpy array
y coordinates (meshgrid)
 image: numpy array
pixel array (r,g,b,a) The Pillow image is converted to a numpy arrays, then using
flipud
the origin of the image is put it down left instead the top left image_red: numpy array
red values of the image (r,g,b,a)
 image_green: numpy array
green values of the image (r,g,b,a)
 image_blue: numpy array
blue values of the image (r,g,b,a)
 wall_mask: numpy array
boolean array: true for wall pixels
 wall_mask_id: numpy array
wall pixel indices
 wall_distance: numpy array
distance (m) to the wall
 wall_grad_X: numpy array
gradient of the distance to the wall (first component)
 wall_grad_Y: numpy array
gradient of the distance to the wall (second component)
 door_distance: numpy array
distance (m) to the door
 desired_velocity_X: numpy array
 opposite of the gradient of the distance to the door: desired velocity
(first component)
 desired_velocity_Y: numpy array
opposite of the gradient of the distance to the door: desired velocity (second component)
Methods
add_destination
(self, dest)To compute the desired velocities to this destination and then to add this Destination object to this domain.
add_shape
(self, shape[, outline_color, …])To add a matplotlib shape:
line2D
,circle
,ellipse
,rectangle
orpolygon
build_domain
(self)To build the domain: reads the background image (if supplied) and initializes all the color arrrays
compute_wall_distance
(self)To compute the geodesic distance to the walls in using a fastmarching method
people_desired_velocity
(self, xyr, people_dest)This function determines people desired velocities from the desired velocity array computed by Domain thanks to a fastmarching method.
people_target_distance
(self, xyr, people_dest)This function determines distances to the current target for all people
people_wall_distance
(self, xyr[, I, J])This function determines distances to the nearest wall for all people
plot
(self[, id, title, savefig, filename, dpi])To plot the computational domain
plot_desired_velocity
(self, destination_name)To plot the desired velocity
plot_wall_dist
(self[, step, scale, …])To plot the wall distances
save
(self, outfile)To save the content of the domain in a file

add_destination
(self, dest)[source]¶ To compute the desired velocities to this destination and then to add this Destination object to this domain.
 Parameters
 dest: Destination
contains the Destination object which must be added to this domain

add_shape
(self, shape, outline_color=[0, 0, 0], fill_color=[255, 255, 255])[source]¶ To add a matplotlib shape:
line2D
,circle
,ellipse
,rectangle
orpolygon
 Parameters
 shape: matplotlib shape
line2D, circle, ellipse, rectangle or polygon
 outline_color: list
rgb color
 fill_color: list
rgb color

build_domain
(self)[source]¶ To build the domain: reads the background image (if supplied) and initializes all the color arrrays

compute_wall_distance
(self)[source]¶ To compute the geodesic distance to the walls in using a fastmarching method

people_desired_velocity
(self, xyr, people_dest, I=None, J=None)[source]¶ This function determines people desired velocities from the desired velocity array computed by Domain thanks to a fastmarching method.
 Parameters
 xyr: numpy array
people coordinates and radius: x,y,r
 people_dest: list of string
destination for each individual
 I: numpy array (None by default)
people index i
 J: numpy array (None by default)
people index j
 Returns
 I: numpy array
people index i
 J: numpy array
people index j
 Vd: numpy array
people desired velocity

people_target_distance
(self, xyr, people_dest, I=None, J=None)[source]¶ This function determines distances to the current target for all people
 Parameters
 xyr: numpy array
people coordinates and radius:
x,y,r
 people_dest: list of string
destination for each individual
 I: numpy array (None by default)
people index
i
 J: numpy array (None by default)
people index
j
 Returns
 ——
 I: numpy array
people index i
 J: numpy array
people index j
 D: numpy array
distances to the current target

people_wall_distance
(self, xyr, I=None, J=None)[source]¶ This function determines distances to the nearest wall for all people
 Parameters
 xyr: numpy array
people coordinates and radius:
x,y,r
 I: numpy array (None by default)
people index
i
 J: numpy array (None by default)
people index
j
 Returns
 I: numpy array
people index
i
 J: numpy array
people index
j
 D: numpy array
distances to the nearest wall

plot
(self, id=1, title='', savefig=False, filename='fig.png', dpi=150)[source]¶ To plot the computational domain
 Parameters
 id: integer
Figure id (number)
 title: string
Figure title
 savefig: boolean
writes the figure as a png file if true
 filename: string
png filename used to write the figure
 dpi: integer
number of pixel per inch for the saved figure

plot_desired_velocity
(self, destination_name, step=10, scale=10, scale_units='inches', id=1, title='', savefig=False, filename='fig.png', dpi=150)[source]¶ To plot the desired velocity
 Parameters
 destination_name: string
name of the considered destination
 step: integer
draw an arrow every step pixels
 scale: integer
scaling for the quiver arrows
 scale_units: string
unit name for quiver arrow scaling
 id: integer
Figure id (number)
 title: string
Figure title
 savefig: boolean
writes the figure as a png file if true
 filename: string
png filename used to write the figure
 dpi: integer
number of pixel per inch for the saved figure

plot_wall_dist
(self, step=10, scale=10, scale_units='inches', id=1, title='', savefig=False, filename='fig.png', dpi=150)[source]¶ To plot the wall distances
 Parameters
 id: integer
Figure id (number)
 title: string
Figure title
 savefig: boolean
writes the figure as a png file if true
 filename: string
png filename used to write the figure
 dpi: integer
number of pixel per inch for the saved figure