I am currently adapting a code I've written in Sim4Life 2.3 some years ago to Sim4Life 6.0 and found out that a lot has changed in the meantime.
How do I properly set up a Field Crop Filter (for the EMLF-Solver)?
This is what my original code looks like and the SetInputConnection and Value commands seem to be deprecated.
import sys, os
import s4l_v1.analysis as analysis
import s4l_v1.analysis.core as core
# Create extractor for a given simulation output file
results = sim.Results()
overall_field_sensor = results[ 'Overall Field' ]
e_field = overall_field_sensor['EM E(x,y,z,f0)']
# pipe the E_field through a crop filter
crop_filter = core.FieldCropFilter()
crop_filter.SetValue = (63, 123, 513) # set lower extent of crop region (in grid indexes)
crop_filter.SetValue = (198, 271, 662) # set upper extent of crop region (in grid indexes)
Thanks for your help!
In general, an easy way to create a postprocessing script is to first do it in the GUI and then use the "To-Python" function (available via right-click on the algorithm in the Explorer window).
Here is what the auto-generated script looks like for a simple pipeline with a Crop Filter:
# Creating the analysis pipeline
# Adding a new SimulationExtractor
simulation = document.AllSimulations["EM"]
simulation_extractor = simulation.Results()
# Adding a new EmSensorExtractor
em_sensor_extractor = simulation_extractor["Overall Field"]
em_sensor_extractor.FrequencySettings.ExtractedFrequency = u"All"
em_sensor_extractor.Normalization.Normalize = True
em_sensor_extractor.SurfaceCurrent.SurfaceResolution = 0.001, units.Meters
# Adding a new FieldCropFilter
inputs = [em_sensor_extractor.Outputs["EM E(x,y,z,f0)"]]
field_crop_filter = analysis.core.FieldCropFilter(inputs=inputs)
field_crop_filter.LowerExtent = numpy.array([1, 3, 2])
field_crop_filter.UpperExtent = numpy.array([21, 21, 21])
Note fyi that you don't actually need to pass a Numpy array to UpperExtent or LowerExtent, it also works if you pass any iterable, like a list or a tuple.