Skip to content
  • Search
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

ZMT zurich med tech

  1. Home
  2. Sim4Life
  3. Analysis & Postprocessing
  4. Doing combined analysis on separate simulations

Doing combined analysis on separate simulations

Scheduled Pinned Locked Moved Analysis & Postprocessing
10 Posts 5 Posters 1.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    Frodi
    wrote on last edited by
    #1

    Hi Sim4life community,

    Is it somehow possible to do analysis on two separate simulations in sim4life without exporting the data to for example Matlab?
    For example if I have almost the same simulation twice but with some parameter changed and I want to compare the SAR of each simulation by subtracting or normalizing the SAR simulations.

    Best,
    Frodi Gregersen

    1 Reply Last reply
    0
    • ofliO Offline
      ofliO Offline
      ofli
      ZMT
      wrote on last edited by
      #2

      Dear Frodi,

      You can drag&drop the results files (output.h5 file under results folder) into Analysis tab and then extract & post-process the results.

      Best,

      1 Reply Last reply
      0
      • F Offline
        F Offline
        Frodi
        wrote on last edited by
        #3

        Hi Ofli,

        Thank you for the answer but I don't think it solves my problem. Maybe I wasn't clear enough. I'm talking about doing post processing on the SAR data from two different simulations (not combining one multiport simulation). Is it for example possible to subtract the SAR data from two different simulations and display the resulting SAR (or SAR difference)?

        Thanks,
        Frodi

        1 Reply Last reply
        0
        • PeterStijnmanP Offline
          PeterStijnmanP Offline
          PeterStijnman
          wrote on last edited by
          #4

          Hey,
          I don't think there is a direct method to do so within Sim4Life, however, you could always use the method by ofli and then use the python extension in Sim4Life to subtract two results. Make sure that both simulations are on the same grid before subtracting (otherwise you need to interpolate one of the fields to the same dimensions). If you are unsure on how to do this let me know and I can see if I can whip up some code :)

          Cheers,
          peter

          1 Reply Last reply
          0
          • F Offline
            F Offline
            Frodi
            wrote on last edited by
            #5

            Hi Peter,

            Thank you for the answer. I have no experience using the python extension in Sim4Life, so it would be highly appreciated if you would be willing to make a simple example for this. Just the most basic situation you can make and then I can take it from there.

            Best,
            Frodi

            1 Reply Last reply
            0
            • PeterStijnmanP Offline
              PeterStijnmanP Offline
              PeterStijnman
              wrote on last edited by PeterStijnman
              #6

              Hey Frodi,

              So I made a "small" script for you. It is by no means perfect but it gets the job done (I modified some script I had available). This does assume you have both simulations in the same Sim4Life project, however, I think this should still work if you would import the results from another project. Only selecting the simulation gets a bit trickier probably.
              Hopefully, this helps!

              Cheers,
              Peter

              # done with Sim4Life V3.4
              # import the functions you will need
              import s4l_v1 as s4l
              import s4l_v1.simulation as simulation
              import s4l_v1.document as doc
              # I think using pyplot is a little easier for this instance, you could use the sim4life viewers too I think.
              import matplotlib.pyplot as plt
              import numpy as np
              
              # function to reshape the sar fields to the correct dimensions
              def reshapeSim4LifeField(tempField,simulationInstance,flagAxes):
              	gridsize = np.array(simulationInstance.Data.Grid.Dimensions) - 1
              	tempField = tempField.reshape(gridsize, order = 'F') #only 1 component (magnitude of SAR)		
              	
              	# Export the axes in case you need to reshape (only needed if you have different grids) 
              	if flagAxes:
              		Axis0 = simulationInstance.Data.Grid.XAxis
              		Axis1 = simulationInstance.Data.Grid.YAxis
              		Axis2 = simulationInstance.Data.Grid.ZAxis
              	else:
              		Axis0 = 0
              		Axis1 = 0
              		Axis2 = 0
              	return tempField,Axis0,Axis1,Axis2
              
              # set some options 
              # normalize the field to input power
              flagNormalize = True 
              # reshape the fields
              flagReshape   = True
              # export the axes if you want to interpolate
              flagAxes 	  = False
              
              # make a list of all the simulations in your file
              sims = list(s4l.document.AllSimulations)
              # select the 2 you want from the list (0,1 chosen here)
              sim1 = sims[0]
              sim2 = sims[1]
              
              # get all the object with all the available fields for the first simulation
              sim1Results 	      = sim1.Results()
              availableFields1	  = sim1Results["Overall Field"]
              availableFields1.FrequencySettings.ExtractedFrequency = u"All"
              # and for the second
              sim2Results 	  	  = sim2.Results()
              availableFields2	  = sim2Results["Overall Field"]
              availableFields2.FrequencySettings.ExtractedFrequency = u"All"
              
              # normalize to input power if you want to 
              if flagNormalize:
              		availableFields1.Normalization.Normalize = True
              		availableFields2.Normalization.Normalize = True
              		# you can also choose another normalization reference
              		availableFields1.Normalization.AvailableReferences = "EM Input Power(f)"
              		availableFields2.Normalization.AvailableReferences = "EM Input Power(f)"
              		# set the value (this is 1W input power now)
              		availableFields1.Normalization.NewReferenceValue   = 1
              		availableFields2.Normalization.NewReferenceValue   = 1
              
              # select the field you want (SAR in your case)
              sim1SAR = availableFields1["SAR(x,y,z,f0)"]
              sim2SAR = availableFields2["SAR(x,y,z,f0)"]
              
              # actually extract the field (most of the memory is allocated here)
              sim1SAR.Update()
              sim2SAR.Update()
              
              # select the frequency index (chosen the first, if you did your simulation at more frequencies you can change the 0 to some other index)
              sim1SARAtFreq = np.array(sim1SAR.Data.Field(0))
              sim2SARAtFreq = np.array(sim2SAR.Data.Field(0))
              
              # reshape the fields
              if flagReshape:
              	sim1SARAtFreq,Sim1Axis0,Sim1Axis1,Sim1Axis2 = reshapeSim4LifeField(sim1SARAtFreq,sim1SAR,flagAxes)
              	sim2SARAtFreq,Sim2Axis0,Sim2Axis1,Sim2Axis2 = reshapeSim4LifeField(sim2SARAtFreq,sim2SAR,flagAxes)
              
              # take the difference
              diffSAR = sim1SARAtFreq - sim2SARAtFreq
              
              # plot an arbitrary slice
              plt.pcolormesh(diffSAR[:,:,1])
              plt.show()
              
              1 Reply Last reply
              2
              • F Offline
                F Offline
                Frodi
                wrote on last edited by
                #7

                Thank you so much Peter. I appreciate it a lot. I'll try it out later.

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  montanaro
                  wrote on last edited by
                  #8

                  Hi, sorry to jump in, but in general it is possible to compare simulation results within Sim4Life without going into Python (though python is really handy for this stuff). In the analysis tab, you need to select the two Sensors of interest (select while holding the control key) and different options will pop up in the ribbon - It seems what you want is a field combiner, where you can add fields (weight the first with 1.0 and the second with -1.0 to subtract them). You can do the same for 2d plots, where you can plot lines together by selecting multiple plots in postpro and then clicking on Combine Plots in the ribbon.

                  It's a neat tool I use a lot but is a bit hidden in sim4life since you only get access to it once you select two elements in the analysis tab.

                  1 Reply Last reply
                  2
                  • SylvainS Offline
                    SylvainS Offline
                    Sylvain
                    ZMT
                    wrote on last edited by
                    #9

                    Note that the Field Combiner only works for fields that are represented on the same grid. If the fields you want to compare are from simulations done with different grids, you will have to first interpolate one field onto the grid of the other (select both fields and use the Interpolator algorithm).

                    1 Reply Last reply
                    0
                    • PeterStijnmanP Offline
                      PeterStijnmanP Offline
                      PeterStijnman
                      wrote on last edited by
                      #10

                      @montanaro ,
                      Ohh that is maybe a better solution to the current problem, awesome:)

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Search