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

⚠️ **GitHub.com Fallback** ⚠️