From b70757afc0e2516554faece48060e225212f5bde Mon Sep 17 00:00:00 2001
From: Roman Tolchenov <roman.tolchenov@stfc.ac.uk>
Date: Tue, 23 Oct 2012 10:29:44 +0100
Subject: [PATCH] Revert "Re #5974. Adde changes by Spencer Howells."

This reverts commit 945115686478d7fe1df9afdc5bbfe8b3ce8221c5.
---
 .../scripts/Inelastic/IndirectDataAnalysis.py | 171 ++++++------------
 1 file changed, 60 insertions(+), 111 deletions(-)

diff --git a/Code/Mantid/scripts/Inelastic/IndirectDataAnalysis.py b/Code/Mantid/scripts/Inelastic/IndirectDataAnalysis.py
index 9fbd6acde2b..6b6873346ea 100644
--- a/Code/Mantid/scripts/Inelastic/IndirectDataAnalysis.py
+++ b/Code/Mantid/scripts/Inelastic/IndirectDataAnalysis.py
@@ -3,7 +3,7 @@ from IndirectImport import import_mantidplot
 mp = import_mantidplot()
 from IndirectCommon import *
 from mantid import config, logger
-import math, re, os.path, numpy as np
+import math, re, os.path
 
 ##############################################################################
 # Misc. Helper Functions
@@ -143,13 +143,11 @@ def elwin(inputFiles, eRange, Save=False, Verbose=True, Plot=False):
         elif ( len(eRange) == 2 ):
             logger.notice('Using 1 energy range from '+range1)
     for file in inputFiles:
-        (direct, file) = os.path.split(file)
-        (root, ext) = os.path.splitext(file)
-        savefile = root[:-3]
         LoadNexus(Filename=file, OutputWorkspace=tempWS)
         if Verbose:
             logger.notice('Reading file : '+file)
         nsam,ntc = CheckHistZero(tempWS)
+        savefile = getWSprefix(tempWS)
         if ( len(eRange) == 4 ):
             ElasticWindow(InputWorkspace=tempWS, Range1Start=eRange[0], Range1End=eRange[1], 
                 Range2Start=eRange[2], Range2End=eRange[3],
@@ -174,17 +172,11 @@ def elwin(inputFiles, eRange, Save=False, Verbose=True, Plot=False):
     return eq1, eq2
 
 def elwinPlot(eq1,eq2):
-    nBins = mtd[eq1[0]].blocksize()
-    if nBins >= 10:
-        nBins = 10
-    lastXeq1 = mtd[eq1[0]].readX(0)[nBins-1]
+    lastXeq1 = mtd[eq1[0]].readX(0)[-1]
     graph1 = mp.plotSpectrum(eq1, 0)
     layer = graph1.activeLayer()
     layer.setScale(mp.Layer.Bottom, 0.0, lastXeq1)
-    nBins = mtd[eq2[0]].blocksize()
-    if nBins >= 10:
-        nBins = 10
-    lastXeq2 = mtd[eq2[0]].readX(0)[nBins-1]
+    lastXeq2 = mtd[eq2[0]].readX(0)[-1]
     graph2 = mp.plotSpectrum(eq2, 0)
     layer = graph2.activeLayer()
     layer.setScale(mp.Layer.Bottom, 0.0, lastXeq2)
@@ -278,67 +270,43 @@ def fury(sam_files, res_file, rebinParam, RES=True, Save=False, Verbose=False,
 # FuryFit
 ##############################################################################
 
-def furyfitParsToWS(Table, Data, option):
-    nopt = len(option)
-    if nopt == 2:
-        npeak = option[0]
-        type = option[1]
-    elif nopt == 4:
-        npeak = 2
-        type = 'SE'
-    else:
-        logger.notice('Bad option : ' +option)	    
-    Q = createQaxis(Data)
-    nQ = len(Q)
-    Q.append(2*Q[nQ-1]-Q[nQ-2])
+def furyfitParsToWS(Table, Data):
+    dataX = createQaxis(Data)
+    dataY = []
+    dataE = []
+    names = ""
+    xAxisVals = []
     ws = mtd[Table]
-    rCount = ws.rowCount()
     cCount = ws.columnCount()
+    rCount = ws.rowCount()
     cName =  ws.getColumnNames()
-    Qa = np.array(Q)
-    A0v = ws.column(1)     #bgd value
-    A0e = ws.column(2)     #bgd error
-    Iy1 = ws.column(5)      #intensity1 value
-    Ie1 = ws.column(2)      #intensity1 error = bgd
-    dataX = Qa
-    dataY = np.array(Iy1)
-    dataE = np.array(Ie1)
-    names = cName[5]
-    Ty1 = ws.column(7)      #tau1 value
-    Te1 = ws.column(8)      #tau1 error
-    dataX = np.append(dataX,Qa)
-    dataY = np.append(dataY,np.array(Ty1))
-    dataE = np.append(dataE,np.array(Te1))
-    names += ","+cName[7]
-    nSpec = 2
-    logger.notice(' Option : '+str(npeak)+' '+type)
-    if npeak == 1:
-        By1 = ws.column(9)  #beta1 value
-        Be1 = ws.column(10) #beta2 error
-        dataX = np.append(dataX,Qa)
-        dataY = np.append(dataY,np.array(By1))
-        dataE = np.append(dataE,np.array(Be1))
-        names += ","+cName[9]
-        nSpec += 1
-        logger.notice(' Nspec : '+str(nSpec)+' '+names)
-    if npeak == 2:
-        Iy2 = ws.column(9)  #intensity2 value
-        Ie2 = ws.column(10) #intensity2 error
-        dataX = np.append(dataX,Qa)
-        dataY = np.append(dataY,np.array(Iy2))
-        dataE = np.append(dataE,np.array(Ie2))
-        names += ","+cName[9]
-        nSpec += 1
-        Ty2 = ws.column(11)  #tau2 value
-        Te2 = ws.column(12) #tau2 error
-        dataX = np.append(dataX,Qa)
-        dataY = np.append(dataY,np.array(Ty2))
-        dataE = np.append(dataE,np.array(Te2))
-        names += ","+cName[11]
-        nSpec += 1
-    logger.notice(' Ns : '+str(nSpec)+' '+names)
+    nSpec = ( cCount - 1 ) / 2
+    yA0 = ws.column(1)
+    eA0 = ws.column(2)
+    logger.notice(str(yA0))
+    logger.notice(str(eA0))
+    xAxis = cName[0]
+    stretched = 0
+    for spec in range(0,nSpec):
+        yCol = (spec*2)+1
+        yAxis = cName[(spec*2)+1]
+        if ( re.search('Intensity$', yAxis) or re.search('Tau$', yAxis) or
+            re.search('Beta$', yAxis) ):
+            xAxisVals += dataX
+            if (len(names) > 0):
+                names += ","
+            names += yAxis
+            eCol = (spec*2)+2
+            eAxis = cName[(spec*2)+2]
+            for row in range(0, rCount):
+                dataY.append(ws.cell(row,yCol))
+                dataE.append(ws.cell(row,eCol))
+            if ( re.search('Beta$', yAxis) ): # need to know how many of curves
+                stretched += 1                # are stretched exponentials
+        else:
+            nSpec -= 1
     wsname = Table + "_Workspace"
-    CreateWorkspace(OutputWorkspace=wsname, DataX=dataX, DataY=dataY, DataE=dataE, 
+    CreateWorkspace(OutputWorkspace=wsname, DataX=xAxisVals, DataY=dataY, DataE=dataE, 
         Nspec=nSpec, UnitX='MomentumTransfer', VerticalAxisUnit='Text',
         VerticalAxisValues=names)
     return wsname
@@ -369,13 +337,11 @@ def furyfitSeq(inputWS, func, ftype, startx, endx, Save, Plot, Verbose = True):
     for i in range(1,nHist):
         input += ';'+inputWS+',i'+str(i)
     outNm = getWSprefix(inputWS) + 'fury_' + ftype + "0_to_" + str(nHist-1)
-    option = ftype[:-2]
     if Verbose:
-        logger.notice('Option: '+option)  
         logger.notice(func)  
     PlotPeakByLogValue(Input=input, OutputWorkspace=outNm, Function=func, 
         StartX=startx, EndX=endx, FitType='Sequential')
-    wsname = furyfitParsToWS(outNm, inputWS, option)
+    wsname = furyfitParsToWS(outNm, inputWS)
     RenameWorkspace(InputWorkspace=outNm, OutputWorkspace=outNm+"_Parameters")
     if Save:
         opath = os.path.join(workdir, wsname+'.nxs')					# path name for nxs file
@@ -389,8 +355,6 @@ def furyfitSeq(inputWS, func, ftype, startx, endx, Save, Plot, Verbose = True):
 
 def furyfitMultParsToWS(Table, Data):
     dataX = []
-    dataA0v = []
-    dataA0e = []
     dataY1 = []
     dataE1 = []
     dataY2 = []
@@ -399,24 +363,21 @@ def furyfitMultParsToWS(Table, Data):
     dataE3 = []
     ws = mtd[Table+'_Parameters']
     rCount = ws.rowCount()
-    cCount = ws.columnCount()
-    logger.notice(' Cols : '+str(cCount))
     nSpec = ( rCount - 1 ) / 5
     for spec in range(0,nSpec):
-        A0val = 1
-        A0err = 2
+        n1 = spec*5
+        rowi = n1 + 2                   #intensity
         ival = 5                   #intensity value
         ierr = 6                   #intensity error
         tval = 7                   #tau value
         terr = 8                   #tau error
+        rowt = n1 + 3                   #tau
         rowb = 4                        #beta
         bval = 9                   #beta value
         bval = 10                   #beta error
         dataX.append(spec)
-        dataA0v.append(ws.cell(spec,A0val))
-        dataA0e.append(ws.cell(spec,A0err))
         dataY1.append(ws.cell(spec,ival))
-        dataE1.append(ws.cell(spec,A0err))
+        dataE1.append(ws.cell(spec,ierr))
         dataY2.append(ws.cell(spec,tval))
         dataE2.append(ws.cell(spec,terr))
         dataY3.append(ws.cell(spec,bval))
@@ -518,14 +479,8 @@ def msdfitPlotFits(lniWS, fitWS, n):
     mfit_plot = mp.plotSpectrum(lniWS,n,True)
     mp.mergePlots(mfit_plot,mp.plotSpectrum(fitWS+'_line',n,False))
 
-def getInstrRun(file):
-    mo = re.match('([a-zA-Z]+)([0-9]+)',file)
-    instr_and_run = mo.group(0)          # instr name + run number
-    instr = mo.group(1)                  # instrument prefix
-    run = mo.group(2)                    # run number as string
-    return instr,run
-
 def msdfit(inputs, startX, endX, Save=False, Verbose=True, Plot=True):
+    import re
     StartTime('msdFit')
     workdir = config['defaultsave.directory']
     log_type = 'sample'
@@ -540,10 +495,6 @@ def msdfit(inputs, startX, endX, Save=False, Verbose=True, Plot=True):
         if Verbose:
             logger.notice('Reading Run : '+file)
         LoadNexusProcessed(FileName=file, OutputWorkspace=root)
-        eiq = root[:-1]+'1'
-        LoadNexusProcessed(FileName=eiq+'.nxs', OutputWorkspace='__eiq')
-        (instr, run) = getInstrRun(root)
-        run_name = instr + run
         nsam,ntc = CheckHistZero(root)
         inX = mtd[root].readX(0)
         inY = mtd[root].readY(0)
@@ -564,30 +515,32 @@ def msdfit(inputs, startX, endX, Save=False, Verbose=True, Plot=True):
         lnWS = root[:-3] + 'lnI'
         CreateWorkspace(OutputWorkspace=lnWS, DataX=inX, DataY=logy, DataE=loge,
             Nspec=1)
-        log_name = run_name+'_'+log_type
+        mo = re.match('([a-zA-Z]+)([0-9]+)',root)
+        log_name_root = mo.group(0) # instr name + run number
+        run_number = mo.group(2)    # run number as string
+        log_name = log_name_root+'_'+log_type
         log_file = log_name+'.txt'
         log_path = FileFinder.getFullPath(log_file)
         if (log_path == ''):
-            logger.notice(' Run : '+run_name +' ; Temperature file not found')
-            xval = int(run[-3:])
+            logger.notice(' Run : '+log_name_root +' ; Temperature file not found')
+            #xval = int(root[5:8])
+            xval = int(run_number[-3:]) # take 3 last digits of the run number
             xlabel = 'Run'
-        else:			
+        else:
             logger.notice('Found '+log_path)
             LoadLog(Workspace=root, Filename=log_path)
             run_logs = mtd[root].getRun()
             tmp = run_logs[log_name].value
             temp = tmp[len(tmp)-1]
-            logger.notice(' Run : '+run_name+' ; Temperature = '+str(temp))
+            logger.notice(' Run : '+log_name_root +' ; Temperature = '+str(temp))
             xval = temp
             xlabel = 'Temp'
         if (np == 0):
-            RenameWorkspace(InputWorkspace='__eiq',OutputWorkspace='eiq')
-            first = run_name
-            last = run
+            first = log_name_root
+            last = log_name_root
             run_list = lnWS
         else:
-            ConjoinWorkspaces(InputWorkspace1='eiq', InputWorkspace2='__eiq', CheckOverlapping=False)
-            last = run
+            last = log_name_root
             run_list += ';'+lnWS
         x_list.append(xval)
         DeleteWorkspace(root)
@@ -596,13 +549,16 @@ def msdfit(inputs, startX, endX, Save=False, Verbose=True, Plot=True):
        logger.notice('Fitting Runs '+first+' to '+last)
        logger.notice('Q-range from '+str(startX)+' to '+str(endX))
     function = 'name=LinearBackground, A0=0, A1=0'
-    mname = first+'_to_'+last
+    #mname = first[0:8]+'_to_'+last[3:8]
+    mo = re.match('[a-zA-Z]+[0-9]+',first)
+    mname = mo.group(0)+'_to_'
+    mo = re.match('[a-zA-Z]+([0-9]+)',last)
+    mname += mo.group(1)
     msdWS = mname+'_msd'
     PlotPeakByLogValue(Input=run_list, OutputWorkspace=msdWS+'_Table', Function=function,
         StartX=startX, EndX=endX, FitType = 'Sequential')
     msdfitParsToWS(msdWS, x_list)
     np = 0
-    eiqWS = mname+'_eiq'
     lniWS = mname+'_lnI'
     fitWS = mname+'_Fit'
     a0 = mtd[msdWS+'_a0'].readY(0)
@@ -633,20 +589,13 @@ def msdfit(inputs, startX, endX, Save=False, Verbose=True, Plot=True):
         np += 1
         group = fitWS+'_data,'+ fitWS+'_line'
         GroupWorkspaces(InputWorkspaces=group,OutputWorkspace=fitWS)
-    RenameWorkspace(InputWorkspace='eiq',OutputWorkspace=eiqWS)
     if Plot:
         msdfitPlotSeq(msdWS, xlabel)
         msdfitPlotFits(lniWS, fitWS, 0)
     if Save:
-        eiq_path = os.path.join(workdir, eiqWS+'.nxs')					# path name for nxs file
-        SaveNexusProcessed(InputWorkspace=eiqWS, Filename=eiq_path, Title=eiqWS)
-        lni_path = os.path.join(workdir, lniWS+'.nxs')					# path name for nxs file
-        SaveNexusProcessed(InputWorkspace=lniWS, Filename=lni_path, Title=lniWS)
         msd_path = os.path.join(workdir, msdWS+'.nxs')					# path name for nxs file
         SaveNexusProcessed(InputWorkspace=msdWS, Filename=msd_path, Title=msdWS)
         if Verbose:
-            logger.notice('Output eiq file : '+eiq_path)  
-            logger.notice('Output lnI file : '+lni_path)  
             logger.notice('Output msd file : '+msd_path)  
     EndTime('msdFit')
     return msdWS
-- 
GitLab