Python API

Scripting interface for Sim4Life

113 Topics 314 Posts
  • 1 Votes
    11 Posts
    756 Views

    You need to make output_angle into an array and append the new values at the end every time (the i-th element will have the i-th phase you want)

    output_angle = numpy.array([]) for i in range(0,128): # your code output_angle = numpy.append(output_angle, numpy.angle(output))
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    7 Views
    No one has replied
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    5 Views
    No one has replied
  • Max modulation tool in API

    1
    0 Votes
    1 Posts
    114 Views
    No one has replied
  • Add a material to the Materials Database

    1
    0 Votes
    1 Posts
    212 Views
    No one has replied
  • use vtk on entities in s4l enviroment

    1
    0 Votes
    1 Posts
    146 Views
    No one has replied
  • Extract voxel information

    6
    0 Votes
    6 Posts
    493 Views

    I figured it out, made it in the gui and used to python to see what the syntax had to be

    inputs = [field_masking_filter.Outputs["EM E(x,y,z,f0)"]]
  • 0 Votes
    7 Posts
    443 Views

    Not sure what you're trying to do, but some sample code to extract the field and data is below (should apply to anything with a rectilinear grid, but it's from Acoustic simulations):

    sim = document.AllSimulations[simulation_idx] simulation_extractor = sim.Results() sim_sensor_extractor = simulation_extractor["Overall Field"] # Sensor Name sim_field_extractor = sim_sensor_extractor.Outputs["Intensity"] # Field Name sim_field_extractor.Update() d_sim = sim_field_extractor.Data sim_ref_field_extractor.Update() out = d_sim_ref.Field(0) # 3D Field is extracted as a 1D array. # 0 corresponds to the snapshot (typically, time or frequency) # If you need this as a 3D array then use # out_3d = np.reshape(out, grid_dims, order='F') # once you have 'grid_dims' which I show how to get below # important to remember order = 'F' because of the way that 3D arrays are unrolled into 1D (Fortran style) sim_field_extractor.Update() # Just to be safe, I add this update step a few more times than needed # Get grid: axes, dimensions x = d_sim.Grid.XAxis y = d_sim.Grid.YAxis z = d_sim.Grid.ZAxis # Careful: Simulations in S4L have grids defined at the nodes, and values (the field) defined at cell centers # Therefore if you want the 'grid' used for the values in your field, you'll need to probably get the midpoints of the grid and reduce the grid dimensions by one in each direction. # Something like: x_mid = (x[1:]+x[:-1]) / 2 grid = d_sim_ref.Grid.Dimensions
  • Creating a Custom Menu with Actions

    1
    0 Votes
    1 Posts
    131 Views
    No one has replied
  • Memory Problem with Python Scripts

    1
    0 Votes
    1 Posts
    213 Views
    No one has replied
  • 0 Votes
    5 Posts
    465 Views

    @CEiber That's a very good idea, thanks a lot!

  • Creating a 2D plot via Python API

    2
    0 Votes
    2 Posts
    913 Views

    Hi, you get an error because your input is a 3D field (EM E(x,y,z,f0)) and this viewer expects 1D data (e.g. E as a function of x).
    To address this, you can use the 1D Field Filter (under Field Tools in the GUI) to first extract one-dimensional data out of your 3D field, and then connect the Plot viewer. Do it first in the GUI, then use To-Python function in the context menu to create your script.

    I hope this helps.

  • Extracting neuron simulation results

    2
    0 Votes
    2 Posts
    327 Views

    To update, I've learned the membrane voltage, membrane current, and extracellular voltage can be specified as the measured quantity for a line sensor, with the number of time snapshots of your choosing. Thus, all info to calculate the induced potential on the electrode over time from neural activity is available, one just has to create multiple, identical spline entities as only one quantity can be sensed from a structure at at time (at least in the version of 5.0 that I'm using).

    This also helps get a relative idea of where the action potential initiates along the axon relative to the electrode, though not an exact X/Y/Z location to show in the model view.

  • 0 Votes
    3 Posts
    315 Views

    Yes, this has solved the issue. Thanks a lot Silvain!

  • This topic is deleted!

    1
    0 Votes
    1 Posts
    2 Views
    No one has replied
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    45 Views
    No one has replied
  • 3 Votes
    1 Posts
    522 Views
    No one has replied
  • 0 Votes
    1 Posts
    146 Views
    No one has replied
  • 0 Votes
    4 Posts
    232 Views

    For those who are interested, I have found a way to work around the issue. The python-command to continue a Simulation called:

    thermal_initial_global.InitializationOptions.enum.ContinueSimulation

    can only take the first argument, which in my case is "heating 0". So if you now have created "heating 1" based on "heating 0", and then proceed to delete "heating 0", the only available argument is "heating 1". This will enable you to further continue your simulation. You can delete a simulation using the following command:

    document.AllSimulations.Remove(thermal_sim)

    given you have returned thermal_sim, of course. If you create an empty list, you can append your thermal_sim's into it and then choose which item you want to delete.

    I am sure there are more elegant methods, but if you need to do this specific task, it works.

  • how to normalize in Simulation Combiner ?

    2
    0 Votes
    2 Posts
    208 Views

    This might be an old question, but I have just stumbled accross this problem and solution recently. Someone reading this in the future might find it helpful. The code you were looking for is the following:

    #Sources heat_source = thermal_sim.AddHeatSourceSettings(em_sim.OverallFieldSensor) heat_source.NormalizeToInputPower = True heat_source.PowerScaleFactor = 6, units.Watts

    Assuming you want 6W of power, of course.