@startuml Calibration
boundary Client as client
control Calibrator as cal
entity PlantSimulator as sim
database InfluxDB as db
client ->> cal: calibrate(start_date, end_date, simulator, n, record_params)
cal -> db: get_cached_trajectories(start_date, end_date)
return plant_inputs, plant_results
loop n times
  cal -> sim: run(start_date, end_date, plant_inputs, params_i)
  sim -> sim: run_simulation(room_t_data, params_i)
  sim --> cal: results
  cal -> cal: residual := calc(results, plant_results)
  cal -> cal: params_{i+1} := update(params_i, residual)
end
opt record_params
  cal ->> sim: record_params(params_i)
end
cal ->> client: params
@enduml