[docs]classFileConverter(TrajectoryConverter):def__init__(self,input_file:InputFileData,display_data:Dict[int,DisplayData]=None):""" This object loads data from the input file in .simularium format. Parameters ---------- input_file: InputFileData A InputFileData object containing .simularium data to load """ifdisplay_dataisNone:display_data={}ifinput_file._is_binary():print("Reading Simularium binary -------------")buffer_data=SimulariumBinaryReader.load_binary(input_file)else:print("Reading Simularium JSON -------------")buffer_data=json.loads(input_file.get_contents())if(int(buffer_data["trajectoryInfo"]["version"])<CURRENT_VERSION.TRAJECTORY_INFO):buffer_data=FileConverter.update_trajectory_info_version(buffer_data)self._data=TrajectoryData.from_buffer_data(buffer_data,display_data)@staticmethoddef_update_trajectory_info_v1_to_v2(data:Dict[str,Any])->Dict[str,Any]:""" Update the trajectory info block from v1 to v2 """# unitsif"spatialUnitFactorMeters"indata["trajectoryInfo"]:spatial_units=UnitData("m",data["trajectoryInfo"]["spatialUnitFactorMeters"])data["trajectoryInfo"].pop("spatialUnitFactorMeters")else:spatial_units=UnitData("m")data["trajectoryInfo"]["spatialUnits"]={"magnitude":spatial_units.magnitude,"name":spatial_units.name,}time_units=UnitData("s",1.0)data["trajectoryInfo"]["timeUnits"]={"magnitude":time_units.magnitude,"name":time_units.name,}data["trajectoryInfo"]["version"]=2returndata@staticmethoddef_update_trajectory_info_v2_to_v3(data:Dict[str,Any])->Dict[str,Any]:""" Update the trajectory info block from v2 to v3 """# all the new fields from v2 to v3 are optionaldata["trajectoryInfo"]["version"]=3returndata
[docs]@staticmethoddefupdate_trajectory_info_version(data:Dict[str,Any])->Dict[str,Any]:""" Update the trajectory info block to match the current version Parameters ---------- data: Dict[str, Any] A .simularium JSON file loaded in memory as a Dict. This object will be mutated, not copied. """original_version=int(data["trajectoryInfo"]["version"])iforiginal_version==1:data=FileConverter._update_trajectory_info_v1_to_v2(data)data=FileConverter._update_trajectory_info_v2_to_v3(data)iforiginal_version==2:data=FileConverter._update_trajectory_info_v2_to_v3(data)print(f"Updated TrajectoryInfo v{original_version} -> "f"v{CURRENT_VERSION.TRAJECTORY_INFO}")returndata