Ticket #10523 (assigned)
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
Note: See
        TracTickets for help on using
        tickets.
    
