from dataclasses import dataclass from numbers import Number from typing import Mapping, Sequence, Set, Union @dataclass class StringAnnotation: type: str start: int end: int feature_properties: Mapping[str, Set[str]] @dataclass class NamedString: name: str sequence: str @dataclass class AnnotatedString(NamedString): annotations: Sequence[StringAnnotation] @dataclass class SangerTraceData: sequence: Sequence[str] seq_param_file_name: str analysis_proto_settings_name: str analysis_rpto_settings_ver: str analysis_proto_xml_data: str analysis_proto_xml_schema_ver: str sample_comment: Union[None, str] capillary_machine: bool container_identifier: str container_name: str comment_title: str channel_1: Sequence[Number] channel_2: Sequence[Number] channel_3: Sequence[Number] channel_4: Sequence[Number] measured_voltage_dv: Sequence[Number] measured_current_ma: Sequence[Number] measured_power_mw: Sequence[Number] measured_temperature_celsius: Sequence[Number] down_sample_factor: Number dye_1: str dye_2: str dye_3: str dye_4: str dye_wavelength_1: str dye_wavelength_2: str dye_wavelength_3: str dye_wavelength_4: str dye_set_name: str electrophoresis_voltage_setting_v: Number start_run_event: str stop_run_event: str start_collection_event: str stop_collection_event: str base_order: Sequence[str] gel_type_desc: str injection_time_sec: Number inection_voltage_v: Number lane_or_capillary: Number sample_tracking_id: str length_to_detector_cm: Number laser_power_mw: Number instrument_name_and_serial: str data_collection_module_file: str model_number: str pixels_avg_per_lane: Number number_of_capillaries: Number marked_off_scale_scans: Union[None, Sequence[Number]] # Skipped Ovrl, OvrV mobility_file: str # Skipped PRJT, PROJ pixel_bin_size: Number # Skipped scan rate results_group_comment: Union[None, str] results_group_name: str run_module_ver: str run_module_xml: str run_module_xml_ver: str run_proto_name: str run_proto_ver: str run_start_date: str # Date time object run_stop_date: str # Date time object data_collection_start_date: str data_collection_stop_date: str run_name: str run_start_time: str # time object run_stop_time: str # time object collection_start_time: str # time object collection_stop_time: str # time object saturated_data_points: Union[None, Sequence[Number]] color_rescaling_divisor: Number scan_count: Number polymer_lot_expiration: str # date time object polymer_lot_number: Number sample_name: str # Skipped genescan data # Skipped size standard file name data_collection_software_ver: str data_collection_firmware_ver: str run_temperature_setting_celcius: Number well_id: str plate_user_name: str