architecture.uac cpp.puml - moduleus/urx GitHub Wiki
@startuml
/' Objects '/
namespace uac { enum DataType { DOUBLE FLOAT INT16 INT32 UNDEFINED }
enum ProbeType {
CURVILINEAR
LINEAR
MATRIX
RCA
SPARSE
UNDEFINED
}
enum SamplingType {
IQ
RF
UNDEFINED
}
enum WaveType {
CONVERGING_WAVE
CYLINDRICAL_WAVE
DIVERGING_WAVE
PLANE_WAVE
UNDEFINED
}
class Element {
+transform : Transform
+element_geometry : std::weak_ptr<ElementGeometry>
+impulse_response : std::weak_ptr<ImpulseResponse>
}
class ElementGeometry {
+perimeter : std::vector<Vector3D>
}
class ImpulseResponse {
+sampling_frequency : DoubleNan
+time_offset : DoubleNan
+units : std::string
+data : std::vector<double>
}
class Probe {
+type : ProbeType
+transform : Transform
+description : std::string
+elements : std::vector<Element>
+element_geometries : std::vector<std::shared_ptr<ElementGeometry>>
+impulse_responses : std::vector<std::shared_ptr<ImpulseResponse>>
}
class Transform {
+rotation : Vector3D
+translation : Vector3D
}
class Vector3D {
+x : double
+y : double
+z : double
}
class Wave {
+time_zero : DoubleNan
+time_zero_reference_point : Vector3D
+type : WaveType
+parameters : std::vector<double>
}
class AcquisitionBase {
+timestamp : DoubleNan
+authors : std::string
+country_code : std::string
+description : std::string
+local_time : std::string
+system : std::string
+excitations : std::vector<std::shared_ptr<Excitation>>
+groups : std::vector<std::shared_ptr<Group>>
+probes : std::vector<std::shared_ptr<Probe>>
}
class Dataset {
+acquisition : Acquisition
+version : Version
}
}
namespace uac { enum Edge { FALLING HIGH LOW RISING UNDEFINED }
enum Polarity {
NEGATIVE
POSITIVE
UNDEFINED
}
class Acquisition {
+hw_config : HwConfig
+trigger_in : std::optional<TriggerIn>
+trigger_out : std::optional<TriggerOut>
+super_groups : std::vector<std::shared_ptr<SuperGroup>>
+initial_group : std::weak_ptr<IGroup>
+time_offset : DoubleNan
}
class DestinationLink {
+trigger : std::optional<TriggerIn>
+destination : std::weak_ptr<IGroup>
}
class Event {
+receive_setup : ReceiveSetup
+transmit_setup : TransmitSetup
+hw_config : HwConfig
+trigger_in : std::optional<TriggerIn>
+trigger_out : std::optional<TriggerOut>
+time_offset : DoubleNan
}
class Excitation {
+sampling_frequency : DoubleNan
+transmit_frequency : DoubleNan
+pulse_shape : std::string
+waveform : std::vector<double>
+hw_config : HwConfig
}
class Group {
+data_type : DataType
+sound_speed : DoubleNan
+sampling_type : SamplingType
+description : std::string
+sequence : std::vector<Event>
}
class HwConfig {
+values : unordered_map<std::string, VecDataTypeVariant>
}
abstract class IGroup {
+hw_config : HwConfig
+trigger_in : std::optional<TriggerIn>
+trigger_out : std::optional<TriggerOut>
+destinations : std::vector<DestinationLink>
+repetition_count : uint32_t
+period : DoubleNan
+time_offset : DoubleNan
}
class ReceiveSetup {
+modulation_frequency : DoubleNan
+sampling_frequency : DoubleNan
+tgc_sampling_frequency : DoubleNan
+time_offset : DoubleNan
+probe_transform : Transform
+tgc_profile : std::vector<double>
+active_elements : std::vector<std::vector<uint32_t>>
+probe : std::weak_ptr<Probe>
+number_samples : uint32_t
+hw_config : HwConfig
}
class SuperGroup {
+description : std::string
+initial_group : std::weak_ptr<IGroup>
}
class TransmitSetup {
+time_offset : DoubleNan
+probe_transform : Transform
+wave : Wave
+delays : std::vector<double>
+active_elements : std::vector<std::vector<uint32_t>>
+excitations : std::vector<std::weak_ptr<Excitation>>
+probe : std::weak_ptr<Probe>
+hw_config : HwConfig
}
class TriggerIn {
+edge : Edge
+channel : std::string
}
class TriggerOut {
+polarity : Polarity
+channel : std::string
+pulse_duration : DoubleNan
+time_offset : DoubleNan
}
class Version {
+major : uint16_t
+minor : uint16_t
+patch : uint16_t
}
}
/' Inheritance relationships '/
uac.AcquisitionBase <|-- uac.Acquisition
uac.IGroup <|-- uac.Group
uac.IGroup <|-- uac.SuperGroup
/' Aggregation relationships '/
uac.Acquisition o-- uac.IGroup
uac.AcquisitionBase o-- uac.Excitation
uac.AcquisitionBase o-- uac.Group
uac.AcquisitionBase o-- uac.Probe
uac.Dataset *-- uac.Acquisition
uac.Dataset *-- uac.Version
uac.DestinationLink o-- uac.IGroup
uac.Event *-- uac.ReceiveSetup
uac.Event *-- uac.TransmitSetup
uac.Group *-- uac.DataType
uac.Group *-- uac.Event
uac.Group *-- uac.SamplingType
uac.IGroup *-- uac.DestinationLink
uac.Probe *-- uac.Element
uac.Probe o-- uac.ElementGeometry
uac.Probe o-- uac.ImpulseResponse
uac.Probe *-- uac.ProbeType
uac.SuperGroup o-- uac.IGroup
uac.TransmitSetup *-- uac.Wave
uac.TriggerIn *-- uac.Edge
uac.TriggerOut *-- uac.Polarity
uac.Wave *-- uac.WaveType
/' Nested objects '/
@enduml