SetUp Field Crop Filter
-
Hi Guys,
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.SetInputConnection(0, e_field) crop_filter.Update(0) crop_filter[0].SetValue = (63, 123, 513) # set lower extent of crop region (in grid indexes) crop_filter[1].SetValue = (198, 271, 662) # set upper extent of crop region (in grid indexes) analysis.RegisterAlgorithm(crop_filter)
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 document.AllAlgorithms.Add(em_sensor_extractor) # 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]) field_crop_filter.UpdateAttributes() document.AllAlgorithms.Add(field_crop_filter)
Note fyi that you don't actually need to pass a Numpy array to
UpperExtent
orLowerExtent
, it also works if you pass any iterable, like a list or a tuple.