code: async def save_transform(data):
      
      if any([v is None for v in session.points.values()]):
          message = "Not all points have been saved"
          status = 400
      else:
          # expected values based on mechanical drawings of the robot
          expected_pos = expected_points()
          expected = [
              expected_pos[p] for p in expected_pos.keys()]
          # measured data
          actual = [session.points[p] for p in sorted(session.points.keys())]
  
          # Generate a 2 dimensional transform matrix from the two matricies
          flat_matrix = solve(expected, actual)
          # Add the z component to form the 3 dimensional transform
          calibration_matrix = add_z(flat_matrix, session.z_value)
  
          session.adapter.update_config(gantry_calibration=list(
                  map(lambda i: list(i), calibration_matrix)))
  
          robot_configs.save_deck_calibration(session.adapter.config)
          robot_configs.backup_configuration(session.adapter.config)
          message = "Config file saved and backed up"
          status = 200
      return web.json_response({'message': message}, status=status)
docs: Calculate the transormation matrix that calibrates the gantry to the deck
      :param data: Information obtained from a POST request.
      The content type is application/json.
      The correct packet form should be as follows:
      {
        'token': UUID token from current session start
        'command': 'save transform'
      }