def METHOD_NAME(self, msg):
    # Determine transformation of laser and robot in respect to odometry
    laser_rotation = None
    laser_translation = None
    try:
        tf = self.tf_buffer.lookup_transform('odom', msg.header.frame_id, Time(sec=0, nanosec=0))
        q = tf.transform.rotation
        laser_rotation = atan2(2.0 * (q.w * q.z + q.x * q.y), 1.0 - 2.0 * (q.y * q.y + q.z * q.z))
        laser_translation = tf.transform.translation
    except (LookupException, ConnectivityException, ExtrapolationException) as e:
        print('No required transformation found: `{}`'.format(str(e)))
        return
    # Determine position of robot and laser
    world_robot_x = laser_translation.x + WORLD_ORIGIN_X
    world_robot_y = laser_translation.y + WORLD_ORIGIN_Y
    world_laser_xs = []
    world_laser_ys = []
    laser_range_angle = msg.angle_min + laser_rotation
    for laser_range in msg.ranges:
        if laser_range < msg.range_max and laser_range > msg.range_min:
            laser_x = world_robot_x + laser_range * cos(laser_range_angle)
            laser_y = world_robot_y + laser_range * sin(laser_range_angle)
            world_laser_xs.append(laser_x)
            world_laser_ys.append(laser_y)
        laser_range_angle += msg.angle_increment
    # Determine position on map (from world coordinates)
    robot_x = int(world_robot_x / RESOLUTION)
    robot_y = int(world_robot_y / RESOLUTION)
    laser_xs = []
    laser_ys = []
    for world_laser_x, world_laser_y in zip(world_laser_xs, world_laser_ys):
        laser_x = int(world_laser_x / RESOLUTION)
        laser_y = int(world_laser_y / RESOLUTION)
        laser_xs.append(laser_x)
        laser_ys.append(laser_y)
    # Fill the map based on known readings
    for laser_x, laser_y in zip(laser_xs, laser_ys):
        self.plot_bresenham_line(robot_x, laser_x, robot_y, laser_y)
        self.map[laser_y * MAP_WIDTH + laser_x] = 100