Ticket #5649: ThermoPlot.py

File ThermoPlot.py, 1.9 KB (added by Roman Tolchenov, 8 years ago)
Line 
1import os.path
2
3def readPlotList(filename):
4        '''
5        Reads in a text file with run numbers to plot. 8 first characters of each line are nexus file
6        names without extension that must be loaded.
7       
8        Returns a list of nexus file names to load
9        '''
10        if not os.path.exists( filename ):
11                raise Exception('Cannot find file ' + filename)
12               
13        dir = os.path.dirname( filename )
14        fileList = []
15       
16        f = open(filename,'r')
17        for line in f:
18                if len(line) >= 8:
19                        runName = os.path.join( dir, line[:8] + '.nxs' )
20                        fileList.append( runName )
21        f.close()
22       
23        return fileList
24       
25def setNumericAxis(wsname):
26        from mantidsimple import createNumericAxis, mtd
27        thPlot = mtd[wsname]
28        axis = createNumericAxis(thPlot.getNumberHistograms())
29        thPlot.replaceAxis( 1, axis )   
30       
31def createThermoWS( fileList ):
32        '''
33        Loads the nexus files in fileList. The files must contain workspace groups, each member
34        workspace must contain 1 spectrum.
35        '''
36        i = 0
37        nEntries = -1
38        groups = []
39        thermoWS = []
40       
41        # load the file
42        for f in fileList:
43                wsName = '_thermo_plot_' + str(i)
44                i += 1
45                ws = Load( f, OutputWorkspace = wsName )
46                # check that all workspaces have the same size
47                n = ws.getNumberOfEntries()
48                if nEntries < 0:
49                        nEntries = n
50                elif n != nEntries:
51                        raise Exception('Workspace groups have different sizes')
52                groups.append( wsName )
53       
54        for i in range( 1, nEntries+1 ):
55                # construct a comma-separated list of member workspace names
56                workspaces = ('_'+str(i)+',').join(groups)+'_'+str(i)
57                thPlot = ConjoinSpectra(InputWorkspaces=workspaces,OutputWorkspace='ThermoPlot_'+str(i),WorkspaceIndex=0)
58                thermoWS.append( thPlot.getName() )
59                setNumericAxis(thPlot.getName())
60                ax1 = thPlot.getAxis(1)
61                for i in range(ax1.length()):
62                        ax1.setValue(i,i)
63               
64#       for ws in groups:
65#               DeleteWorkspace( ws )
66
67        return thermoWS
68
69if __name__ == "__main__":
70        fileList = readPlotList(r'PlotList.txt')
71        workspaces = createThermoWS( fileList )
72        m = importMatrixWorkspace(workspaces[0])
73        m.plotGraph2D()
74        m.plotGraph3D()
75