Ticket #8738: QLwater.py

File QLwater.py, 5.0 KB (added by Samuel Jackson, 7 years ago)

QLWater algorithm wrapper

Line 
1# Algorithm to start Bayes programs
2from mantid.simpleapi import *
3from mantid.kernel import StringListValidator, StringMandatoryValidator
4from mantid.api import PythonAlgorithm, AlgorithmFactory
5from mantid import config
6import os
7
8class QLwater(PythonAlgorithm):
9 
10        def category(self):
11                return "Workflow\\MIDAS;PythonAlgorithms"
12
13        def PyInit(self):
14                self.declareProperty(name='InputType',defaultValue='File',validator=StringListValidator(['File','Workspace']), doc='Origin of data input - File (*.nxs) or Workspace')
15                self.declareProperty(name='Instrument',defaultValue='iris',validator=StringListValidator(['irs','iris','osi','osiris']), doc='Instrument')
16                self.declareProperty(name='Analyser',defaultValue='graphite002',validator=StringListValidator(['graphite002','graphite004']), doc='Analyser & reflection')
17                self.declareProperty(name='SamNumber',defaultValue='',validator=StringMandatoryValidator(), doc='Sample run number')
18                self.declareProperty(name='ResInputType',defaultValue='File',validator=StringListValidator(['File','Workspace']), doc='Origin of res input - File (*_res.nxs) or Workspace')
19                self.declareProperty(name='ResNumber',defaultValue='',validator=StringMandatoryValidator(), doc='Resolution run number')
20                self.declareProperty(name='BackgroundOption',defaultValue='Sloping',validator=StringListValidator(['Sloping','Flat','Zero']), doc='Form of background to fit')
21                self.declareProperty(name='ElasticOption',defaultValue=True, doc='Include elastic peak in fit')
22                self.declareProperty(name='ResNorm',defaultValue=False, doc='Use ResNorm output file')
23                self.declareProperty(name='ResNormNumber', defaultValue='', doc='Name of file containing fixed width values')
24                self.declareProperty(name='EnergyMin', defaultValue=-0.5, doc='Minimum energy for fit. Default=-0.5')
25                self.declareProperty(name='EnergyMax', defaultValue=0.5, doc='Maximum energy for fit. Default=0.5')
26                self.declareProperty(name='SamBinning', defaultValue=1, doc='Binning value (integer) for sample. Default=1')
27                self.declareProperty(name='ResBinning', defaultValue=1, doc='Binning value (integer) for resolution - QLd only. Default=1')
28                self.declareProperty(name='Sequence',defaultValue=True, doc='Switch Sequence Off/On')
29                self.declareProperty(name='Plot',defaultValue='None',validator=StringListValidator(['None','ProbBeta','Intensity','FwHm','Fit','All']), doc='Plot options')
30                self.declareProperty(name='Verbose',defaultValue=True, doc='Switch Verbose Off/On')
31                self.declareProperty(name='Save',defaultValue=False, doc='Switch Save result to nxs file Off/On')
32 
33        def PyExec(self):
34                from IndirectImport import run_f2py_compatibility_test, is_supported_f2py_platform
35
36                if is_supported_f2py_platform():
37                        import IndirectBayes as Main
38
39                run_f2py_compatibility_test()
40               
41                self.log().information('QLines input')
42                inType = self.getPropertyValue('InputType')
43                prefix = self.getPropertyValue('Instrument')
44                ana = self.getPropertyValue('Analyser')
45                prog = 'QLwat'
46                sam = self.getPropertyValue('SamNumber')
47                rinType = self.getPropertyValue('ResInputType')
48                rtype = 'Res'
49                res = self.getPropertyValue('ResNumber')
50                elastic = self.getProperty('ElasticOption').value
51                bgd = self.getPropertyValue('BackgroundOption')
52                width = False
53                wfile = ''
54                resnorm = self.getProperty('ResNorm').value
55                resn = self.getPropertyValue('ResNormNumber')
56                emin = self.getPropertyValue('EnergyMin')
57                emax = self.getPropertyValue('EnergyMax')
58                nbin = self.getPropertyValue('SamBinning')
59                nrbin = self.getPropertyValue('ResBinning')
60                nbins = [nbin, nrbin]
61
62                if rtype == 'Res':
63                        rext = 'res'
64                if rtype == 'Data':
65                        rext = 'red'
66                sname = prefix+sam+'_'+ana + '_red'
67                rname = prefix+res+'_'+ana + '_' + rext
68                rsname = prefix+resn+'_'+ana + '_ResNorm_Paras'
69                erange = [float(emin), float(emax)]
70
71                fitOp = [elastic, bgd, width, resnorm]
72                loopOp = self.getProperty('Sequence').value
73                verbOp = self.getProperty('Verbose').value
74                plotOp = self.getPropertyValue('Plot')
75                saveOp = self.getProperty('Save').value
76
77                workdir = config['defaultsave.directory']
78                if inType == 'File':
79                        spath = os.path.join(workdir, sname+'.nxs')             # path name for sample nxs file
80                        LoadNexusProcessed(Filename=spath, OutputWorkspace=sname)
81                        Smessage = 'Sample from File : '+spath
82                else:
83                        Smessage = 'Sample from Workspace : '+sname
84                if rinType == 'File':
85                        rpath = os.path.join(workdir, rname+'.nxs')             # path name for res nxs file
86                        LoadNexusProcessed(Filename=rpath, OutputWorkspace=rname)
87                        Rmessage = 'Resolution from File : '+rpath
88                else:
89                        Rmessage = 'Resolution from Workspace : '+rname
90                if verbOp:
91                        logger.notice(Smessage)
92                        logger.notice(Rmessage)
93                if fitOp[3] == 1:
94                        path = os.path.join(workdir, rsname+'.nxs')     # path name for resnnrm nxs file
95                        LoadNexusProcessed(Filename=path, OutputWorkspace='ResNorm')
96                Main.QLRun(prog,sname,rname,rsname,erange,nbins,fitOp,wfile,loopOp,verbOp,plotOp,saveOp)
97
98AlgorithmFactory.subscribe(QLwater)         # Register algorithm with Mantid