Exporting data to excel (csv) or matlab (mat)
-
I have generated a set of simulations and i would be interested to export some information like:
1 - SAR slice : How to determine the slice number which is closer to a coordinate: lets say at 0cm but due to gridding it corresponds to 0.013 cm.
2- In the extracted SAR slice I am interested in the SAR values in a line along for example Y-axis. Again i know the absolute value of the line but i dont know exactly to which coordinate would correspond due to gridding.I generated a python script of a manually extracted line, then i run the generated script, but it gives errors.
Could you show an example script of generating and exporting the SAR slice and a line in that slice?
-
- You need teh function
FindCell
(see example below) - You also need
FindCell
, together with raw access to the underlying numpy data array and a way to "reshape" it properly (see same example below)
# Creating the analysis pipeline # Adding a new SimulationExtractor simulation = document.AllSimulations["SCC34 Benchmark Simulation"] 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.SurfaceCurrent.SurfaceResolution = 0.001, units.Meters document.AllAlgorithms.Add(em_sensor_extractor) # Get data object em_sensor_extractor.Outputs["SAR(x,y,z,f0)"].Update() # output needs to be updated before extracting data sar = em_sensor_extractor.Outputs["SAR(x,y,z,f0)"].Data # a location in space: x = 0 y = -0.00910 z = -0.00025 # get grid cell indices closest to that location: id_x, id_y, id_z = sar.Grid.FindCell(x,y,z) # Create Slice Viewer at that location inputs = [em_sensor_extractor.Outputs["SAR(x,y,z,f0)"]] slice_field_viewer = analysis.viewers.SliceFieldViewer(inputs=inputs) slice_field_viewer.Data.Mode = slice_field_viewer.Data.Mode.enum.QuantityRealModulus slice_field_viewer.Slice.Index = id_z slice_field_viewer.UpdateAttributes() document.AllAlgorithms.Add(slice_field_viewer) # Get raw data array (in the form of a numpy array) sar_array = em_sensor_extractor.Outputs["SAR(x,y,z,f0)"].Data.Field(snapshot_index=0) nx, ny, nz = numpy.array(sar.Grid.Dimensions) - numpy.array((1,1,1)) # grid is defined on nodes, SAR data is in cell centers sar_array = numpy.reshape(sar_array, (nx, ny, nz), order='F') # now data can be accessed easily: print sar_array[:, id_y, id_z]
- You need teh function
-
Currently the Matlab exporter only allows exporting a whole quantity (i.e. the whole 3D array if it is a 3D quantity, like the SAR(x,y,z,f0)).
Once exported, though, it is relatively straightforward to slice through the array in Matlab. See for example this post: https://forum.zurichmedtech.com/topic/47/exporting-data-to-matlab-how-to-access-the-data-as-a-volume-matrix -
Dear Redi, you can export arbitrary data to Matlab (e.g. field array and grid coordinates) using the Scipy.io library. A generic use of it is the following:
import scipy.io as sio
dict={'field':fieldarray,'xgrid':xgrid,'ygrid':ygrid,'zgrid':zgrid}
sio.savemat(filename,dict)where xgrid,ygrid,zgrid are the vectors containing the cartesian coordinates of the grid.