Ticket #10523 (assigned)

Opened 6 years ago

Last modified 5 years ago

ConvertToMatrix workspace does not work on some MD workspaces

Reported by: Alex Buts Owned by: Roman Tolchenov
Priority: major Milestone: Backlog
Component: Framework Keywords:
Cc: Blocked By:
Blocking: #10526 Tester:

Description (last modified by Alex Buts) (diff)

The script below fails with mysterious message:

Error in execution of algorithm ConvertMDHistoToMatrixWorkspace:
All arguments to init must be positive and non-zero

If one uncomments penultimate statement and comment the one before it, then it passes.

The data used in the script are in ftp://ftp.nd.rl.ac.uk/scratch/VATES_Validation/ folder.

if 'MDws' in mtd:
	MDws = mtd['MDws'];
else:
	LoadNXSPE(Filename=r'MER23357_75meV_on2one.nxspe', OutputWorkspace='cur_ws')
	AddSampleLog(Workspace='cur_ws', LogName='Psi', LogText='0.', LogType='Number')
	SetUB(Workspace='cur_ws', a='5.947', b='10.3',c='6.722', beta='107.16', u='0,0,1')
	SetGoniometer(Workspace='cur_ws', Axis0='Psi,0,1,0,1')
	MDws=ConvertToMD(InputWorkspace='cur_ws', QDimensions='Q3D', Q3DFrames='HKL', QConversionScales='HKL', PreprocDetectorsWS='preprDetMER', SplitInto='50,50,50,60', MaxRecursionDepth='1')
	

cut2D=SliceMD(InputWorkspace='MDws', AlignedDim0='[H,0,0],-3,3,120', AlignedDim1='DeltaE,0,50,80', AlignedDim2='[0,K,0],0.4,0.6,1')
cut1D=BinMD(InputWorkspace=cut2D, AlignedDim0='[H,0,0],-3,3,120', AlignedDim1='DeltaE,25,27,1')
#cut1D= BinMD(InputWorkspace='cut2D', AxisAligned=False, BasisVector0='X,units,0.935604,0.35305,0', BasisVector1='Y,units,-0.35305,0.935604,0', BasisVector2='2,units,-0,0,1', Translation='-2.65562,25,0.4', OutputExtents='0,5.66492,-1.40997,1.40997,-0.2,0.2', OutputBins='113,1,1')
cut1D_mw=ConvertMDHistoToMatrixWorkspace(InputWorkspace=cut1D,  Normalization='NumEventsNormalization')


In addition to that, script below can be used to generate test md workspace (The data to test are on also on VATES validation in ftp://ftp.nd.rl.ac.uk/scratch/VATES_Validation/Fe_data.zip archive)

Then, running the script 3, generates error message

ValueError: Invalid value for property InputWorkspace (MatrixWorkspace) "cut1_1D": Workspace cut1_1D is not of the correct type
  at line 18 in 'D:/users/abuts/SVN/Mantid/VATES_Validation/Russell/cut2D_1D.py'
  caused by line 568 in 'C:/mprogs/MantidNightlyInstall/bin\mantid\simpleapi.py'
  caused by line 530 in 'C:/mprogs/MantidNightlyInstall/bin\mantid\simpleapi.py'

And attempt to run ConvertToMatrixWorkspace from GUI crashes Mantid

Script 2: Build test mD workspace

import os
#
data_path=os.path.dirname(os.path.realpath(__file__))

config.appendDataSearchDir(data_path)
config['defaultsave.directory']=data_path
# set up target ws name and remove target workspace with the same name which can occasionally exist.
# list of MD files (workspaces) to combine into target MD workspace
MD_FilesList='';

# define convetr to MD parameters
pars = dict();
pars['InputWorkspace']=''
pars['QDimensions']='Q3D'
pars['dEAnalysisMode']='Direct'
pars['Q3DFrames']='HKL'
pars['QConversionScales']='HKL'
pars['PreprocDetectorsWS']='preprDetMantid'
pars['MinValues']='-3,-3,-3,-40.0'
pars['MaxValues']='7,7,3,380.0'
pars['SplitInto']=50
pars['MaxRecursionDepth']=1
pars['MinRecursionDepth']=1
pars['OverwriteExisting']=1  # Change this to false, if the files should/can be added in memory
# test script combines all contributed files in memory
pars['OverwriteExisting']=0  # Change this to false, if the files should/can be added in memory
#
#---> Start loop over contributing files
psi=range(0,90,2)
#psi=range(0,4,2)
for n in range(len(psi)):
     source_file = 'map'+str(15052+n)+'_ei400.nxspe'; # redefine source files list as function of loop number
     target  = 'MDMAP_psi'+str(n*2)+'.nxs';
     # check if the file already been converted to MD and is there
     if not(os.path.exists(target )):
         print 'Converting ',source_file
         current_ws=LoadNXSPE(Filename=source_file)
         #### For the sample script, simulate load operation above
         #current_ws = CreateSimulationWorkspace(Instrument='MAP',BinParams=[-3,1,3],UnitX='DeltaE',OutputWorkspace=source_file)
         AddSampleLog(Workspace=current_ws,LogName='Ei',LogText='400.0',LogType='Number')

         #### Add iformation which is not stored in the nxspe file
         # Add UB matrix (lattice and the beam direction)
         SetUB(Workspace=current_ws,a='2.87',b='2.87',c='2.87',u='1,0,0',v='0,1,0')
         # Add crystal rotation (assume rotation abgle Psi=5*n where n is file number. Define list of angles if this is not correct
         AddSampleLog(Workspace=current_ws,LogName='Psi',LogText=str(psi[n])+'.',LogType='Number')  # --correct Psi value may be already in nxspe file. This operation is then unnecessary
         # set crystal rotation
         SetGoniometer(Workspace=current_ws,Axis0='Psi,0,1,0,1')

         # Convert to MD
         pars['InputWorkspace']=current_ws;
         md_ws=ConvertToMD(**pars)

         # save MD for further usage -- disabled in test script
         SaveMD(md_ws,Filename=target);
         DeleteWorkspace(md_ws);  # delete intermediate workspace to save memory
         DeleteWorkspace(current_ws);

     # add the file name of the file to combine
     if (len(MD_FilesList) == 0):
         MD_FilesList = target;
     else:
         MD_FilesList=MD_FilesList+','+target;
#---> End loop

print(MD_FilesList)

# merge md files into file-based MD workspace
md_ws = MergeMDFiles(MD_FilesList,OutputFilename='TestSQW_1.nxs',Parallel='0');
# plot results using sliceviewer
#plotSlice(md_ws)
# produce some test output
#print "Resulting MD workspace contains {0} events and {1} dimensions".format(md_ws.getNEvents(),md_ws.getNumDims())
#print "MD workspace ID is:\n",md_ws.id
print "--------------------------------------------"

Script 3: Make cut and convert:

import os
#
data_path=os.path.dirname(os.path.realpath(__file__))

config.appendDataSearchDir(data_path)
config['defaultsave.directory']=data_path


if 'md_ws' in mtd:
	md_ws=mtd['md_ws'];
else:
	md_ws=LoadMD(Filename='TestSQW_1.nxs');

cut2_MD=SliceMD(InputWorkspace='md_ws', AxisAligned=False, NormalizeBasisVectors=False,\
                         BasisVector0='[h:k:0],rlu,1,1,0,0', BasisVector1='dE,mEv,0,0,0,1', BasisVector2='[mh:k:0],rlu,-1,1,0,0', BasisVector3='l,rlu,0,0,1,0', OutputExtents='-3,3,0,280,-1.1,-0.9,-0.1,0.1', OutputBins='120,70,1,1')

cut1_1D=BinMD(cut2_MD,AxisAligned=True,AlignedDim0='[h:k:0],-3,3,120',AlignedDim1='dE,100,110,1')
cut1D_1d_mws=ConvertToMatrixWorkspace(cut1_1D)

Change History

comment:1 Changed 6 years ago by Alex Buts

  • Blocking 10526 added

comment:2 Changed 6 years ago by Alex Buts

  • Description modified (diff)

comment:3 Changed 6 years ago by Nick Draper

  • Status changed from new to assigned

comment:4 Changed 6 years ago by Nick Draper

Moved to the backlog at the code freeze of R3.3

comment:5 Changed 6 years ago by Nick Draper

  • Milestone changed from Release 3.3 to Backlog

comment:6 Changed 5 years ago by Stuart Campbell

This ticket has been transferred to github issue 11365

Note: See TracTickets for help on using tickets.