Simulate a concave multi-element ultrasound array

How can I create a spherically concave multi-element random ultrasound array in the Sim4Life acoustic simulation platform? The template acoustic apertures in the Sim4Life does not include the spherical concave model. How can I customize the element arrangement using X, Y and Z coordinates? Thanks!

The easiest way would be to design it yourself and automate it via python (create spheres and cylinders and use the binary operations to 'subtract' them from one another until you have the geometry you want). Let me know if you need some support with this and I can help.

If I remember correctly the SEFT tutorial python script shows a similar method to create the SEFT (single element curved transducer) transducer from scratch

@montanaro Hi Montanaro, I have created a spherically concave surface as you instructed for simulating multi-element ultrasound. Would you please advise how I can assign 128 ultrasound elements to this customized concave surface?

Assuming 'sim' is the acoustic simulation you're interested in and that 'elements' is a list of the elements (gotten from entities = model.AllEntities()) and that 'amp' and 'phase' are numpy arrays with the amplitude, phase values you're interested in assigning:

# Print current simulation name

# Remove all sources before adding them
to_del = []
for s in sim.AllSettings:
	if isinstance(s,acoustic.SourceSettings):
for d in to_del:

# Add sources with correct element and parameters
for source_idx in np.arange(len(elements)):
	source_settings = acoustic.SourceSettings()
	source_settings.Amplitude = amp[source_idx]
	source_settings.Phase = phases[source_idx]
	sim.Add(source_settings, rings[source_idx])
	print(rings[source_idx].Name, amp[source_idx], phases[source_idx])

Sorry I'm not providing a full example. Easiest way to do that would be to manually create the whole simulation without the sources (just make all sources as materials), then right click on simulation and select 'To Python...' and then add the lines above to your code

You could do something like this to get the elements as a list:

src_ents = []
entities = model.AllEntities()
for e in entities:
    if 'Element' in e.Name:

Careful, I have no idea how the elements will be sorted in that case but you could use a fixed size numerical suffix and then sort them.