Ticket #5712 (closed: fixed)

Opened 8 years ago

Last modified 5 years ago

Random crashes when running SimulateConvolvedResolutionModel

Reported by: Martyn Gigg Owned by: Martyn Gigg
Priority: critical Milestone: Release 2.3
Component: Mantid Keywords:
Cc: Blocked By:
Blocking: Tester: Nick Draper

Description

I'm seeing occasional crashes with the SimulateConvolvedResolutionModel algorithm. It doesn't seem to happen in the console it seems more prone to happen in MantidPlot

Change History

comment:1 Changed 8 years ago by Martyn Gigg

  • Status changed from new to accepted

comment:2 Changed 8 years ago by Martyn Gigg

Wrap single value log cache in CRITICAL section. Refs #5712

Calling the getPropertyAsSingleValue from a multi-threaded loop could cause a crash if the cache is updated without blocking.

Changeset: 1f83fb5e6e5d728f96dddc6d0e2edb0813121dcf

comment:3 Changed 8 years ago by Nick Draper

  • Milestone changed from Release 2.2 to Release 2.3

Moved at the end of release 2.2

comment:4 Changed 8 years ago by Martyn Gigg

  • Status changed from accepted to verify
  • Resolution set to fixed

comment:5 Changed 8 years ago by Martyn Gigg

Wrap single value log cache in CRITICAL section. Refs #5712

Calling the getPropertyAsSingleValue from a multi-threaded loop could cause a crash if the cache is updated without blocking.

Changeset: 1f83fb5e6e5d728f96dddc6d0e2edb0813121dcf

comment:6 Changed 8 years ago by Martyn Gigg

Wrap single value log cache in CRITICAL section. Refs #5712

Calling the getPropertyAsSingleValue from a multi-threaded loop could cause a crash if the cache is updated without blocking.

Changeset: 1f83fb5e6e5d728f96dddc6d0e2edb0813121dcf

comment:7 Changed 8 years ago by Nick Draper

  • Status changed from verify to verifying
  • Tester set to Nick Draper

comment:8 Changed 8 years ago by Nick Draper

Tested with the following script: It performs 20 simulations back to back

def create_cuboid_xml(xlength,ylength,zlength):
	xml = """<cuboid id="sample0">
	<left-front-bottom-point x="%(xpt)f" y="-%(ypt)f" z="-%(zpt)f"  />
	<left-front-top-point  x="%(xpt)f" y="-%(ypt)f" z="%(zpt)f"  />
	<left-back-bottom-point  x="-%(xpt)f" y="-%(ypt)f" z="-%(zpt)f"  />
	<right-front-bottom-point  x="%(xpt)f" y="%(ypt)f" z="-%(zpt)f"  />
	</cuboid>
	<algebra val="sample0" />
	"""
	return xml % {"xpt": xlength/2.0,"ypt":ylength/2.0,"zpt":zlength/2.0}


ei = 300.
bins = [-30,3,279]
temperature = 6. 
chopper_speed = 600.
  
# Oriented lattice & goniometer.
alatt = 5.57
blatt = 5.51
clatt = 12.298
uvec = [9.700000e-03,9.800000e-03,9.996000e-01]
vvec = [9.992000e-01,-3.460000e-02,-4.580000e-02]

omega = 0.0
alpha = 0.0
beta = 0.0
gamma = 0.0

# sample dimensions
sx = 0.05 # Perp
sy = 0.025 # Up direction
sz = 0.04 # Beam direction

# Crystal mosaic
eta_sig = 4.0

fake_data = CreateSimulationWorkspace(Instrument='MERLIN',
                                      BinParams=bins,UnitX='DeltaE',
                                      DetectorTableFilename='MER06398.raw')

##
## Required log entries, can be taken from real ones by placing an instrument parameter of the same
## name pointing to the log name
##
AddSampleLog(Workspace=fake_data, LogName='Ei',LogText=str(ei), LogType="Number")
AddSampleLog(Workspace=fake_data, LogName='temperature_log',LogText=str(temperature), LogType="Number")
AddSampleLog(Workspace=fake_data, LogName='chopper_speed_log',LogText=str(chopper_speed), LogType="Number")
AddSampleLog(Workspace=fake_data, LogName='eta_sigma',LogText=str(eta_sig), LogType="Number")

##
## Sample shape
##
CreateSampleShape(InputWorkspace=fake_data, ShapeXML=create_cuboid_xml(sx,sy,sz))

##
## Chopper & Moderator models. 
##
CreateModeratorModel(Workspace=fake_data,ModelType='IkedaCarpenterModerator',
                     Parameters="TiltAngle=32,TauF=2.7,TauS=0,R=0")
CreateChopperModel(Workspace=fake_data,ModelType='FermiChopperModel',
                   Parameters="AngularVelocity=chopper_speed_log,ChopperRadius=0.049,SlitThickness=0.0023,SlitRadius=1.3,Ei=Ei,JitterSigma=0.0")

##
## UB matrix
##
SetUB(Workspace=fake_data,a=alatt,b=blatt,c=clatt,u=uvec,v=vvec)

##
## Sample rotation. Simulate 1 run at zero degrees psi
##

psi = 0.0
AddSampleLog(Workspace=fake_data,LogName='psi',LogText=str(psi),LogType='Number')
SetGoniometer(Workspace=fake_data,Axis0="psi,0,1,0,1")

# Create the MD workspace
qscale = 'Q in A^-1'
fake_md = ConvertToMD(InputWorkspace=fake_data, QDimensions="Q3D", QConversionScales=qscale,
                      SplitInto=[3], SplitThreshold=100,
              MinValues="-15,-15,-15,-30", MaxValues="25,25,25,279",OverwriteExisting=True)

# Run the simulation.
resol_model = "TobyFitResolutionModel"
xsec_model = "Strontium122"
parameters = "Seff=0.7,J1a=38.7,J1b=-5.0,J2=27.3,SJc=10.0,GammaSlope=0.08,MultEps=0,TwinType=0,MCLoopMin=10,MCLoopMax=10,MCType=1" # Use sobol & restart each pixel to ensure reproducible result
for i in range(20):
	simulated = SimulateResolutionConvolvedModel(InputWorkspace=fake_md,
                                             ResolutionFunction=resol_model,
                                             ForegroundModel=xsec_model,
                                             Parameters=parameters)
			     

comment:9 Changed 8 years ago by Nick Draper

  • Status changed from verifying to closed

did not crash

comment:10 Changed 5 years ago by Stuart Campbell

This ticket has been transferred to github issue 6558

Note: See TracTickets for help on using tickets.