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_()) -