def EventRefLoQ(runno,stop,start=0,latest=0):
    runno=str(runno)
    Load(Filename=runno, OutputWorkspace=runno, LoadMonitors=True)
    angle=0.8
    
    w1=mtd[runno]
    total = w1.getRun().getLogData('gd_prtn_chrg').value
    
    FilterByTime(InputWorkspace=runno, OutputWorkspace=runno+'_filter', StartTime=start, StopTime=stop)
    wt=mtd[runno+'_filter']
    slice = wt.getRun().getLogData('gd_prtn_chrg').value
    fraction = slice/total

    duration = wt.getRun().getLogData('duration').value
    print 'Processing Slice ' +str(start) + ' to ' + str(stop) + ' of total ' + str(duration) + ' of run ' + str(runno)
    if latest==1:
        start=int(duration-stop)
        stop=int(duration)
    Scale(InputWorkspace=runno+'_monitors',Factor=fraction,OutputWorkspace='mon_slice')
    Rebin(InputWorkspace=runno+'_filter', OutputWorkspace=runno+'_'+str(start)+'_'+str(stop), Params='0,100,100000', PreserveEvents=False)
    Rebin(InputWorkspace='mon_slice', OutputWorkspace='mon_rebin', Params='0,100,100000', PreserveEvents=False)
    AppendSpectra(InputWorkspace1='mon_rebin', InputWorkspace2=runno+'_'+str(start)+'_'+str(stop), OutputWorkspace=runno+'_'+str(start)+'_'+str(stop), MergeLogs=True)
    ReflectometryReductionOneAuto(InputWorkspace=runno+'_'+str(start)+'_'+str(stop), FirstTransmissionRun='TRANS_SM', OutputWorkspace=runno+'_'+str(start)+'_'+str(stop)+'_ref',\
        OutputWorkspaceWavelength=runno+'_'+str(start)+'_'+str(stop)+'_lam', OutputWorkspaceBinned=runno+'_'+str(start)+'_'+str(stop)+'_binned', Params='0.03,-0.07,0.33', ProcessingInstructions='3', WavelengthMin=1.5, \
        WavelengthMax=17, ThetaIn=angle, StrictSpectrumChecking=False, CorrectionAlgorithm='None',MomentumTRansferStep=0.07)
    Rebin(runno+'_'+str(start)+'_'+str(stop)+'_ref',Params='0.012,-0.06,0.08',OutputWorkspace=runno+'_'+str(start)+'_'+str(stop)+'_ref')


def EventRefHiQ(runno,stop,start=0,latest=0):
    runno=str(runno)
    Load(Filename=runno, OutputWorkspace=runno, LoadMonitors=True)
    angle=2.3
        
    w1=mtd[runno]
    total = w1.getRun().getLogData('gd_prtn_chrg').value
    
    FilterByTime(InputWorkspace=runno, OutputWorkspace=runno+'_filter', StartTime=start, StopTime=stop)
    wt=mtd[runno+'_filter']
    slice = wt.getRun().getLogData('gd_prtn_chrg').value
    fraction = slice/total

    duration = wt.getRun().getLogData('duration').value
    print 'Processing Slice ' +str(start) + ' to ' + str(stop) + ' of total ' + str(duration) + ' of run ' + str(runno)
    if latest==1:
        start=int(duration-stop)
        stop=int(duration)
    Scale(InputWorkspace=runno+'_monitors',Factor=fraction,OutputWorkspace='mon_slice')
    Rebin(InputWorkspace=runno+'_filter', OutputWorkspace=runno+'_'+str(start)+'_'+str(stop), Params='0,100,100000', PreserveEvents=False)
    Rebin(InputWorkspace='mon_slice', OutputWorkspace='mon_rebin', Params='0,100,100000', PreserveEvents=False)
    AppendSpectra(InputWorkspace1='mon_rebin', InputWorkspace2=runno+'_'+str(start)+'_'+str(stop), OutputWorkspace=runno+'_'+str(start)+'_'+str(stop), MergeLogs=True)
    ReflectometryReductionOneAuto(InputWorkspace=runno+'_'+str(start)+'_'+str(stop), FirstTransmissionRun='TRANS', OutputWorkspace=runno+'_'+str(start)+'_'+str(stop)+'_ref',\
        OutputWorkspaceWavelength=runno+'_'+str(start)+'_'+str(stop)+'_lam', OutputWorkspaceBinned=runno+'_'+str(start)+'_'+str(stop)+'_binned', Params='0.03,-0.07,0.33', ProcessingInstructions='3', WavelengthMin=1.5, \
        WavelengthMax=17, ThetaIn=angle, StrictSpectrumChecking=False, CorrectionAlgorithm='None',MomentumTRansferStep=0.07)
    Rebin(runno+'_'+str(start)+'_'+str(stop)+'_ref',Params='0.033,-0.06,0.33',OutputWorkspace=runno+'_'+str(start)+'_'+str(stop)+'_ref')
    
def ProcessRun(runnumber,angle,slicelength,runlength):
    numberofslices=runlength/slicelength
    for jj in range(0,numberofslices):
        if angle=='Lo':
            print 'Processing at Lo Angle'
            EventRefLoQ(runnumber,(jj+1)*slicelength,jj*slicelength)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/ASCII Dump/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'.txt'
            print 'Saving ASCII file ' + fname
            SaveANSTOAscii(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength)+'_ref',fname)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/Kinetic Slice Processing/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'.nxs'
            print 'Saving NEXUS file ' + fname
            SaveNexus(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength),fname)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/Kinetic Slice Processing/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'_lam.nxs'
            print 'Saving NEXUS file ' + fname
            SaveNexus(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength) + '_lam',fname)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/Kinetic Slice Processing/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'_ref.nxs'
            print 'Saving NEXUS file ' + fname
            SaveNexus(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength) + '_ref',fname)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/Kinetic Slice Processing/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'_binned.nxs'
            print 'Saving NEXUS file ' + fname
            SaveNexus(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength) + '_binned',fname)
            print 'Deleting slice workspaces'
            DeleteWorkspace(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength)+'_binned')
            DeleteWorkspace(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength)+'_ref')
            DeleteWorkspace(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength) + '_lam')
            DeleteWorkspace(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength))
        elif angle=='Hi':
            print 'Processing at Hi Angle'
            EventRefHiQ(runnumber,(jj+1)*slicelength,jj*slicelength)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/ASCII Dump/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'.txt'
            print 'Saving ASCII file ' + fname
            SaveANSTOAscii(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength)+'_ref',fname)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/Kinetic Slice Processing/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'.nxs'
            print 'Saving NEXUS file ' + fname
            SaveNexus(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength),fname)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/Kinetic Slice Processing/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'_lam.nxs'
            print 'Saving NEXUS file ' + fname
            SaveNexus(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength) + '_lam',fname)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/Kinetic Slice Processing/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'_ref.nxs'
            print 'Saving NEXUS file ' + fname
            SaveNexus(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength) + '_ref',fname)
            fname='C://Nexus Storage (No Cloud Mirror)/1810793/Kinetic Slice Processing/' + str(runnumber) + '_' + str(jj*slicelength) + '_' + str((jj+1)*slicelength)+'_binned.nxs'
            print 'Saving NEXUS file ' + fname
            SaveNexus(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength) + '_binned',fname)
            print 'Deleting slice workspaces'
            DeleteWorkspace(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength)+'_binned')
            DeleteWorkspace(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength)+'_ref')
            DeleteWorkspace(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength) + '_lam')
            DeleteWorkspace(str(runnumber)+'_'+str(jj*slicelength)+'_'+str((jj+1)*slicelength))
        else:
            print 'Angle not set'
    print 'Deleting run workspaces'
    DeleteWorkspace(str(runnumber))
    DeleteWorkspace(str(runnumber) + '_filter')
    DeleteWorkspace(str(runnumber) + '_monitors')
    DeleteWorkspace('mon_rebin')
    DeleteWorkspace('mon_slice')
            
##Now updated to work with Mantid 3.12.1
##Fixes included new syntax for ReflectometryReductionOneAuto function and a few changes to name handling to make it all work out properly plus saving and deleting thew new *_binned workspaces
##Bleed of run (rather than slice) workspaces fixed
##LoQ and HiQ variants of EventRef from EventRef.py have been defined separately
##Defining Angle and Trans no longer necessary
##Angle set to 0.8 for LoQ variant and 2.3 for HiQ variant in function definitions
##Trans set fo TRANS_SM for LoQ variant and TRANS for HiQ variant in function definitions
##ProcessRun looks at an angle set and loops the relevant EventRef over the defined timescale
##ProcessRun takes Run Number, Angle ('Hi' or 'Lo'), Slice Length (seconds) and Run Length (seconds)
##Save location is part of the definition so need to redefine for new location

ProcessRun(47112,'Lo',20,15*60)
ProcessRun(47113,'Hi',20,37*60+40)
ProcessRun(47114,'Hi',20,12*60+20)
ProcessRun(47115,'Lo',20,7*60+20)
ProcessRun(47116,'Hi',20,2*60)
ProcessRun(47117,'Lo',20,7*60+20)
ProcessRun(47118,'Hi',20,67*60)
ProcessRun(47119,'Lo',20,4*60+20)
ProcessRun(47120,'Hi',20,9*60)
ProcessRun(47121,'Hi',20,107*60+20)
ProcessRun(47122,'Lo',20,4*60+20)
ProcessRun(47123,'Lo',20,7*60+20)
ProcessRun(47124,'Lo',20,15*60)
ProcessRun(47125,'Hi',20,45*60+20)
ProcessRun(47126,'Lo',20,15*60)
ProcessRun(47127,'Hi',20,45*60+20)
ProcessRun(47128,'Lo',20,15*60)
ProcessRun(47129,'Hi',20,45*60+20)
ProcessRun(47136,'Lo',20,4*60+20)
ProcessRun(47137,'Hi',20,9*60)
ProcessRun(47138,'Hi',20,92*60)
ProcessRun(47139,'Lo',20,8*60+20)
ProcessRun(47140,'Hi',20,9*60)
ProcessRun(47141,'Hi',20,121*60+20)
ProcessRun(47142,'Lo',20,4*60+20)
ProcessRun(47143,'Hi',20,9*60)
ProcessRun(47144,'Hi',20,157*60+40)
ProcessRun(47145,'Lo',20,4*60+20)
ProcessRun(47146,'Hi',20,9*60)
ProcessRun(47147,'Hi',20,86*60+20)
ProcessRun(47148,'Hi',20,15*60+20)
ProcessRun(47149,'Lo',20,5*60)
ProcessRun(47150,'Hi',20,9*60)
ProcessRun(47151,'Hi',20,63*60)
ProcessRun(47152,'Hi',20,51*60+40)
ProcessRun(47153,'Lo',20,15*60)
ProcessRun(47154,'Hi',20,45*60+20)
ProcessRun(47155,'Lo',20,15*60)
ProcessRun(47156,'Hi',20,45*60+20)
ProcessRun(47157,'Lo',20,15*60)
ProcessRun(47158,'Hi',20,45*60+20)
ProcessRun(47159,'Lo',20,15*60)
ProcessRun(47160,'Hi',20,31*60)
ProcessRun(47161,'Lo',20,4*60+20)
ProcessRun(47162,'Hi',20,9*60)
ProcessRun(47163,'Hi',20,121*60)
ProcessRun(47164,'Lo',20,4*60+20)
ProcessRun(47165,'Hi',20,9*60)
ProcessRun(47166,'Hi',20,114*60+20)
ProcessRun(47167,'Hi',20,31*60)
ProcessRun(47168,'Lo',20,6*60+40)
ProcessRun(47169,'Hi',20,9*60)
ProcessRun(47170,'Hi',20,104*60+20)
ProcessRun(47171,'Lo',20,4*60+20)
ProcessRun(47172,'Hi',20,9*60)
ProcessRun(47173,'Hi',20,121*60)
ProcessRun(47174,'Lo',20,4*60+20)
ProcessRun(47175,'Hi',20,9*60)
ProcessRun(47176,'Hi',20,121*60)
ProcessRun(47177,'Lo',20,15*60)
ProcessRun(47178,'Hi',20,45*60+20)
ProcessRun(47179,'Lo',20,15*60)
ProcessRun(47180,'Hi',20,45*60+20)
ProcessRun(47181,'Lo',20,15*60)
ProcessRun(47182,'Hi',20,45*60+20)
ProcessRun(47183,'Lo',20,15*60)
ProcessRun(47184,'Hi',20,26*60+20)
ProcessRun(47185,'Hi',20,71*60+40)
ProcessRun(47186,'Lo',20,4*60+20)
ProcessRun(47187,'Hi',20,9*60)
ProcessRun(47188,'Hi',20,107*60)
ProcessRun(47189,'Lo',20,4*60+20)
ProcessRun(47190,'Hi',20,9*60)
ProcessRun(47191,'Hi',20,119*60)
ProcessRun(47192,'Lo',20,4*60+20)
ProcessRun(47193,'Hi',20,9*60)
ProcessRun(47194,'Hi',20,103*60)
ProcessRun(47195,'Lo',20,4*60+20)
ProcessRun(47196,'Hi',20,9*60)
ProcessRun(47197,'Hi',20,95*60)
ProcessRun(47198,'Lo',20,4*60+20)
ProcessRun(47199,'Hi',20,9*60)
ProcessRun(47200,'Hi',20,178*60+40)
ProcessRun(47201,'Lo',20,15*60)
ProcessRun(47202,'Hi',20,60*60+20)
ProcessRun(47203,'Lo',20,15*60)
ProcessRun(47204,'Hi',20,31*60+40)
ProcessRun(47205,'Hi',20,27*60)
ProcessRun(47206,'Hi',20,27*60)
ProcessRun(47207,'Lo',20,4*60+20)
ProcessRun(47208,'Hi',20,9*60)
ProcessRun(47209,'Hi',20,121*60)
ProcessRun(47210,'Lo',20,4*60+20)
ProcessRun(47211,'Hi',20,9*60)
ProcessRun(47212,'Hi',20,200*60+20)