diff --git a/Code/Mantid/scripts/Reflectometry/isis_reflgui/combineMulti.py b/Code/Mantid/scripts/Reflectometry/isis_reflgui/combineMulti.py
index d69cd11b1503f437669e6e5da593411eb3b785b2..34c26e1082b8816c89223446656aa81695198e66 100644
--- a/Code/Mantid/scripts/Reflectometry/isis_reflgui/combineMulti.py
+++ b/Code/Mantid/scripts/Reflectometry/isis_reflgui/combineMulti.py
@@ -1,10 +1,11 @@
 #from ReflectometerCors import *
 from l2q import *
-from mantidsimple import *
+from mantid.simpleapi import *
 #from mantid.simpleapi import *  # New API
 #from mantidplot import *
 from PyQt4 import QtCore, uic
 import math
+from mantid.api import WorkspaceGroup
 
 def combineDataMulti(wkspList,outputwksp,begoverlap,endoverlap,Qmin,Qmax,binning,scalehigh=1,scalefactor=-1.0,whichPeriod=1,keep=0):
 	'''
@@ -23,7 +24,7 @@ def combineDataMulti(wkspList,outputwksp,begoverlap,endoverlap,Qmin,Qmax,binning
 		defaultoverlaps = 0
 		
     #copy first workspace into temporary wksp 'currentSum'
-	CropWorkspace(wkspList[0],'currentSum')
+	CropWorkspace(InputWorkspace=wkspList[0],OutputWorkspace='currentSum')
 	print "Length: ",len(wkspList),wkspList
 	
 	for i in range(0,len(wkspList)-1):
@@ -37,17 +38,17 @@ def combineDataMulti(wkspList,outputwksp,begoverlap,endoverlap,Qmin,Qmax,binning
 			overlapHigh = endoverlap[i]
 			
         #check if multiperiod
-		if (mtd['currentSum'].isGroup()):
+		if isinstance(mtd['currentSum'], WorkspaceGroup):
 			tempwksp,sf = combine2('currentSum_'+str(whichPeriod),wkspList[i+1]+'_'+str(whichPeriod),'_currentSum',overlapLow,overlapHigh,Qmin,Qmax,binning,scalehigh)
             #if (sum(mtd['currentSum_2'].dataY(0))):
 			print tempwksp, sf
 			
-			mtd.deleteWorkspace("_currentSum")
+			DeleteWorkspace("_currentSum")
 			#CropWorkspace(wkspList[0],'currentSum')
 			print wkspList
 			combine2('currentSum',wkspList[i+1],'temp',overlapLow,overlapHigh,Qmin,Qmax,binning,scalehigh,sf)
-			CropWorkspace('temp','currentSum')
-			mtd.deleteWorkspace("temp")
+			CropWorkspace(InputWorkspace='temp',OutputWorkspace='currentSum')
+			DeleteWorkspace("temp")
             #else:
 			
 			#	combine2('currentSum_1',wkspList[i+1]+'_1','currentSum',begoverlap,endoverlap,Qmin,Qmax,binning,sf)
@@ -55,14 +56,14 @@ def combineDataMulti(wkspList,outputwksp,begoverlap,endoverlap,Qmin,Qmax,binning
 		else:
 			print "Iteration",i
 			combine2('currentSum',wkspList[i+1],'currentSum',overlapLow,overlapHigh,Qmin,Qmax,binning,scalehigh)
-	RenameWorkspace('currentSum',outputwksp)
+	RenameWorkspace(InputWorkspace='currentSum',OutputWorkspace=outputwksp)
 	if not keep:
-		names = mtd.getWorkspaceNames()
+		names = mtd.getObjectNames()
 		for ws in wkspList:
 			#print ws.rstrip("_binned")
-			mtd.deleteWorkspace(ws)
-			mtd.deleteWorkspace(ws.rstrip("_IvsQ_binned")+"_IvsLam")
-			mtd.deleteWorkspace(ws.rstrip("_IvsQ_binned")+"_IvsQ")
+			DeleteWorkspace(ws)
+			DeleteWorkspace(ws.rstrip("_IvsQ_binned")+"_IvsLam")
+			DeleteWorkspace(ws.rstrip("_IvsQ_binned")+"_IvsQ")
 	return mtd[outputwksp]
 
 
@@ -70,16 +71,16 @@ def combine2(wksp1,wksp2,outputwksp,begoverlap,endoverlap,Qmin,Qmax,binning,scal
     import numpy as np
 
     print "OVERLAPS:", begoverlap, endoverlap
-    Rebin(wksp1,wksp1+"reb",str(Qmin)+","+str(binning)+","+str(Qmax))
+    Rebin(InputWorkspace=wksp1,OutputWorkspace=wksp1+"reb",Params=str(Qmin)+","+str(binning)+","+str(Qmax))
     w1=getWorkspace(wksp1+"reb")
     #nzind=np.nonzero(w1.dataY(0))[0]
     #w1.dataY(0)[int(nzind[0])]=0.0	#set  edge of zeropadding to zero
     
-    RebinToWorkspace(wksp2,wksp1+"reb",wksp2+"reb")
+    RebinToWorkspace(WorkspaceToRebin=wksp2,WorkspaceToMatch=wksp1+"reb",OutputWorkspace=wksp2+"reb")
     w2=getWorkspace(wksp2+"reb")
     nzind=np.nonzero(w1.dataY(0))[0]
     w2.dataY(0)[int(nzind[0])]=0.0	#set  edge of zeropadding to zero
-    Rebin(wksp2,wksp2+"reb",str(Qmin)+","+str(binning)+","+str(Qmax))
+    Rebin(InputWorkspace=wksp2,OutputWorkspace=wksp2+"reb",Params=str(Qmin)+","+str(binning)+","+str(Qmax))
 
     # find the bin numbers to avoid gaps
     a1=getWorkspace(wksp1+"reb").binIndexOf(begoverlap)
@@ -90,14 +91,14 @@ def combine2(wksp1,wksp2,outputwksp,begoverlap,endoverlap,Qmin,Qmax,binning,scal
 
 
     if scalefactor <= 0.0:
-        Integration(wksp1+"reb","i1temp",str(begoverlap),str(endoverlap))
-        Integration(wksp2+"reb","i2temp",str(begoverlap),str(endoverlap))
+        Integration(InputWorkspace=wksp1+"reb",OutputWorkspace="i1temp", RangeLower=str(begoverlap), RangeUpper=str(endoverlap))
+        Integration(InputWorkspace=wksp2+"reb",OutputWorkspace="i2temp", RangeLower=str(begoverlap), RangeUpper=str(endoverlap))
         if scalehigh:
-            Multiply(wksp2+"reb","i1temp",wksp2+"reb")
-            Divide(wksp2+"reb","i2temp",wksp2+"reb")
+            Multiply(LHSWorkspace=wksp2+"reb",RHSWorkspace="i1temp",OutputWorkspace=wksp2+"reb")
+            Divide(LHSWorkspace=wksp2+"reb",RHSWorkspace="i2temp",OutputWorkspace=wksp2+"reb")
         else:
-            Multiply(wksp1+"reb","i2temp",wksp1+"reb")
-            Divide(wksp1+"reb","i1temp",wksp1+"reb")
+            Multiply(LHSWorkspace=wksp1+"reb",RHSWorkspace="i2temp",OutputWorkspace=wksp1+"reb")
+            Divide(LHSWorkspace=wksp1+"reb",RHSWorkspace="i1temp",OutputWorkspace=wksp1+"reb")
         
         y1=getWorkspace("i1temp").readY(0)
         y2=getWorkspace("i2temp").readY(0)
@@ -107,34 +108,34 @@ def combine2(wksp1,wksp2,outputwksp,begoverlap,endoverlap,Qmin,Qmax,binning,scal
         MultiplyRange(wksp2+"reb",wksp2+"reb","0",str(wksp2len-2),str(scalefactor))
         
     
-    MultiplyRange(wksp1+"reb","overlap1","0",str(a1-1))#-1
-    MultiplyRange("overlap1","overlap1",str(a2),str(wksp1len-2))
+    MultiplyRange(InputWorkspace=wksp1+"reb",OutputWorkspace="overlap1",StartBin=0,EndBin=a1-1)
+    MultiplyRange(InputWorkspace="overlap1", OutputWorkspace="overlap1",StartBin=a2,EndBin=wksp1len-2)
 	
-    MultiplyRange(wksp2+"reb","overlap2","0",str(a1))#-1
-    MultiplyRange("overlap2","overlap2",str(a2+1),str(wksp1len-2))
+    MultiplyRange(InputWorkspace=wksp2+"reb",OutputWorkspace="overlap2",StartBin=0,EndBin=a1)#-1
+    MultiplyRange(InputWorkspace="overlap2",OutputWorkspace="overlap2",StartBin=a2+1,EndBin=wksp1len-2)
 	
-    MultiplyRange(wksp1+"reb",wksp1+"reb",str(a1),str(wksp1len-2))
-    MultiplyRange(wksp2+"reb",wksp2+"reb","0",str(a2))
-    WeightedMean("overlap1","overlap2","overlapave")
-    Plus(wksp1+"reb","overlapave",'temp1')
-    Plus('temp1',wksp2+"reb",outputwksp)    
+    MultiplyRange(InputWorkspace=wksp1+"reb",OutputWorkspace=wksp1+"reb",StartBin=a1, EndBin=wksp1len-2)
+    MultiplyRange(InputWorkspace=wksp2+"reb",OutputWorkspace=wksp2+"reb",StartBin=0, EndBin=a2)
+    WeightedMean(InputWorkspace1="overlap1",InputWorkspace2="overlap2",OutputWorkspace="overlapave")
+    Plus(LHSWorkspace=wksp1+"reb",RHSWorkspace="overlapave",OutputWorkspace='temp1')
+    Plus(LHSWorkspace='temp1',RHSWorkspace=wksp2+"reb",OutputWorkspace=outputwksp)    
     
-    mtd.deleteWorkspace("temp1")
-    mtd.deleteWorkspace(wksp1+"reb")
-    mtd.deleteWorkspace(wksp2+"reb")
-    mtd.deleteWorkspace("i1temp")
-    mtd.deleteWorkspace("i2temp")
-    mtd.deleteWorkspace("overlap1")
-    mtd.deleteWorkspace("overlap2")
-    mtd.deleteWorkspace("overlapave")
+    DeleteWorkspace("temp1")
+    DeleteWorkspace(wksp1+"reb")
+    DeleteWorkspace(wksp2+"reb")
+    DeleteWorkspace("i1temp")
+    DeleteWorkspace("i2temp")
+    DeleteWorkspace("overlap1")
+    DeleteWorkspace("overlap2")
+    DeleteWorkspace("overlapave")
     return outputwksp, scalefactor
 
 		
 def getWorkspace(wksp):
-    if mtd[wksp].isGroup():
-        wout = mantid.getMatrixWorkspace(wksp+'_1')
+    if isinstance(mtd[wksp], WorkspaceGroup):
+        wout = mtd[wksp+'_1']
     else:
-        wout = mantid.getMatrixWorkspace(wksp)
+        wout = mtd[wksp]
         
     return wout
 
@@ -144,13 +145,13 @@ def groupGet(wksp,whattoget,field=''):
 	also if the workspace is a group (info from first group element)
 	'''
 	if (whattoget == 'inst'):
-		if mtd[wksp].isGroup():
+		if isinstance(mtd[wksp], WorkspaceGroup):
 			return mtd[wksp+'_1'].getInstrument()
 		else:
 			return mtd[wksp].getInstrument()
 			
 	elif (whattoget == 'samp' and field != ''):
-		if mtd[wksp].isGroup():
+		if isinstance(mtd[wksp], WorkspaceGroup):
 			try:
 				res = mtd[wksp + '_1'].getSampleDetails().getLogData(field).value				
 			except RuntimeError:
@@ -164,7 +165,7 @@ def groupGet(wksp,whattoget,field=''):
 				print "Block "+field+" not found."
 		return res
 	elif (whattoget == 'wksp'):
-		if mtd[wksp].isGroup():
+		if isinstance(mtd[wksp], WorkspaceGroup):
 			return mtd[wksp+'_1'].getNumberHistograms()
 		else:
 			return mtd[wksp].getNumberHistograms()
diff --git a/Code/Mantid/scripts/Reflectometry/isis_reflgui/l2q.py b/Code/Mantid/scripts/Reflectometry/isis_reflgui/l2q.py
index 2cf2ce85109671b7632727f4c84a28a96f72b16d..7393d26ebe107d58ebd37665cdeb2acc390c004b 100644
--- a/Code/Mantid/scripts/Reflectometry/isis_reflgui/l2q.py
+++ b/Code/Mantid/scripts/Reflectometry/isis_reflgui/l2q.py
@@ -1,5 +1,14 @@
+''' SVN Info:  	The variables below will only get subsituted at svn checkout if
+		the repository is configured for variable subsitution. 
+
+	$Id$
+	$HeadURL$
+|=============================================================================|=======|	
+1                                                                            80   <tab>
+'''
+
 import math
-from mantid.simpleapi import *  
+from mantid.simpleapi import *  # New API
 
 def l2q(ws,whichDet,theta):
 	'''	
@@ -24,9 +33,9 @@ def l2q(ws,whichDet,theta):
 	'''
 	#ws = mantid.getMatrixWorkspace(ws)
 	
-	# pick up the sample to detector distance 
-	from mantid.api import WorkspaceGroup # (only required as while the old API still exists.)
-	if isinstance(ws, WorkspaceGroup):	
+	# pick up the sample to detector distance
+	from mantid.api import WorkspaceGroup
+	if isinstance(ws, WorkspaceGroup):
 		wsg = ws.getName() + '_1'
 		inst = mtd[wsg].getInstrument()
 	else:
@@ -46,10 +55,10 @@ def l2q(ws,whichDet,theta):
 	print x, y, z
 	print whichDet
 	# Move the detector ianto the correct spot
-	MoveInstrumentComponent(Workspace=mtd[ws.name()],ComponentName=whichDet,X=x,Y=y,Z=z,RelativePosition=False)
+	MoveInstrumentComponent(ws,ComponentName=whichDet,X=x,Y=y,Z=z,RelativePosition=False)
 			
 	# Now convert to momentum transfer
-	ConvertUnits(InputWorkspace=mtd[ws.name()],OutputWorkspace="IvsQ",Target="MomentumTransfer",AlignBins="1")
+	ConvertUnits(InputWorkspace=ws,OutputWorkspace="IvsQ",Target="MomentumTransfer")
 	return mtd["IvsQ"]
 
 
diff --git a/Code/Mantid/scripts/Reflectometry/isis_reflgui/quick.py b/Code/Mantid/scripts/Reflectometry/isis_reflgui/quick.py
index 3023da6326f4ce262e5b27447ed28b388b4b20d7..090369aeb363c63f78f93a95859d627d502dc8e6 100644
--- a/Code/Mantid/scripts/Reflectometry/isis_reflgui/quick.py
+++ b/Code/Mantid/scripts/Reflectometry/isis_reflgui/quick.py
@@ -1,13 +1,25 @@
+''' SVN Info:  	The variables below will only get subsituted at svn checkout if
+		the repository is configured for variable subsitution. 
+
+	$Id$
+	$HeadURL$
+|=============================================================================|=======|	
+1                                                                            80   <tab>
+'''
 #these need to be moved into one NR folder or so
 #from ReflectometerCors import *
 from l2q import *
-from mantidsimple import *  # Old API
-#from mantid.simpleapi import *  # New API
-#from mantidplot import *
+from combineMulti import *
+#from mantidsimple import *  # Old API
+from mantid.simpleapi import *  # New API
+from mantidplot import *
+from PyQt4 import QtCore, uic
+from mantid.api import WorkspaceGroup
 import math
+import re
 
 
-def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0):
+def quick(run, theta=0, pointdet=1,roi=[0,0], db=[0,0], trans='', polcorr=0, usemon=-1,outputType='pd', debug=0):
 	'''
 	call signature(s)::
 
@@ -38,6 +50,8 @@ def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0)
 	trans		transmission run number or saved workspace. The default is 0 (No 
 			transmission run).  trans=-1 will supress the division of the 
 			detector by the monitor.
+	polcorr		polarisation correction, 0=no correction (unpolarised run)
+	usemon		monitor to be used for normalisation (-1 is default from IDF)
 	outputType	'pd' = point detector (Default), 'md'=  Multidetector   Will use
 			this to build the equivalent of gd in the old matlab code but 
 			keep all of the simple detector processing in one well organized
@@ -82,10 +96,14 @@ def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0)
 	'''
 	
 	
-	[I0MonitorIndex, MultiDetectorStart, nHist] = toLam(run,'')
+	[I0MonitorIndex, MultiDetectorStart, nHist] = toLam(run,'',pointdet=1) #creates wTof = "_W" + name
+	inst = groupGet("_W",'inst')
+	# Some beamline constants from IDF
+	intmin = inst.getNumberParameter('MonitorIntegralMin')[0]
+	intmax = inst.getNumberParameter('MonitorIntegralMax')[0]
 	print I0MonitorIndex
 	print nHist
-	if (nHist > 5):
+	if (nHist > 5 and not(pointdet)):
 		# Proccess Multi-Detector; assume MD goes to the end:
 		# if roi or db are given in the function then sum over the apropriate channels
 		print "This is a multidetector run."
@@ -93,6 +111,7 @@ def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0)
 			CropWorkspace(InputWorkspace="_D",OutputWorkspace="_DM",StartWorkspaceIndex=MultiDetectorStart)
 			RebinToWorkspace(WorkspaceToRebin="_M",WorkspaceToMatch="_DM",OutputWorkspace="_M_M")
 			CropWorkspace(InputWorkspace="_M_M",OutputWorkspace="_I0M",StartWorkspaceIndex=I0MonitorIndex)
+			RebinToWorkspace(WorkspaceToRebin="_I0M",WorkspaceToMatch="_DM",OutputWorkspace="_I0M")
 			Divide(LHSWorkspace="_DM",RHSWorkspace="_I0M",OutputWorkspace="IvsLam")
 			if (roi != [0,0]) :
 				SumSpectra(InputWorkspace="IvsLam",OutputWorkspace="DMR",StartWorkspaceIndex=roi[0], EndWorkspaceIndex=roi[1])
@@ -115,7 +134,7 @@ def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0)
 		# process the point detector reflectivity  
 		RebinToWorkspace(WorkspaceToRebin="_M",WorkspaceToMatch="_DP",OutputWorkspace="_M_P")
 		CropWorkspace(InputWorkspace="_M_P",OutputWorkspace="_I0P",StartWorkspaceIndex=I0MonitorIndex,EndWorkspaceIndex=I0MonitorIndex)
-		Scale("_DP","IvsLam",1)
+		Scale(InputWorkspace="_DP",OutputWorkspace="IvsLam",Factor=1)
 		#Divide(LHSWorkspace="_DP",RHSWorkspace="_I0P",OutputWorkspace="IvsLam")
 		#  Normalise by good frames
 		GoodFrames = groupGet('IvsLam','samp','goodfrm')
@@ -124,53 +143,47 @@ def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0)
 			RunNumber = '0'
 		else:
 			RunNumber = groupGet('IvsLam','samp','run_number') 
-		#mtd['IvsLam'].getSampleDetails().getLogData("goodfrm").value
+		#mantid['IvsLam'].getSampleDetails().getLogData("goodfrm").value
 		#Scale('IvsLam','IvsLam',GoodFrames**-1,'Multiply')
-		#IvsLam = mtd['IvsLam']*GoodFrames**-1
+		#IvsLam = mantid['IvsLam']*GoodFrames**-1
 		if (trans==''):
 			#monitor2Eff('M')  # This doesn't seem to work.
 			#heliumDetectorEff('DP')  # point detector  #Nor does this.
 			# Multidetector   (Flood)   TODO		
-			print "No transmission file. Using monitor spectrum"
-			# normalise by monitor spectrum
-			# RebinToWorkspace(WorkspaceToRebin="_M",WorkspaceToMatch="_DP",OutputWorkspace="_M_M")
-			# CropWorkspace(InputWorkspace="M_M",OutputWorkspace="I0M",StartWorkspaceIndex=I0MonitorIndex)
-			# Divide(LHSWorkspace="DM",RHSWorkspace="I0M",OutputWorkspace="RM")	
-			Divide(LHSWorkspace="_DP",RHSWorkspace="_I0P",OutputWorkspace="IvsLam")
+			print "No transmission file. Trying default exponential/polynomial correction..."
+			inst=groupGet('_DP','inst')
+			corrType=inst.getStringParameter('correction')[0]
+			if (corrType=='polynomial'):
+				pString=inst.getStringParameter('polystring')
+				print pString
+				if len(pString):
+					PolynomialCorrection(InputWorkspace='_DP',OutputWorkspace='IvsLam',Coefficients=pString[0],Operation='Divide')
+				else:
+					print "No polynomial coefficients in IDF. Using monitor spectrum with no corrections."
+			elif (corrType=='exponential'):
+				c0=inst.getNumberParameter('C0')
+				c1=inst.getNumberParameter('C1')
+				print "Exponential parameters: ", c0[0], c1[0]
+				if len(c0):
+					ExponentialCorrection(InputWorkspace='_DP',OutputWorkspace='IvsLam',C0=c0[0],C1=c1[0],Operation='Divide')
+				# normalise by monitor spectrum
+				# RebinToWorkspace(WorkspaceToRebin="_M",WorkspaceToMatch="_DP",OutputWorkspace="_M_M")
+				# CropWorkspace(InputWorkspace="M_M",OutputWorkspace="I0M",StartWorkspaceIndex=I0MonitorIndex)
+				# Divide(LHSWorkspace="DM",RHSWorkspace="I0M",OutputWorkspace="RM")
+			Divide(LHSWorkspace="IvsLam",RHSWorkspace="_I0P",OutputWorkspace="IvsLam")
 		else: # we have a transmission run
-			names = mtd.getWorkspaceNames()
+			Integration(InputWorkspace="_I0P",OutputWorkspace="_monInt",RangeLower=str(intmin),RangeUpper=str(intmax))
+			#scaling=1/mantid.getMatrixWorkspace('_monInt').dataY(0)[0]
+			Divide(LHSWorkspace="_DP",RHSWorkspace="_monInt",OutputWorkspace="IvsLam")
+			##Divide(LHSWorkspace="_DP",RHSWorkspace="_I0P",OutputWorkspace="IvsLam")
+			names = mtd.getObjectNames()
 			if trans in names:
-				Divide(LHSWorkspace="_DP",RHSWorkspace="_I0P",OutputWorkspace="IvsLam")
-				RebinToWorkspace(trans,"IvsLam",trans)
-				#IvsLam = mtd['IvsLam']*GoodFrames**-1
+				##Divide(LHSWorkspace="_DP",RHSWorkspace="_I0P",OutputWorkspace="IvsLam")
+				RebinToWorkspace(WorkspaceToRebin=trans,WorkspaceToMatch="IvsLam",OutputWorkspace=trans)
+				##IvsLam = mantid['IvsLam']*GoodFrames**-1
 				Divide(LHSWorkspace="IvsLam",RHSWorkspace=trans,OutputWorkspace="IvsLam")
 			else:
-				Divide(LHSWorkspace="_DP",RHSWorkspace="_I0P",OutputWorkspace="IvsLam")
-				#IvsLam = mtd['IvsLam']*GoodFrames**-1
-				[I0MonitorIndex, MultiDetectorStart, nHist] = toLam(trans,'_TRANS')
-				RebinToWorkspace(WorkspaceToRebin="_M_TRANS",WorkspaceToMatch="_DP_TRANS",OutputWorkspace="_M_P_TRANS")
-				CropWorkspace(InputWorkspace="_M_P_TRANS",OutputWorkspace="_I0P_TRANS",StartWorkspaceIndex=I0MonitorIndex)
-				Divide(LHSWorkspace="_DP_TRANS",RHSWorkspace="_I0P_TRANS",OutputWorkspace=str(trans)+"_IvsLam_TRANS")
-				# Normalise TRANS run by good frames
-				print str(trans)+'_IvsLam_TRANS'
-				GoodFramesTr = groupGet(str(trans)+'_IvsLam_TRANS','samp','goodfrm')
-				print "trans frames: ", GoodFramesTr
-				#mtd['IvsLam_TRANS'].getSampleDetails().getLogData("goodfrm").value
-				
-				#Scale(str(trans)+'_IvsLam_TRANS',Factor=GoodFramesTr**-1,OutputWorkspace=str(trans)+'_IvsLam_TRANS')
-				#got sometimes very slight binning diferences, so do this again:
-				RebinToWorkspace(WorkspaceToRebin=str(trans)+'_IvsLam_TRANS',WorkspaceToMatch="IvsLam",OutputWorkspace=str(trans)+'_IvsLam_TRANS')
-				Divide(LHSWorkspace="IvsLam",RHSWorkspace=str(trans)+"_IvsLam_TRANS",OutputWorkspace="IvsLam")
-				# try:
-					# Divide(LHSWorkspace=str(trans)+"_IvsLam",RHSWorkspace=str(trans)+"_IvsLam_TRANS",OutputWorkspace="IvsLam")
-				# except:
-					# try:
-						# Divide(LHSWorkspace="IvsLam_1",RHSWorkspace=str(trans)+"_IvsLam_TRANS_1",OutputWorkspace="IvsLam_1")
-						# print 'Handling run-time error: possibly empty periods...'
-					# except:
-						# print 'Handling run-time error: possibly empty periods...'
-			   
-
+				transCorr(trans)
 		# Need to process the optional args to see what needs to be output and what division needs to be made
 		
 		# Convert to I vs Q
@@ -183,11 +196,11 @@ def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0)
 			detLocation=inst.getComponentByName('point-detector').getPos()
 			sampleLocation=inst.getComponentByName('some-surface-holder').getPos()
 			detLocation=inst.getComponentByName('point-detector').getPos()
-			sample2detector=detLocation-sampleLocation    # meters
+			sample2detector=detLocation-sampleLocation    # metres
 			source=inst.getSource()
 			beamPos = sampleLocation - source.getPos()
 			PI = 3.1415926535
-			theta = inst.getComponentByName('point-detector').getTwoTheta(sampleLocation, beamPos)*180.0/PI
+			theta = inst.getComponentByName('point-detector').getTwoTheta(sampleLocation, beamPos)*180.0/PI/2.0
 			print "Det location: ", detLocation, "Calculated theta = ",theta
 			if detLocation.getY() == 0:  # detector is not in correct place
 				print "det at 0"
@@ -201,16 +214,16 @@ def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0)
 				# Get detector angle theta from NeXuS
 				theta = groupGet(runno,'samp','theta')
 				print 'Nexus file theta =', theta
-				IvsQ = l2q(IvsLam, 'point-detector', theta)
+				IvsQ = l2q(mtd['IvsLam'], 'point-detector', theta)
 			else:
-				ConvertUnits(InputWorkspace='IvsLam',OutputWorkspace="IvsQ",Target="MomentumTransfer",AlignBins="1")
+				ConvertUnits(InputWorkspace='IvsLam',OutputWorkspace="IvsQ",Target="MomentumTransfer")
 			
 		else:
 			theta = float(theta)
 			IvsQ = l2q(mtd['IvsLam'], 'point-detector', theta)		
 	
-	RenameWorkspace('IvsLam',RunNumber+'_IvsLam')
-	RenameWorkspace('IvsQ',RunNumber+'_IvsQ')
+	RenameWorkspace(InputWorkspace='IvsLam',OutputWorkspace=RunNumber+'_IvsLam')
+	RenameWorkspace(InputWorkspace='IvsQ',OutputWorkspace=RunNumber+'_IvsQ')
 		
 	# delete all temporary workspaces unless in debug mode (debug=1)
     
@@ -219,41 +232,117 @@ def quick(run, theta=0, roi=[0,0], db=[0,0], trans='', outputType='pd', debug=0)
 	return  mtd[RunNumber+'_IvsLam'], mtd[RunNumber+'_IvsQ'], theta
 
 
+
+def transCorr(transrun):
+	inst = groupGet("_W",'inst')
+	# Some beamline constants from IDF
+	intmin = inst.getNumberParameter('MonitorIntegralMin')[0]
+	intmax = inst.getNumberParameter('MonitorIntegralMax')[0]
+	if ',' in transrun:
+		slam = transrun.split(',')[0]
+		llam = transrun.split(',')[1]
+		print "Transmission runs: ", transrun
+		[I0MonitorIndex, MultiDetectorStart, nHist] = toLam(slam,'_'+slam)
+		CropWorkspace(InputWorkspace="_D_"+slam,OutputWorkspace="_D_"+slam,StartWorkspaceIndex=0,EndWorkspaceIndex=0)
+		[I0MonitorIndex, MultiDetectorStart, nHist] = toLam(llam,'_'+llam)
+		CropWorkspace(InputWorkspace="_D_"+llam,OutputWorkspace="_D_"+llam,StartWorkspaceIndex=0,EndWorkspaceIndex=0)
+		
+		RebinToWorkspace(WorkspaceToRebin="_M_"+llam,WorkspaceToMatch="_DP_"+llam,OutputWorkspace="_M_P_"+llam)
+		CropWorkspace(InputWorkspace="_M_P_"+llam,OutputWorkspace="_I0P_"+llam,StartWorkspaceIndex=I0MonitorIndex)
+		
+		#Normalise by monitor integral
+		inst = groupGet('_D_'+slam,'inst')
+		# Some beamline constants from IDF
+		intmin = inst.getNumberParameter('MonitorIntegralMin')[0]
+		intmax = inst.getNumberParameter('MonitorIntegralMax')[0]
+		Integration(InputWorkspace="_I0P_"+llam,OutputWorkspace="_monInt_TRANS",RangeLower=str(intmin),RangeUpper=str(intmax))
+		Divide(LHSWorkspace="_DP_"+llam,RHSWorkspace="_monInt_TRANS",OutputWorkspace="_D_"+llam)
+		#scaling=1/mantid.getMatrixWorkspace('_monInt_TRANS').dataY(0)[0]
+		#Scale(InputWorkspace="_DP_"+llam,OutputWorkspace="_D_"+llam,Factor=scaling,Operation="Multiply")
+		
+		# same for short wavelength run slam:
+		RebinToWorkspace(WorkspaceToRebin="_M_"+slam,WorkspaceToMatch="_DP_"+slam,OutputWorkspace="_M_P_"+slam)
+		CropWorkspace(InputWorkspace="_M_P_"+slam,OutputWorkspace="_I0P_"+slam,StartWorkspaceIndex=I0MonitorIndex)
+
+		#Normalise by monitor integral
+		inst = groupGet('_D_'+llam,'inst')
+		# Some beamline constants from IDF
+		intmin = inst.getNumberParameter('MonitorIntegralMin')[0]
+		intmax = inst.getNumberParameter('MonitorIntegralMax')[0]
+		Integration(InputWorkspace="_I0P_"+slam,OutputWorkspace="_monInt_TRANS",RangeLower=str(intmin),RangeUpper=str(intmax))
+		#scaling=1/mantid.getMatrixWorkspace('_monInt_TRANS').dataY(0)[0]
+		Divide(LHSWorkspace="_DP_"+slam,RHSWorkspace="_monInt_TRANS",OutputWorkspace="_D_"+slam)
+		#Scale(InputWorkspace="_DP_"+slam,OutputWorkspace="_D_"+slam,Factor=scaling,Operation="Multiply")
+		
+		#Divide(LHSWorkspace="_DP_"+slam,RHSWorkspace="_I0P_"+slam,OutputWorkspace="_D_"+slam)
+
+		[transr, sf] = combine2("_D_"+slam,"_D_"+llam,"_DP_TRANS",10.0,12.0,1.5,17.0,0.02,scalehigh=1)
+		#[wlam, wq, th] = quick(runno,angle,trans='_transcomb')
+	else:
+		[I0MonitorIndex, MultiDetectorStart, nHist] = toLam(transrun,'_TRANS')
+		RebinToWorkspace(WorkspaceToRebin="_M_TRANS",WorkspaceToMatch="_DP_TRANS",OutputWorkspace="_M_P_TRANS")
+		CropWorkspace(InputWorkspace="_M_P_TRANS",OutputWorkspace="_I0P_TRANS",StartWorkspaceIndex=I0MonitorIndex)
+
+		#Normalise by monitor integral
+		Integration(InputWorkspace="_I0P_TRANS",OutputWorkspace="_monInt_TRANS",RangeLower=str(intmin),RangeUpper=str(intmax))
+		Divide(LHSWorkspace="_DP_TRANS",RHSWorkspace="_monInt_TRANS",OutputWorkspace="_DP_TRANS")
+		#scaling=1/mantid.getMatrixWorkspace('_monInt_TRANS').dataY(0)[0]
+		#print "SCALING:",scaling
+		#Scale(InputWorkspace="_I0P_TRANS",OutputWorkspace=str(transrun)+"_IvsLam_TRANS",Factor=scaling,Operation="Multiply")
+		#Scale(InputWorkspace="_DP_TRANS",OutputWorkspace="_DP_TRANS",Factor=scaling,Operation="Multiply")
+		
+	#got sometimes very slight binning diferences, so do this again:
+	RebinToWorkspace(WorkspaceToRebin='_DP_TRANS',WorkspaceToMatch="IvsLam",OutputWorkspace=str(transrun)+'_IvsLam_TRANS')
+	if isinstance(mtd["_DP_TRANS"], WorkspaceGroup):
+		Divide(LHSWorkspace="IvsLam",RHSWorkspace=str(transrun)+"_IvsLam_TRANS_1",OutputWorkspace="IvsLam")
+	else:
+		Divide(LHSWorkspace="IvsLam",RHSWorkspace=str(transrun)+"_IvsLam_TRANS",OutputWorkspace="IvsLam")
+
+
 def cleanup():
-	names = mtd.getWorkspaceNames()
-	for ws in names:
-		if ws.find('_',0,1) == 0:
-			mantid.deleteWorkspace(ws)
+	names = mtd.getObjectNames()
+	for name in names:
+		if re.search("^_", name):
+			DeleteWorkspace(name)
 		
 def coAdd(run,name):
-	wTof = "_W" + name   		# main workspace in time-of-flight
-	
-	runlist = []
-	l1 = run.split(',')
-	for subs in l1:
-		l2 = subs.split(':')
-		for l3 in l2:
-			runlist.append(l3)
-	print "Adding: ", runlist
-	
-	if (runlist[0]=='0'): #DAE/current run
-		LoadDAE(DAEname='ndx'+mtd.settings['default.instrument'],OutputWorkspace='_sum')
+	names = mtd.getObjectNames()
+	wTof = "_W" + name   		# main workspace in time-of-flight	
+	if run in names:
+		RenameWorkspace(InputWorkspace=run,OutputWorkspace=wTof)
 	else:
-		Load(Filename=runlist[0],OutputWorkspace='_sum',LoadLogFiles="1")
-		
-	for i in range(len(runlist)-1):
-		if (runlist[i+1]=='0'): #DAE/current run
-			LoadDAE(DAEname='ndx'+mtd.settings['default.instrument'],OutputWorkspace='_w2')
+
+		currentInstrument=config['default.instrument']
+		runlist = []
+		l1 = run.split(',')
+		for subs in l1:
+			l2 = subs.split(':')
+			for l3 in l2:
+				runlist.append(l3)
+		print "Adding: ", runlist
+		currentInstrument=currentInstrument.upper()
+		if (runlist[0]=='0'): #DAE/current run
+			StartLiveData(Instrument=currentInstrument,UpdateEvery='0',Outputworkspace='_sum')
+			#LoadLiveData(currentInstrument,OutputWorkspace='_sum')
+			#LoadDAE(DAEname='ndx'+mantid.settings['default.instrument'],OutputWorkspace='_sum')
 		else:
-			LoadRaw(Filename=runlist[i+1],OutputWorkspace='_w2',LoadLogFiles="1")
+			Load(Filename=runlist[0],OutputWorkspace='_sum')#,LoadLogFiles="1")
 			
-		Plus('_sum','_w2','_sum')
+		for i in range(len(runlist)-1):
+			if (runlist[i+1]=='0'): #DAE/current run
+				StartLiveData(Instrument=currentInstrument,UpdateEvery='0',Outputworkspace='_w2')
+				#LoadLiveData(currentInstrument,OutputWorkspace='_w2')
+				#LoadDAE(DAEname='ndx'+mantid.settings['default.instrument'],OutputWorkspace='_w2')
+			else:
+				Load(Filename=runlist[i+1],OutputWorkspace='_w2')#,LoadLogFiles="1")
+				
+			Plus(LHSWorkspace='_sum',RHSWorkspace='_w2',OutputWorkspace='_sum')
 
-	RenameWorkspace('_sum',wTof)
+		RenameWorkspace(InputWorkspace='_sum',OutputWorkspace=wTof)
 
 	
 
-def toLam(run, name):
+def toLam(run, name, pointdet=1):
 	'''
 	toLam splits a given run into monitor and detector spectra and
 	converts these to wavelength
@@ -263,7 +352,7 @@ def toLam(run, name):
 	monInLam = "_M" + name		# monitor spectra vs. wavelength
 	detInLam = "_D" + name		# detector spectra vs. wavelength
 	pDet = "_DP" + name			# point-detector only vs. wavelength
-	mDet = "_DM" + name			# point-detector only vs. wavelength
+	mDet = "_DM" + name			# multi-detector only vs. wavelength
 	
 
 	# add multiple workspaces, if given
@@ -275,6 +364,8 @@ def toLam(run, name):
 	bgmin = inst.getNumberParameter('MonitorBackgroundMin')[0]
 	bgmax = inst.getNumberParameter('MonitorBackgroundMax')[0]
 	MonitorBackground = [bgmin,bgmax]
+	intmin = inst.getNumberParameter('MonitorIntegralMin')[0]
+	intmax = inst.getNumberParameter('MonitorIntegralMax')[0]
 	MonitorsToCorrect = [int(inst.getNumberParameter('MonitorsToCorrect')[0])]
 	# Note: Since we are removing the monitors in the load raw command they are not counted here.
 	PointDetectorStart = int(inst.getNumberParameter('PointDetectorStart')[0])
@@ -287,16 +378,16 @@ def toLam(run, name):
 	LambdaMax = float(inst.getNumberParameter('LambdaMax')[0])
 			
 	# Convert spectra from TOF to wavelength
-	ConvertUnits(InputWorkspace=wTof,OutputWorkspace=wTof+"_lam",Target="Wavelength")
+	ConvertUnits(InputWorkspace=wTof,OutputWorkspace=wTof+"_lam",Target="Wavelength", AlignBins='1')
 	# Separate detector an monitor spectra manually
-	CropWorkspace(InputWorkspace=wTof+"_lam",OutputWorkspace=monInLam,XMin=LambdaMin,XMax=LambdaMax,StartWorkspaceIndex='0',EndWorkspaceIndex=PointDetectorStart-1)
+	CropWorkspace(InputWorkspace=wTof+"_lam",OutputWorkspace=monInLam,StartWorkspaceIndex='0',EndWorkspaceIndex=PointDetectorStart-1)
 	CropWorkspace(InputWorkspace=wTof+"_lam",OutputWorkspace=detInLam,XMin=LambdaMin,XMax=LambdaMax,StartWorkspaceIndex=PointDetectorStart)
 	# Subtract flat background from fit in range given from Instrument Def/Par File
 	FlatBackground(InputWorkspace=monInLam,OutputWorkspace=monInLam,WorkspaceIndexList=MonitorsToCorrect,StartX=MonitorBackground[0],EndX=MonitorBackground[1])
 	
 	# Is it a multidetector run?
 	nHist = groupGet(wTof+"_lam",'wksp','')
-	if nHist<6:
+	if (nHist<6 or (nHist>5 and pointdet)):
 		CropWorkspace(InputWorkspace=wTof+"_lam",OutputWorkspace=pDet,XMin=LambdaMin,XMax=LambdaMax,StartWorkspaceIndex=PointDetectorStart,EndWorkspaceIndex=PointDetectorStop)
 	else:
 		CropWorkspace(InputWorkspace=wTof+"_lam",OutputWorkspace=mDet,XMin=LambdaMin,XMax=LambdaMax,StartWorkspaceIndex=MultiDetectorStart)
@@ -312,28 +403,35 @@ def groupGet(wksp,whattoget,field=''):
 	also if the workspace is a group (info from first group element)
 	'''
 	if (whattoget == 'inst'):
-		if mtd[wksp].isGroup():
+		if isinstance(mtd[wksp], WorkspaceGroup):
 			return mtd[wksp+'_1'].getInstrument()
 		else:
 			return mtd[wksp].getInstrument()
 			
 	elif (whattoget == 'samp' and field != ''):
-		if mtd[wksp].isGroup():
+		if isinstance(mtd[wksp], WorkspaceGroup):
 			try:
-				res = mtd[wksp + '_1'].getSampleDetails().getLogData(field).value				
+				log = mtd[wksp + '_1'].getSampleDetails().getLogData(field).value
+				if (type(log) is int or type(log) is str):
+					res=log
+				else:
+					res = log[len(log)-1]
 			except RuntimeError:
 				res = 0
 				print "Block "+field+" not found."			
 		else:
 			try:
-				log = [mtd[wksp].getSampleDetails().getLogData(field).value]
-				res = log[len(log)-1]
+				log = mtd[wksp].getSampleDetails().getLogData(field).value
+				if (type(log) is int or type(log) is str):
+					res=log
+				else:
+					res = log[len(log)-1]
 			except RuntimeError:		
 				res = 0
 				print "Block "+field+" not found."
 		return res
 	elif (whattoget == 'wksp'):
-		if mtd[wksp].isGroup():
+		if isinstance(mtd[wksp], WorkspaceGroup):
 			return mtd[wksp+'_1'].getNumberHistograms()
 		else:
 			return mtd[wksp].getNumberHistograms()
@@ -353,7 +451,7 @@ def groupGet(wksp,whattoget,field=''):
 """
 	
 def _testQuick():
-	mtd.settings['default.instrument'] = "SURF"
+	config['default.instrument'] = "SURF"
 	[w1lam,w1q,th] = quick(94511,theta=0.25,trans='94504')
 	[w2lam,w2q,th] = quick(94512,theta=0.65,trans='94504')
 	[w3lam,w3q,th] = quick(94513,theta=1.5,trans='94504')
diff --git a/Code/Mantid/scripts/Reflectometry/isis_reflgui/reflgui.py b/Code/Mantid/scripts/Reflectometry/isis_reflgui/reflgui.py
index 907d204ade57e9cc021e2f9c96898bb1a53522fd..68e9d1f96cc8a291d0bd77e24f6b7a92117a5cc4 100644
--- a/Code/Mantid/scripts/Reflectometry/isis_reflgui/reflgui.py
+++ b/Code/Mantid/scripts/Reflectometry/isis_reflgui/reflgui.py
@@ -7,19 +7,22 @@
 #
 # WARNING! All changes made in this file will be lost!
 
-#from ReflectometerCors import *
+# from ReflectometerCors import *
 import csv
 import math
 import fileinput
+import xml.etree.ElementTree as xml
 from PyQt4 import QtCore, QtGui, uic
-from mantidsimple import *
-#from mantid.simpleapi import *  # New API
+from PyQt4.QtGui import QFont
+# from mantidsimple import *
+from mantid.simpleapi import *  # New API
 from mantidplot import *
-#import qti as qti
+# import qti as qti
 from quick import *
 from combineMulti import *
+from mantid.api import WorkspaceGroup
 
-currentTable=' '
+currentTable = ' '
 
 try:
     _fromUtf8 = QtCore.QString.fromUtf8
@@ -30,9 +33,9 @@ except AttributeError:
 class Ui_SaveWindow(object):
     def setupUi(self, SaveWindow):
         SaveWindow.setObjectName(_fromUtf8("SaveWindow"))
-        SaveWindow.resize(400, 400)
+        SaveWindow.resize(500, 400)
         SaveWindow.setAcceptDrops(True)
-
+        
         self.centralWidget = QtGui.QWidget(SaveWindow)
         self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
         self.gridLayout_2 = QtGui.QGridLayout(self.centralWidget)
@@ -41,22 +44,41 @@ class Ui_SaveWindow(object):
         self.gridLayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
         self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
 
+# Path label and edit field
+        self.PathLabel = QtGui.QLabel("Save path: ", self.centralWidget)
+        self.gridLayout.addWidget(self.PathLabel, 0, 2, 1, 1)
         self.lineEdit = QtGui.QLineEdit(self.centralWidget)
+        font = QtGui.QFont()
+        font.setWeight(75)
+        font.setBold(False)
+        self.lineEdit.setFont(font)
+        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
+        self.gridLayout.addWidget(self.lineEdit, 0, 3, 1, 3)
+        # print QtGui.QMainWindow.findChild(QtGui.QMainWindow.QLabel,'RBEdit')
+
+# Prefix label and edit field
+        self.PrefixLabel = QtGui.QLabel("Prefix: ", self.centralWidget)
+        self.gridLayout.addWidget(self.PrefixLabel, 0, 6, 1, 1)
+        self.lineEdit2 = QtGui.QLineEdit(self.centralWidget)
+        self.lineEdit2.setFont(font)
+        self.lineEdit2.setObjectName(_fromUtf8("lineEdit2"))
+        self.gridLayout.addWidget(self.lineEdit2, 0, 7, 1, 2)
 
         sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.lineEdit.sizePolicy().hasHeightForWidth())
         self.lineEdit.setSizePolicy(sizePolicy)
+        self.lineEdit2.setSizePolicy(sizePolicy)
 
         self.listWidget = QtGui.QListWidget(self.centralWidget)
-        self.listWidget.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
+        self.listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
         sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.listWidget.sizePolicy().hasHeightForWidth())
 
-        self.gridLayout.addWidget(self.listWidget, 1, 2, 1, 5)
+        self.gridLayout.addWidget(self.listWidget, 1, 2, 1, 8)
         spacerItem = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum)
         self.gridLayout.addItem(spacerItem, 1, 5, 1, 1)
         spacerItem1 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
@@ -82,12 +104,7 @@ class Ui_SaveWindow(object):
         self.pushButton_2.setSizePolicy(sizePolicy)
         self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
         self.gridLayout.addWidget(self.pushButton_2, 2, 4, 1, 1)
-        font = QtGui.QFont()
-        font.setWeight(75)
-        font.setBold(False)
-        self.lineEdit.setFont(font)
-        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
-        self.gridLayout.addWidget(self.lineEdit, 0, 2, 1, 3)
+
         self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
 
 
@@ -108,27 +125,45 @@ class Ui_SaveWindow(object):
 
     def populateList(self):
         self.listWidget.clear()
-        names = mtd.getWorkspaceNames()
+        names = mtd.getObjectNames()
         for ws in names:
             self.listWidget.addItem(ws)
+        # try to get correct user directory
+        currentInstrument = config['default.instrument']
         
-#--------- If "Process" button pressed, convert raw files to IvsLam and IvsQ and combine if checkbox ticked -------------
+        tree1 = xml.parse(r'\\isis\inst$\NDX' + currentInstrument + '\Instrument\logs\journal\journal_main.xml')
+        root1 = tree1.getroot()
+        currentJournal = root1[len(root1) - 1].attrib.get('name')
+        tree = xml.parse(r'\\isis\inst$\NDX' + currentInstrument + '\Instrument\logs\journal\\' + currentJournal)
+        root = tree.getroot()
+        # for entry in root:#910252
+            # if (entry[4].text ==self.RBEdit.text()):
+             #   runno=str(int(entry[6].text))
+        # path=root[0]
+        
+        
+        
+#--------- If "Save" button pressed, selcted workspaces are saved -------------
     def buttonClickHandler1(self):
-        names = mtd.getWorkspaceNames()
-        dataToSave=[]
-        if (self.lineEdit.text()[len(self.lineEdit.text())-1] != '\\'):
-            path = self.lineEdit.text()+'\\'
+        names = mtd.getObjectNames()
+        dataToSave = []
+        prefix = str(self.lineEdit2.text())
+        if (self.lineEdit.text()[len(self.lineEdit.text()) - 1] != '/'):
+            path = self.lineEdit.text() + '/'
         else:
             path = self.lineEdit.text()
         for idx in self.listWidget.selectedItems():
-            SaveAscii(idx.text(),path+idx.text()+'.dat')
+            fname = str(path + prefix + idx.text() + '.dat')
+            print "FILENAME: ", fname
+            wksp = str(idx.text())
+            SaveAscii(InputWorkspace=wksp, Filename=fname)
             
         
 
 class Ui_MainWindow(object):
     def setupUi(self, MainWindow):
-        MainWindow.setObjectName(_fromUtf8("MainWindow"))
-        MainWindow.resize(1000, 400)
+        MainWindow.setObjectName(_fromUtf8("ISIS Reflectometry"))
+        MainWindow.resize(1300, 400)
         MainWindow.setAcceptDrops(True)
 
         self.centralWidget = QtGui.QWidget(MainWindow)
@@ -139,7 +174,7 @@ class Ui_MainWindow(object):
         self.gridLayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
         self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
         self.tableWidget = QtGui.QTableWidget(self.centralWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth())
@@ -187,27 +222,163 @@ class Ui_MainWindow(object):
         item = QtGui.QTableWidgetItem()
         self.tableWidget.setHorizontalHeaderItem(17, item)
 
+
+
+# RB number label and edit field
+        self.RBLabel = QtGui.QLabel("RB: ", self.centralWidget)
+        self.gridLayout.addWidget(self.RBLabel, 0, 2, 1, 1)
+        self.RBEdit = QtGui.QLineEdit(self.centralWidget)
+        self.RBEdit.setObjectName(_fromUtf8("RBEdit"))
+        self.RBEdit.setMaximumWidth(55)
+        self.gridLayout.addWidget(self.RBEdit, 0, 3, 1, 1)
+        # spacerItemRB = QtGui.QSpacerItem(38, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum)
+        # self.gridLayout.addItem(spacerItemRB, 0, 1, 1, 1)
+
+# tranmission runs label and edit field
+        self.transRunLabel = QtGui.QLabel("Transmission run(s): ", self.centralWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.transRunLabel.sizePolicy().hasHeightForWidth())
+        self.transRunLabel.setSizePolicy(sizePolicy)
+        self.gridLayout.addWidget(self.transRunLabel, 0, 5, 1, 1)
+        self.transRunEdit = QtGui.QLineEdit(self.centralWidget)
+        self.transRunEdit.setMaximumWidth(100)
+        self.gridLayout.addWidget(self.transRunEdit, 0, 6, 1, 1)
+        spacerItem2 = QtGui.QSpacerItem(200, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem2, 0, 11, 1, 1)
+        
+# Autofill button
+        self.fillButton = QtGui.QPushButton(self.centralWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.fillButton.sizePolicy().hasHeightForWidth())
+        self.fillButton.setSizePolicy(sizePolicy)
+        self.fillButton.setObjectName(_fromUtf8("fillButton"))
+        self.gridLayout.addWidget(self.fillButton, 0, 12, 1, 1)
+
+# polarisation corrections label and checkbox
+        self.tickLabel1 = QtGui.QLabel("Polarisation corrections ", self.centralWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.tickLabel1.sizePolicy().hasHeightForWidth())
+        self.tickLabel1.setSizePolicy(sizePolicy)
+        self.gridLayout.addWidget(self.tickLabel1, 0, 7, 1, 1)
+        # self.tickBox1 = QtGui.QCheckBox(self.centralWidget)
+        # self.gridLayout.addWidget(self.tickBox1,0,8,1,1)
+
+# polarisation correction selector
+        self.comboBox2 = QtGui.QComboBox(self.centralWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.comboBox2.sizePolicy().hasHeightForWidth())
+        self.comboBox2.setSizePolicy(sizePolicy)
+        font = QtGui.QFont()
+        font.setWeight(75)
+        font.setBold(True)
+        self.comboBox2.setFont(font)
+        self.comboBox2.setObjectName(_fromUtf8("comboBox"))
+        self.comboBox2.addItem(_fromUtf8("none"))
+        self.comboBox2.addItem(_fromUtf8("1-PNR"))
+        self.comboBox2.addItem(_fromUtf8("2-PA"))
+        self.comboBox2.addItem(_fromUtf8("3-other"))
+        self.gridLayout.addWidget(self.comboBox2, 0, 8, 1, 1)
+
+# polarisation group box
+        # self.groupBox = QtGui.QGroupBox("Polarisation corrections ")
+        # self.groupBox.setCheckable(1)
+        # self.radio1 = QtGui.QRadioButton("P&NR")
+        # self.radio2 = QtGui.QRadioButton("PA")
+        
+
+        # self.radio1.setChecked(True)
+
+        # self.hbox = QtGui.QHBoxLayout()
+        # self.hbox.addWidget(self.radio1)
+        # self.hbox.addWidget(self.radio2)
+        # self.hbox.addStretch(1)
+        # self.groupBox.setLayout(self.hbox)
+        # self.gridLayout.addWidget(self.groupBox,0,7,1,2)
+
+
+
+# (un)tick all label and checkbox
+        self.tickLabel = QtGui.QLabel("(un)tick all ", self.centralWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.tickLabel.sizePolicy().hasHeightForWidth())
+        self.tickLabel.setSizePolicy(sizePolicy)
+        self.gridLayout.addWidget(self.tickLabel, 0, 10, 1, 1)
+        self.tickBox = QtGui.QCheckBox(self.centralWidget)
+        self.gridLayout.addWidget(self.tickBox, 0, 11, 1, 1)        
+
+# listwidget
+        self.listWidget = QtGui.QListWidget(self.centralWidget)
+        self.listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.listWidget.sizePolicy().hasHeightForWidth())
+        
+        # self.gridLayout.addWidget(self.listWidget, 1, 0, 2, 4)
+
+        self.splitter1 = QtGui.QSplitter(QtCore.Qt.Horizontal)
+        self.splitter1.addWidget(self.listWidget)
+        
+
+        # spacerItem = QtGui.QSpacerItem(38, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        # self.gridLayout.addItem(spacerItem, 1, 2, 1, 1)
+# transfer button
+        self.transferButton = QtGui.QPushButton(self.centralWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        # sizePolicy.setHeightForWidth(self.transferButton.sizePolicy().hasHeightForWidth())
+        self.transferButton.setSizePolicy(sizePolicy)
+        self.transferButton.setObjectName(_fromUtf8("transferButton"))
+        self.transferButton.setMaximumWidth(20)
+        # self.gridLayout.addWidget(self.transferButton, 1, 4, 1, 1)
+        
+        self.splitter1.addWidget(self.transferButton)
+        self.gridLayout.addWidget(self.splitter1, 1, 0, 3, 4)
+
+# tablewidget
         self.tableWidget.horizontalHeader().setCascadingSectionResizes(True)
         self.tableWidget.horizontalHeader().setDefaultSectionSize(60)
         self.tableWidget.verticalHeader().setDefaultSectionSize(20)
-        self.gridLayout.addWidget(self.tableWidget, 1, 2, 1, 3)
-        spacerItem = QtGui.QSpacerItem(38, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum)
-        self.gridLayout.addItem(spacerItem, 1, 5, 1, 1)
-        spacerItem1 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        self.gridLayout.addItem(spacerItem1, 4, 2, 1, 1)
-        spacerItem2 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum)
-        self.gridLayout.addItem(spacerItem2, 1, 0, 1, 1)
-        self.pushButton = QtGui.QPushButton(self.centralWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.listWidget.sizePolicy().hasHeightForWidth())
+        self.gridLayout.addWidget(self.tableWidget, 1, 5, 1, 8)
 
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+
+
+        spacerItem = QtGui.QSpacerItem(38, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem, 1, 10, 1, 1)
+        spacerItem1 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.gridLayout.addItem(spacerItem1, 4, 5, 1, 1)
+        spacerItem3 = QtGui.QSpacerItem(200, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem3, 0, 9, 1, 1)
+
+        self.pushButton = QtGui.QPushButton(self.centralWidget)
+        font = QtGui.QFont(self.centralWidget)
+        font.setBold(True)
+        self.pushButton.setFont(font)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth())
         self.pushButton.setSizePolicy(sizePolicy)
         self.pushButton.setObjectName(_fromUtf8("pushButton"))
-        self.gridLayout.addWidget(self.pushButton, 2, 2, 1, 1)
-        spacerItem3 = QtGui.QSpacerItem(20, 28, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        self.gridLayout.addItem(spacerItem3, 2, 3, 1, 1)
+        self.gridLayout.addWidget(self.pushButton, 2, 5, 1, 7)
+
+        spacerItem3 = QtGui.QSpacerItem(20, 28, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
+        self.gridLayout.addItem(spacerItem3, 2, 6, 1, 1)
         self.pushButton_2 = QtGui.QPushButton(self.centralWidget)
         sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
@@ -215,7 +386,8 @@ class Ui_MainWindow(object):
         sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth())
         self.pushButton_2.setSizePolicy(sizePolicy)
         self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
-        self.gridLayout.addWidget(self.pushButton_2, 2, 4, 1, 1)
+        self.gridLayout.addWidget(self.pushButton_2, 2, 12, 1, 1)
+# instrument selector
         self.comboBox = QtGui.QComboBox(self.centralWidget)
         sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
@@ -231,7 +403,7 @@ class Ui_MainWindow(object):
         self.comboBox.addItem(_fromUtf8(""))
         self.comboBox.addItem(_fromUtf8(""))
         self.comboBox.addItem(_fromUtf8(""))
-        self.gridLayout.addWidget(self.comboBox, 0, 2, 1, 1)
+        self.gridLayout.addWidget(self.comboBox, 0, 0, 1, 1)
         self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
         MainWindow.setCentralWidget(self.centralWidget)
 # set up Menu Bar
@@ -246,14 +418,15 @@ class Ui_MainWindow(object):
         self.statusBar.setObjectName(_fromUtf8("statusBar"))
         MainWindow.setStatusBar(self.statusBar)
 
+        self.actionInter = QtGui.QAction(MainWindow)
+        self.actionInter.setObjectName(_fromUtf8("actionInter"))
         self.actionSURF = QtGui.QAction(MainWindow)
         self.actionSURF.setObjectName(_fromUtf8("actionSURF"))
         self.actionCRISP = QtGui.QAction(MainWindow)
         self.actionCRISP.setObjectName(_fromUtf8("actionCRISP"))
         self.actionPolRef = QtGui.QAction(MainWindow)
         self.actionPolRef.setObjectName(_fromUtf8("actionPolRef"))
-        self.actionInter = QtGui.QAction(MainWindow)
-        self.actionInter.setObjectName(_fromUtf8("actionInter"))
+
 
         self.actionSave_table = QtGui.QAction(MainWindow)
         self.actionSave_table.setObjectName(_fromUtf8("actionSave_table"))
@@ -276,8 +449,14 @@ class Ui_MainWindow(object):
 
         self.retranslateUi(MainWindow)
         self.initTable()
+        self.readJournal()
+
         QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.buttonClickHandler1)
+        QtCore.QObject.connect(self.fillButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.fillButtonHandler)
+        QtCore.QObject.connect(self.transferButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.transferButtonHandler)
         QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), self.initTable)
+        QtCore.QObject.connect(self.tickBox, QtCore.SIGNAL(_fromUtf8("stateChanged(int)")), self.unTickAll)
+        QtCore.QObject.connect(self.RBEdit, QtCore.SIGNAL(_fromUtf8("editingFinished()")), self.readJournal)
         QtCore.QObject.connect(self.comboBox, QtCore.SIGNAL(_fromUtf8("activated(QString)")), self.on_comboBox_Activated)
         QtCore.QObject.connect(self.actionSave_table, QtCore.SIGNAL(_fromUtf8("triggered()")), self.saveDialog)
         QtCore.QObject.connect(self.actionLoad_table, QtCore.SIGNAL(_fromUtf8("triggered()")), self.loadDialog)
@@ -286,48 +465,82 @@ class Ui_MainWindow(object):
         QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
     def retranslateUi(self, MainWindow):
-        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("MainWindow", "Run(s)", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(1).setText(QtGui.QApplication.translate("MainWindow", "Angle 1", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(2).setText(QtGui.QApplication.translate("MainWindow", "trans 1", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(3).setText(QtGui.QApplication.translate("MainWindow", "qmin_1", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(4).setText(QtGui.QApplication.translate("MainWindow", "qmax_1", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(5).setText(QtGui.QApplication.translate("MainWindow", "Run(s)", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(6).setText(QtGui.QApplication.translate("MainWindow", "Angle 2", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(7).setText(QtGui.QApplication.translate("MainWindow", "trans 2", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(8).setText(QtGui.QApplication.translate("MainWindow", "qmin_2", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(9).setText(QtGui.QApplication.translate("MainWindow", "qmax_2", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(10).setText(QtGui.QApplication.translate("MainWindow", "Run(s)", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(11).setText(QtGui.QApplication.translate("MainWindow", "Angle 3", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(12).setText(QtGui.QApplication.translate("MainWindow", "trans 3", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(13).setText(QtGui.QApplication.translate("MainWindow", "qmin_3", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(14).setText(QtGui.QApplication.translate("MainWindow", "qmax_3", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(15).setText(QtGui.QApplication.translate("MainWindow", "dq/q", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(16).setText(QtGui.QApplication.translate("MainWindow", "scale", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableWidget.horizontalHeaderItem(17).setText(QtGui.QApplication.translate("MainWindow", "stitch?", None, QtGui.QApplication.UnicodeUTF8))
+        MainWindow.setWindowTitle(QtGui.QApplication.translate("ISIS Reflectometry", "ISIS Reflectometry", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("ISIS Reflectometry", "Run(s)", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(1).setText(QtGui.QApplication.translate("ISIS Reflectometry", "Angle 1", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(2).setText(QtGui.QApplication.translate("ISIS Reflectometry", "trans 1", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(3).setText(QtGui.QApplication.translate("ISIS Reflectometry", "qmin_1", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(4).setText(QtGui.QApplication.translate("ISIS Reflectometry", "qmax_1", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(5).setText(QtGui.QApplication.translate("ISIS Reflectometry", "Run(s)", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(6).setText(QtGui.QApplication.translate("ISIS Reflectometry", "Angle 2", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(7).setText(QtGui.QApplication.translate("ISIS Reflectometry", "trans 2", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(8).setText(QtGui.QApplication.translate("ISIS Reflectometry", "qmin_2", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(9).setText(QtGui.QApplication.translate("ISIS Reflectometry", "qmax_2", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(10).setText(QtGui.QApplication.translate("ISIS Reflectometry", "Run(s)", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(11).setText(QtGui.QApplication.translate("ISIS Reflectometry", "Angle 3", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(12).setText(QtGui.QApplication.translate("ISIS Reflectometry", "trans 3", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(13).setText(QtGui.QApplication.translate("ISIS Reflectometry", "qmin_3", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(14).setText(QtGui.QApplication.translate("ISIS Reflectometry", "qmax_3", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(15).setText(QtGui.QApplication.translate("ISIS Reflectometry", "dq/q", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(16).setText(QtGui.QApplication.translate("ISIS Reflectometry", "scale", None, QtGui.QApplication.UnicodeUTF8))
+        self.tableWidget.horizontalHeaderItem(17).setText(QtGui.QApplication.translate("ISIS Reflectometry", "stitch?", None, QtGui.QApplication.UnicodeUTF8))
         
-        self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Process", None, QtGui.QApplication.UnicodeUTF8))
-        self.pushButton_2.setText(QtGui.QApplication.translate("MainWindow", "Clear all", None, QtGui.QApplication.UnicodeUTF8))
-        self.menuFile.setTitle(QtGui.QApplication.translate("MainWindow", "File", None, QtGui.QApplication.UnicodeUTF8))
-        self.comboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "SURF", None, QtGui.QApplication.UnicodeUTF8))
-        self.comboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "CRISP", None, QtGui.QApplication.UnicodeUTF8))
-        self.comboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "PolRef", None, QtGui.QApplication.UnicodeUTF8))
-        self.comboBox.setItemText(3, QtGui.QApplication.translate("MainWindow", "Inter", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionSURF.setText(QtGui.QApplication.translate("MainWindow", "SURF", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionCRISP.setText(QtGui.QApplication.translate("MainWindow", "CRISP", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionPolRef.setText(QtGui.QApplication.translate("MainWindow", "PolRef", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionInter.setText(QtGui.QApplication.translate("MainWindow", "Inter", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionSave_table.setText(QtGui.QApplication.translate("MainWindow", "Save table", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionLoad_table.setText(QtGui.QApplication.translate("MainWindow", "Load table", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionReLoad_table.setText(QtGui.QApplication.translate("MainWindow", "Re-Load table", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionSaveDialog.setText(QtGui.QApplication.translate("MainWindow", "Save Workspaces", None, QtGui.QApplication.UnicodeUTF8))
+        self.pushButton.setText(QtGui.QApplication.translate("ISIS Reflectometry", "&Process", None, QtGui.QApplication.UnicodeUTF8))
+        self.fillButton.setText(QtGui.QApplication.translate("ISIS Reflectometry", "&Autofill", None, QtGui.QApplication.UnicodeUTF8))
+        self.transferButton.setText(QtGui.QApplication.translate("ISIS Reflectometry", "=>", None, QtGui.QApplication.UnicodeUTF8))
+        self.pushButton_2.setText(QtGui.QApplication.translate("ISIS Reflectometry", "&Clear all", None, QtGui.QApplication.UnicodeUTF8))
+        self.menuFile.setTitle(QtGui.QApplication.translate("ISIS Reflectometry", "&File", None, QtGui.QApplication.UnicodeUTF8))
+        self.comboBox.setItemText(1, QtGui.QApplication.translate("ISIS Reflectometry", "SURF", None, QtGui.QApplication.UnicodeUTF8))
+        self.comboBox.setItemText(2, QtGui.QApplication.translate("ISIS Reflectometry", "CRISP", None, QtGui.QApplication.UnicodeUTF8))
+        self.comboBox.setItemText(3, QtGui.QApplication.translate("ISIS Reflectometry", "PolRef", None, QtGui.QApplication.UnicodeUTF8))
+        self.comboBox.setItemText(0, QtGui.QApplication.translate("ISIS Reflectometry", "Inter", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionInter.setText(QtGui.QApplication.translate("ISIS Reflectometry", "Inter", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionSURF.setText(QtGui.QApplication.translate("ISIS Reflectometry", "SURF", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionCRISP.setText(QtGui.QApplication.translate("ISIS Reflectometry", "CRISP", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionPolRef.setText(QtGui.QApplication.translate("ISIS Reflectometry", "PolRef", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionSave_table.setText(QtGui.QApplication.translate("ISIS Reflectometry", "Save table", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionLoad_table.setText(QtGui.QApplication.translate("ISIS Reflectometry", "Load table", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionReLoad_table.setText(QtGui.QApplication.translate("ISIS Reflectometry", "Re-Load table", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionSaveDialog.setText(QtGui.QApplication.translate("ISIS Reflectometry", "Save Workspaces", None, QtGui.QApplication.UnicodeUTF8))
+
+
+    def readJournal(self):
+        self.listWidget.clear()
+        currentInstrument = config['default.instrument']
+        t = 0
+        l = 0
+        while (t == 0 and l < 15 and self.RBEdit.text() != ''):
+            l = l + 1
+            tree1 = xml.parse(r'\\isis\inst$\NDX' + currentInstrument + '\Instrument\logs\journal\journal_main.xml')
+            root1 = tree1.getroot()
+            currentJournal = root1[len(root1) - l].attrib.get('name')
+            tree = xml.parse(r'\\isis\inst$\NDX' + currentInstrument + '\Instrument\logs\journal\\' + currentJournal)
+            root = tree.getroot()
+            t = 0
+            for entry in root:  # 910252
+                if (entry[4].text == self.RBEdit.text()):
+                    t = t + 1
+                    runno = str(int(entry[6].text)) 
+                    # print "RB",entry[3].text, runno, entry[0].text
+                    journalentry = runno + ": " + entry[0].text
+                    self.listWidget.addItem(journalentry)
+        self.listWidget.setMaximumWidth(self.listWidget.sizeHintForColumn(0) + 100)
+        spacerItem0 = QtGui.QSpacerItem(self.listWidget.sizeHintForColumn(0) - 100, 20, QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem0, 0, 1, 1, 1)
 
 
     def initTable(self): 
         self.tableWidget.resizeColumnsToContents()
-        #self.tableWidget.setSelectionMode(2)
-        #self.tableWidget.selectRow(2)
-        #self.tableWidget.selectRow(4)
+        # self.tableWidget.setSelectionMode(2)
+        # self.tableWidget.selectRow(2)
+        # self.tableWidget.selectRow(4)
+        instrumentList = ['INTER', 'SURF', 'CRISP', 'POLREF']
+        currentInstrument = config['default.instrument']
+        if currentInstrument in instrumentList:
+            self.comboBox.setCurrentIndex(instrumentList.index(config['default.instrument'].upper()))
+        else:
+            self.comboBox.setCurrentIndex(0)
+            config['default.instrument'] = 'INTER'
         for column in range(self.tableWidget.columnCount()):
             for row in range(self.tableWidget.rowCount()):
                 if (column == 17):
@@ -336,151 +549,219 @@ class Ui_MainWindow(object):
                     item.setCheckState(False)
                     self.tableWidget.setCellWidget(row, column, item)
                 else:
-                    self.tableWidget.setRowHeight(row,20)
-                    item=QtGui.QTableWidgetItem()
+                    self.tableWidget.setRowHeight(row, 20)
+                    item = QtGui.QTableWidgetItem()
                     item.setText('')
-                    self.tableWidget.setItem(row,column,item)
-		
+                    self.tableWidget.setItem(row, column, item)
+
+    def fillButtonHandler(self):
+        col = 0
+        # make sure all selected cells are in the same row
+        sum = 0
+        howMany = len(self.tableWidget.selectedItems())
+        for cell in self.tableWidget.selectedItems():
+            sum = sum + self.tableWidget.row(cell)
+        if (howMany):
+            if (sum / howMany == self.tableWidget.row(self.tableWidget.selectedItems()[0])):
+                for cell in self.tableWidget.selectedItems():
+                    row = self.tableWidget.row(cell) + 1
+                    txt = cell.text()
+                    while (self.tableWidget.item(row, 0).text() != ''):
+                        item = QtGui.QTableWidgetItem()
+                        item.setText(txt)
+                        self.tableWidget.setItem(row, self.tableWidget.column(cell), item)
+                        row = row + 1
+
+                # while (self.tableWidget.item(row,0).text() != ''):
+            # row=row+1
+        # for idx in self.listWidget.selectedItems():
+            # runno=idx.text().split(':')[0]
+            # item=QtGui.QTableWidgetItem()
+            # item.setText(runno)
+            # self.tableWidget.setItem(row,col,item)
+            # item=QtGui.QTableWidgetItem()
+            # item.setText(self.transRunEdit.text())
+            # self.tableWidget.setItem(row,col+2,item)
+            # col=col+5
+        
+
+    def transferButtonHandler(self):
+        col = 0
+        row = 0
+        while (self.tableWidget.item(row, 0).text() != ''):
+            row = row + 1
+        for idx in self.listWidget.selectedItems():
+            runno = idx.text().split(':')[0]
+            item = QtGui.QTableWidgetItem()
+            item.setText(runno)
+            self.tableWidget.setItem(row, col, item)
+            item = QtGui.QTableWidgetItem()
+            item.setText(self.transRunEdit.text())
+            self.tableWidget.setItem(row, col + 2, item)
+            col = col + 5
+        
+        
+    def unTickAll(self):
+        for row in range(self.tableWidget.rowCount()):
+            if (self.tickBox.checkState()):
+                self.tableWidget.cellWidget(row, 17).setCheckState(True)
+            else:
+                self.tableWidget.cellWidget(row, 17).setCheckState(False)
+            # self.tableWidget.setCellWidget(row, 17, item)
+
 #--------- If "Process" button pressed, convert raw files to IvsLam and IvsQ and combine if checkbox ticked -------------
     def buttonClickHandler1(self):
-		rows=[] 
-		for idx in self.tableWidget.selectionModel().selectedRows():
-			rows.append(idx.row())
-		
-		noOfRows = range(self.tableWidget.rowCount())
-		if len(rows):
-			noOfRows = rows
-		for row in noOfRows:#range(self.tableWidget.rowCount()):
-			runno=[]
-			wksp=[]
-			wkspBinned=[]
-			overlapLow=[]
-			overlapHigh=[]
-			g = ['g1','g2','g3']
-			theta = [0,0,0]
-			if (self.tableWidget.item(row,0).text() != ''):
-				for i in range(3):
-					r = str(self.tableWidget.item(row,i*5).text())
-					if (r != ''):
-						runno.append(r)
-					ovLow = str(self.tableWidget.item(row,i*5+3).text())
-					if (ovLow != ''):
-						overlapLow.append(float(ovLow))
-					ovHigh = str(self.tableWidget.item(row,i*5+4).text())
-					if (ovHigh != ''):
-						overlapHigh.append(float(ovHigh))
-
-						
-				print len(runno),"runs: ",runno
-				# Determine resolution
-				#if (runno[0] != ''):
-				if (self.tableWidget.item(row,15).text() == ''):
-					dqq = calcRes(runno[0])
-					print "Calculated resolution: ",dqq
-				else:
-					dqq=float(self.tableWidget.item(row,15).text())
-				# Populate runlist
-				for i in range(len(runno)):
-					theta = round(self.dorun(runno[i],row,i),3)
-					wksp.append(runno[i]+'_IvsQ')
-					if (self.tableWidget.item(row,i*5+1).text() == ''):
-						item=QtGui.QTableWidgetItem()
-						item.setText(str(theta))
-						self.tableWidget.setItem(row,i*5+1,item)
-					if wksp[i].find(',')>0 or wksp[i].find(':')>0:
-						runlist = []
-						l1 = wksp[i].split(',')
-						for subs in l1:
-							l2 = subs.split(':')
-							for l3 in l2:
-								runlist.append(l3)
-						wksp[i] = runlist[0]+'_IvsQ'
-					ws_name_binned = wksp[i] +'_binned'
-					ws=getWorkspace(wksp[i])
-					w1=getWorkspace(wksp[0])
-					w2=getWorkspace(wksp[len(wksp)-1])
-					if len(overlapLow):
-						Qmin = overlapLow[0]
-					else:
-						Qmin = w1.readX(0)[0]
-					if len(overlapHigh):
-						Qmax = overlapHigh[len(overlapHigh)-1]
-					else:
-						Qmax = max(w2.readX(0))
-					
-					Rebin(wksp[i],ws_name_binned,str(overlapLow[i])+','+str(-dqq)+','+str(overlapHigh[i]))
-					wkspBinned.append(ws_name_binned)
-					wsb=getWorkspace(ws_name_binned)
-					Imin = min(wsb.readY(0))
-					Imax = max(wsb.readY(0))
-					g[i] = plotSpectrum(ws_name_binned,0, True)
-					titl=groupGet(ws_name_binned,'samp','run_title')
-					if (i>0):
-						mergePlots(g[0],g[i])
-					g[0].activeLayer().setTitle(titl)
-					g[0].activeLayer().setAxisScale(Layer.Left,Imin*0.1,Imax*10,Layer.Log10)
-					g[0].activeLayer().setAxisScale(Layer.Bottom,Qmin*0.9,Qmax*1.1,Layer.Log10)
-					g[0].activeLayer().setAutoScale()
-				if (self.tableWidget.cellWidget(row,17).checkState() > 0):
-					if (len(runno)==1):
-						print "Nothing to combine!"
-					elif (len(runno)==2):
-						outputwksp = runno[0]+'_'+runno[1][3:5]
-					else:
-						outputwksp = runno[0]+'_'+runno[2][3:5]
-					print runno
-					w1=getWorkspace(wksp[0])
-					w2=getWorkspace(wksp[len(wksp)-1])
-					begoverlap = w2.readX(0)[0]
-					#Qmin = w1.readX(0)[0]
-					#Qmax = max(w2.readX(0))
-					# get Qmax
-					if (self.tableWidget.item(row,i*5+4).text() == ''):
-						overlapHigh = 0.3*max(w1.readX(0))
-
-					print overlapLow, overlapHigh
-					wcomb = combineDataMulti(wkspBinned,outputwksp,overlapLow,overlapHigh,Qmin,Qmax,-dqq,1)
-					if (self.tableWidget.item(row,16).text() != ''):
-						Scale(outputwksp,outputwksp,1/float(self.tableWidget.item(row,16).text()))
-					Qmin = getWorkspace(outputwksp).readX(0)[0]
-					Qmax = max(getWorkspace(outputwksp).readX(0))
-					gcomb = plotSpectrum(outputwksp,0, True)
-					titl=groupGet(outputwksp,'samp','run_title')
-					gcomb.activeLayer().setTitle(titl)
-					gcomb.activeLayer().setAxisScale(Layer.Left,1e-8,100.0,Layer.Log10)
-					gcomb.activeLayer().setAxisScale(Layer.Bottom,Qmin*0.9,Qmax*1.1,Layer.Log10)
+        rows = [] 
+        for idx in self.tableWidget.selectionModel().selectedRows():
+            rows.append(idx.row())
+        
+        noOfRows = range(self.tableWidget.rowCount())
+        if len(rows):
+            noOfRows = rows
+        for row in noOfRows:  # range(self.tableWidget.rowCount()):
+            runno = []
+            wksp = []
+            wkspBinned = []
+            overlapLow = []
+            overlapHigh = []
+            g = ['g1', 'g2', 'g3']
+            theta = [0, 0, 0]
+            if (self.tableWidget.item(row, 0).text() != ''):
+                for i in range(3):
+                    r = str(self.tableWidget.item(row, i * 5).text())
+                    if (r != ''):
+                        runno.append(r)
+                    ovLow = str(self.tableWidget.item(row, i * 5 + 3).text())
+                    if (ovLow != ''):
+                        overlapLow.append(float(ovLow))
+                    ovHigh = str(self.tableWidget.item(row, i * 5 + 4).text())
+                    if (ovHigh != ''):
+                        overlapHigh.append(float(ovHigh))
+
+                        
+                print len(runno), "runs: ", runno
+                # Determine resolution
+                # if (runno[0] != ''):
+                if (self.tableWidget.item(row, 15).text() == ''):
+                    dqq = calcRes(runno[0])
+                    item = QtGui.QTableWidgetItem()
+                    item.setText(str(dqq))
+                    self.tableWidget.setItem(row, 15, item)
+                    print "Calculated resolution: ", dqq
+                else:
+                    dqq = float(self.tableWidget.item(row, 15).text())
+                # Populate runlist
+                for i in range(len(runno)):
+                    [theta, qmin, qmax] = self.dorun(runno[i], row, i)
+                    theta = round(theta, 3)
+                    qmin = round(qmin, 3)
+                    qmax = round(qmax, 3)
+                    wksp.append(runno[i] + '_IvsQ')
+                    if (self.tableWidget.item(row, i * 5 + 1).text() == ''):
+                        item = QtGui.QTableWidgetItem()
+                        item.setText(str(theta))
+                        self.tableWidget.setItem(row, i * 5 + 1, item)
+
+                    if (self.tableWidget.item(row, i * 5 + 3).text() == ''):
+                        item = QtGui.QTableWidgetItem()
+                        item.setText(str(qmin))
+                        self.tableWidget.setItem(row, i * 5 + 3, item)
+                        overlapLow.append(qmin)
+
+                    if (self.tableWidget.item(row, i * 5 + 4).text() == ''):
+                        item = QtGui.QTableWidgetItem()
+                        if i == len(runno) - 1:
+                        # allow full high q-range for last angle
+                            qmax = 4 * math.pi / ((4 * math.pi / qmax * math.sin(theta * math.pi / 180)) - 0.5) * math.sin(theta * math.pi / 180)
+                        item.setText(str(qmax))
+                        self.tableWidget.setItem(row, i * 5 + 4, item)
+                        overlapHigh.append(qmax)
+
+                    if wksp[i].find(',') > 0 or wksp[i].find(':') > 0:
+                        runlist = []
+                        l1 = wksp[i].split(',')
+                        for subs in l1:
+                            l2 = subs.split(':')
+                            for l3 in l2:
+                                runlist.append(l3)
+                        wksp[i] = runlist[0] + '_IvsQ'
+                    ws_name_binned = wksp[i] + '_binned'
+                    ws = getWorkspace(wksp[i])
+                    w1 = getWorkspace(wksp[0])
+                    w2 = getWorkspace(wksp[len(wksp) - 1])
+                    if len(overlapLow):
+                        Qmin = overlapLow[0]
+                    else:
+                        Qmin = w1.readX(0)[0]
+                    if len(overlapHigh):
+                        Qmax = overlapHigh[len(overlapHigh) - 1]
+                    else:
+                        Qmax = max(w2.readX(0))
+                    
+                    Rebin(InputWorkspace=wksp[i], Params=str(overlapLow[i]) + ',' + str(-dqq) + ',' + str(overlapHigh[i]), OutputWorkspace=ws_name_binned)
+                    wkspBinned.append(ws_name_binned)
+                    wsb = getWorkspace(ws_name_binned)
+                    Imin = min(wsb.readY(0))
+                    Imax = max(wsb.readY(0))
+                    g[i] = plotSpectrum(ws_name_binned, 0, True)
+                    titl = groupGet(ws_name_binned, 'samp', 'run_title')
+                    if (i > 0):
+                        mergePlots(g[0], g[i])
+                    if (type(titl) == str):
+                        g[0].activeLayer().setTitle(titl)
+                    g[0].activeLayer().setAxisScale(Layer.Left, Imin * 0.1, Imax * 10, Layer.Log10)
+                    g[0].activeLayer().setAxisScale(Layer.Bottom, Qmin * 0.9, Qmax * 1.1, Layer.Log10)
+                    g[0].activeLayer().setAutoScale()
+                if (self.tableWidget.cellWidget(row, 17).checkState() > 0):
+                    if (len(runno) == 1):
+                        print "Nothing to combine!"
+                    elif (len(runno) == 2):
+                        outputwksp = runno[0] + '_' + runno[1][3:5]
+                    else:
+                        outputwksp = runno[0] + '_' + runno[2][3:5]
+                    print runno
+                    w1 = getWorkspace(wksp[0])
+                    w2 = getWorkspace(wksp[len(wksp) - 1])
+                    begoverlap = w2.readX(0)[0]
+                    # Qmin = w1.readX(0)[0]
+                    # Qmax = max(w2.readX(0))
+                    # get Qmax
+                    if (self.tableWidget.item(row, i * 5 + 4).text() == ''):
+                        overlapHigh = 0.3 * max(w1.readX(0))
+
+                    print overlapLow, overlapHigh
+                    wcomb = combineDataMulti(wkspBinned, outputwksp, overlapLow, overlapHigh, Qmin, Qmax, -dqq, 1)
+                    if (self.tableWidget.item(row, 16).text() != ''):
+                        Scale(InputWorkspace=outputwksp, OutputWorkspace=outputwksp, Factor=1 / float(self.tableWidget.item(row, 16).text()))
+                    Qmin = getWorkspace(outputwksp).readX(0)[0]
+                    Qmax = max(getWorkspace(outputwksp).readX(0))
+                    gcomb = plotSpectrum(outputwksp, 0, True)
+                    titl = groupGet(outputwksp, 'samp', 'run_title')
+                    gcomb.activeLayer().setTitle(titl)
+                    gcomb.activeLayer().setAxisScale(Layer.Left, 1e-8, 100.0, Layer.Log10)
+                    gcomb.activeLayer().setAxisScale(Layer.Bottom, Qmin * 0.9, Qmax * 1.1, Layer.Log10)
 
     def dorun(self, runno, row, which):
-        g = ['g1','g2','g3']
-        transrun = str(self.tableWidget.item(row,which*5+2).text())
-        angle = str(self.tableWidget.item(row,which*5+1).text())  
-        names = mtd.getWorkspaceNames()
-        if ',' in transrun:
-            slam = transrun.split(',')[0]
-            llam = transrun.split(',')[1]
-            print "Transmission runs: ", transrun
-            [I0MonitorIndex, MultiDetectorStart, nHist] = toLam(slam,'_'+slam)
-            CropWorkspace(InputWorkspace="_D_"+slam,OutputWorkspace="_D_"+slam,StartWorkspaceIndex=0,EndWorkspaceIndex=0)
-            [I0MonitorIndex, MultiDetectorStart, nHist] = toLam(llam,'_'+llam)
-            CropWorkspace(InputWorkspace="_D_"+llam,OutputWorkspace="_D_"+llam,StartWorkspaceIndex=0,EndWorkspaceIndex=0)
-            
-            RebinToWorkspace(WorkspaceToRebin="_M_"+llam,WorkspaceToMatch="_DP_"+llam,OutputWorkspace="_M_P_"+llam)
-            CropWorkspace(InputWorkspace="_M_P_"+llam,OutputWorkspace="_I0P_"+llam,StartWorkspaceIndex=I0MonitorIndex)
-            Divide(LHSWorkspace="_DP_"+llam,RHSWorkspace="_I0P_"+llam,OutputWorkspace="_D_"+llam)
-            
-            RebinToWorkspace(WorkspaceToRebin="_M_"+slam,WorkspaceToMatch="_DP_"+slam,OutputWorkspace="_M_P_"+slam)
-            CropWorkspace(InputWorkspace="_M_P_"+slam,OutputWorkspace="_I0P_"+slam,StartWorkspaceIndex=I0MonitorIndex)
-            Divide(LHSWorkspace="_DP_"+slam,RHSWorkspace="_I0P_"+slam,OutputWorkspace="_D_"+slam)
-
-            [transr, sf] = combine2("_D_"+slam,"_D_"+llam,"_transcomb",10.0,12.0,1.5,17.0,0.02,scalehigh=0)
-            [wlam, wq, th] = quick(runno,angle,trans='_transcomb')
-        else:
-            [wlam, wq, th] = quick(runno,trans=transrun,theta=angle)        
-        ws_name = str(runno) +'_IvsQ'        
-        return th
+        g = ['g1', 'g2', 'g3']
+        transrun = str(self.tableWidget.item(row, which * 5 + 2).text())
+        angle = str(self.tableWidget.item(row, which * 5 + 1).text())  
+        names = mtd.getObjectNames()
+        [wlam, wq, th] = quick(runno, trans=transrun, theta=angle)        
+        if ':' in runno:
+            runno = runno.split(':')[0]
+        if ',' in runno:
+            runno = runno.split(',')[0]
+
+        ws_name = str(runno) + '_IvsQ'
+        inst = groupGet(ws_name, 'inst')
+        lmin = inst.getNumberParameter('LambdaMin')[0] + 1
+        lmax = inst.getNumberParameter('LambdaMax')[0] - 2
+        qmin = 4 * math.pi / lmax * math.sin(th * math.pi / 180)
+        qmax = 4 * math.pi / lmin * math.sin(th * math.pi / 180)
+        return th, qmin, qmax
         
     def on_comboBox_Activated(self, instrument):
-        mtd.settings['default.instrument'] = str(instrument)
+        config['default.instrument'] = str(instrument)
         print "Instrument is now: ", str(instrument)
 
     def saveDialog(self):
@@ -488,36 +769,36 @@ class Ui_MainWindow(object):
         writer = csv.writer(open(filename, "wb"))
         for row in range(self.tableWidget.rowCount()):
             rowtext = []
-            for column in range(self.tableWidget.columnCount()-1):
-                    rowtext.append(self.tableWidget.item(row,column).text())
+            for column in range(self.tableWidget.columnCount() - 1):
+                    rowtext.append(self.tableWidget.item(row, column).text())
             if (len(rowtext) > 0):
                 writer.writerow(rowtext)
 
     def loadDialog(self):
         global currentTable
         filename = QtGui.QFileDialog.getOpenFileName()
-        currentTable=filename
+        currentTable = filename
         reader = csv.reader(open(filename, "rb"))
         row = 0
         for line in reader:
-            if (row<100):
-                for column in range(self.tableWidget.columnCount()-1):
-                    item=QtGui.QTableWidgetItem()
+            if (row < 100):
+                for column in range(self.tableWidget.columnCount() - 1):
+                    item = QtGui.QTableWidgetItem()
                     item.setText(line[column])
-                    self.tableWidget.setItem(row,column,item)
+                    self.tableWidget.setItem(row, column, item)
                 row = row + 1
 
     def ReloadDialog(self):
         global currentTable
-        filename=currentTable
+        filename = currentTable
         reader = csv.reader(open(filename, "rb"))
         row = 0
         for line in reader:
-            if (row<100):
-                for column in range(self.tableWidget.columnCount()-1):
-                    item=QtGui.QTableWidgetItem()
+            if (row < 100):
+                for column in range(self.tableWidget.columnCount() - 1):
+                    item = QtGui.QTableWidgetItem()
                     item.setText(line[column])
-                    self.tableWidget.setItem(row,column,item)
+                    self.tableWidget.setItem(row, column, item)
                 row = row + 1
 
     def saveWksp(self):
@@ -528,70 +809,85 @@ class Ui_MainWindow(object):
         Dialog.exec_()
 
 def calcRes(run):    
-    runno = '_' + str(run)+'temp'
-    if type(run)==type(int()):
-        LoadNexus(Filename=run,OutputWorkspace=runno)
+    runno = '_' + str(run) + 'temp'
+    if type(run) == type(int()):
+        Load(Filename=run, OutputWorkspace=runno)
     else:
-        LoadNexus(Filename=run.replace("raw","nxs",1),OutputWorkspace=runno)
+        Load(Filename=run.replace("raw", "nxs", 1), OutputWorkspace=runno)
     # Get slits and detector angle theta from NeXuS
-	s1a = groupGet(runno,'samp','S1')
-	s4a = groupGet(runno,'samp','S4')
-	theta = groupGet(runno,'samp','THETA')
-	if type(s1a)!=float:
-		s1 = s1a[len(s1a)-1]
-	else:
-		s1 = s1a
-	if type(s4a)!=float:
-		s4 = s4a[len(s4a)-1]
-	else:
-		s4 = s4a
-	if type(theta)!=float:
-		th = theta[len(theta)-1]
-	else:
-		th = theta
+    theta = groupGet(runno, 'samp', 'THETA')
+    inst = groupGet(runno, 'inst')
+    s1z = inst.getComponentByName('slit1').getPos().getZ() * 1000.0  # distance in mm
+    s2z = inst.getComponentByName('slit2').getPos().getZ() * 1000.0  # distance in mm
+    s1vg = inst.getComponentByName('slit1')
+    s1vg = s1vg.getNumberParameter('vertical gap')[0]
+    s2vg = inst.getComponentByName('slit2')
+    s2vg = s2vg.getNumberParameter('vertical gap')[0]
+
+    if type(theta) != float:
+        th = theta[len(theta) - 1]
+    else:
+        th = theta
     
-    print "s1=",s1,"s4=",s4,"theta=",theta
-	#4268.0 is the S1-S4 distance in mm for SURF!!!
-    resolution=math.atan((s1+s4)/(2*4268.0))*180/math.pi/th
-    print "dq/q=",resolution
-    mantid.deleteWorkspace(runno)
+    print "s1vg=", s1vg, "s2vg=", s2vg, "theta=", theta
+    #1500.0 is the S1-S2 distance in mm for SURF!!!
+    resolution = math.atan((s1vg + s2vg) / (2 * (s2z - s1z))) * 180 / math.pi / th
+    print "dq/q=", resolution
+    DeleteWorkspace(runno)
     return resolution
 
+    
+def groupGet(wksp, whattoget, field=''):
+    '''
+    returns information about instrument or sample details for a given workspace wksp,
+    also if the workspace is a group (info from first group element)
+    '''
+    
+    if (whattoget == 'inst'):
+        if isinstance(mtd[wksp], WorkspaceGroup):
+            return mtd[wksp + '_1'].getInstrument()
+        else:
+            return mtd[wksp].getInstrument()
+            
+    elif (whattoget == 'samp' and field != ''):
+        if isinstance(mtd[wksp], WorkspaceGroup):
+            try:
+                log = mtd[wksp + '_1'].getSampleDetails().getLogData(field).value
+                if (type(log) is int or type(log) is str):
+                    res = log
+                else:
+                    res = log[len(log) - 1]
+            except RuntimeError:
+                res = 0
+                print "Block " + field + " not found."            
+        else:
+            try:
+                log = mtd[wksp].getSampleDetails().getLogData(field).value
+                if (type(log) is int or type(log) is str):
+                    res = log
+                else:
+                    res = log[len(log) - 1]
+            except RuntimeError:        
+                res = 0
+                print "Block " + field + " not found."
+        return res
+    elif (whattoget == 'wksp'):
+        if isinstance(mtd[wksp], WorkspaceGroup):
+            return mtd[wksp + '_1'].getNumberHistograms()
+        else:
+            return mtd[wksp].getNumberHistograms()
+
 
-def groupGet(wksp,whattoget,field=''):
-	'''
-	returns information about instrument or sample details for a given workspace wksp,
-	also if the workspace is a group (info from first group element)
-	'''
-	if (whattoget == 'inst'):
-		if mtd[wksp].isGroup():
-			return mtd[wksp+'_1'].getInstrument()
-		else:
-			return mtd[wksp].getInstrument()
-			
-	elif (whattoget == 'samp' and field != ''):
-		if mtd[wksp].isGroup():
-			try:
-				res = mtd[wksp + '_1'].getSampleDetails().getLogData(field).value				
-			except RuntimeError:
-				res = 0
-				print "Block "+field+" not found."			
-		else:
-			try:
-				res = mtd[wksp].getSampleDetails().getLogData(field).value
-			except RuntimeError:		
-				res = 0
-				print "Block "+field+" not found."
-		return res
 
         
         
         
 def getWorkspace(wksp):
-    if mtd[wksp].isGroup():
-        wout = mantid.getMatrixWorkspace(wksp+'_1')
+
+    if isinstance(mtd[wksp], WorkspaceGroup):
+        wout = mtd[wksp + '_1']
     else:
-        wout = mantid.getMatrixWorkspace(wksp)
+        wout = mtd[wksp]
         
     return wout
     
@@ -606,4 +902,3 @@ if __name__ == "__main__":
     ui.setupUi(MainWindow)
     MainWindow.show()
     sys.exit(app.exec_())
-