source: sans/Dev/branches/nxcansas_writer/NCNR_User_Procedures/Common/NIST_NXcanSAS_v709.ipf @ 1196

Last change on this file since 1196 was 1196, checked in by krzywon, 3 years ago

Loop over q and dq to populate qx and qy waves.

File size: 18.9 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method.
2#pragma version=5.0
3#pragma IgorVersion=6.1
4
5#include <HDF5 Browser>
6
7//************************
8// Vers 1.15 20171003
9//
10//************************
11
12
13///////////////////////////////////////////////////////////////////////////
14//
15// Basic file open/create and file initialization routines
16
17// Generic open or create file
18Function NXcanSAS_OpenOrCreate(dialog,fullpath,base)
19        Variable dialog
20        String fullpath,base
21        Variable fileID
22        if(dialog || stringmatch(fullpath, ""))
23                fileID = NxCansas_DoSaveFileDialog(base)
24        else
25                fileID = NxCansas_CreateFile(fullpath,base)
26        Endif
27        if(!fileID)
28                abort "Unable to create file at " + fullpath + "."
29        EndIf
30        return fileID
31End
32
33// Select/create file through prompt
34Function NxCansas_DoSaveFileDialog(base)
35        String base
36        Variable refNum, fileID
37        String message = "Save a file"
38        String outputPath
39        String fileFilters = "Data Files (*.h5):.h5;"
40        fileFilters += "All Files:.*;"
41        Open /D /F=fileFilters /M=message refNum
42        outputPath = S_fileName
43        fileID = NxCansas_CreateFile(outputPath,base)
44        return fileID
45End
46
47// Create file with a known path
48Function NxCansas_CreateFile(fullpath, base)
49        String fullpath,base
50        Variable fileID
51        Make/T/O/N=1 $("root:NXfile_name") = fullpath
52        fullpath = ReplaceString(":\\", fullpath, ":")
53        fullpath = ReplaceString("\\", fullpath, ":")
54        HDF5CreateFile /O/Z fileID as fullpath
55        NXCansas_InitializeFile(fileID, base)
56        return fileID
57End
58
59// Open\ file with a known path
60Function NxCansas_OpenFile(fullpath)
61        String fullpath
62        String fileName
63        Variable fileID
64        fileName = ParseFilePath(3,fullpath,":",0,0)
65        Make/T/O/N=1 $("root:NXfile_name") = fileName
66        fullpath = ReplaceString(":\\", fullpath, ":")
67        fullpath = ReplaceString("\\", fullpath, ":")
68        HDF5OpenFile /Z fileID as fullpath
69        return fileID
70End
71
72// Select/create file through prompt
73Function NxCansas_DoOpenFileDialog()
74        Variable refNum,fileID
75        String message = "Select a file"
76        String inputPath,fileName
77        String fileFilters = "Data Files (*.h5):.h5;"
78        STRUCT HDF5BrowserData bd
79        fileFilters += "All Files:.*;"
80        Open /D /F=fileFilters /M=message refNum as fileName
81        inputPath = S_fileName
82        fileID = NxCansas_OpenFile(inputPath)
83        return fileID
84End
85
86// Initialize the file to a base state
87Function NxCansas_InitializeFile(fileID, base)
88        Variable fileID
89        String base
90        String location,nxParent
91        Variable sasentry = NumVarOrDefault("root:Packages:NIST:gSASEntryNumber", 1)
92        sPrintf location,"%s:sasentry%d",base,sasentry // Igor memory base path for all
93        sPrintf nxParent,"/sasentry%d/",sasentry // HDF5 base path for all
94        NewDataFolder/O/S $(location)
95        Make/O/T/N=1 $(location + ":vals") = {""}
96        Make/O/T/N=3 $(location + ":attr") = {"NX_class", "canSAS_class", "version"}
97        Make/O/T/N=3 $(location + ":attrVals") = {"NXentry", "SASentry", "1.0"}
98        CreateStrNxCansas(fileID,nxParent,"","",$(location + ":vals"),$(location + ":attr"),$(location + ":attrVals"))
99        Make/O/T/N=1 $(location + ":entryAttr") = {""}
100        Make/O/T/N=1 $(location + ":entryAttrVals") = {""}
101        CreateStrNxCansas(fileID,nxParent,"","definition",{"NXcanSAS"},$(location + ":entryAttr"),$(location + ":entryAttrVals"))
102End
103
104//
105///////////////////////////////////////////////////////////////////////////
106
107///////////////////////////////////////////////////////////////////////////
108// Functions used to save data to file
109
110// Intermediate error handler for saving variable waves - this function should be called instead of saveNxCansas
111Function CreateVarNxCansas(fileID,parent,group,var,valueWave,attr,attrValues)
112        Variable fileID
113        String parent,group,var
114        Wave valueWave
115        Wave /T attr,attrValues
116        Variable err
117        err = saveNxCansasVars(fileID,parent,group,var,valueWave,attr,attrValues)
118        if(err)
119                Print "NxCansas write err = ",err
120        endif
121End
122// Intermediate error handler for saving string waves - this function should be called instead of saveNxCansas
123Function CreateStrNxCansas(fileID,parent,group,var,valueWave,attr,attrValues)
124        Variable fileID
125        String parent,group,var
126        Wave /T valueWave,attr,attrValues
127        Variable err
128        err = saveNxCansasStrs(fileID,parent,group,var,valueWave,attr,attrValues)
129        if(err)
130                Print "NxCansas write err = ",err
131        endif
132End
133
134Function NxCansas_writeAttributes(fileID,path,attrNames,attrVals)
135        Variable fileID
136        String path
137        Wave/T attrNames, attrVals
138        int numAttrs,i
139        numAttrs = numpnts(attrNames)
140        Duplicate/O/T attrNames, names
141        Duplicate/O/T attrVals, vals
142       
143        for(i=0; i < numAttrs; i += 1)
144                String name_i = names[i]
145                String vals_i = vals[i]
146                Make/O/T/N=1 vals_i_wave
147                vals_i_wave[0] = vals_i
148                if(!CmpStr(name_i,"") == 0)
149                        HDF5SaveData /A=name_i vals_i_wave, fileID, path
150                endif
151        endfor
152       
153End
154
155Function NxCansas_CreateGroup(fileID,parent)
156        Variable fileID
157        String parent
158        Variable groupID
159        try     
160                if(!fileID)
161                        abort "HDF5 file does not exist"
162                endif
163               
164                // Create the group if it doesn't already exist
165                HDF5CreateGroup /Z fileID, parent, groupID
166                       
167        catch
168                // DO something if error is thrown
169                Print "NxCansas write err in saveNxCansas = ",V_AbortCode
170        endtry
171        return groupID
172End
173
174// Write in a single NxCansas element (from the STRUCTURE)
175// This method should only be called by CreateVarNxCansas
176Function saveNxCansasVars(fileID,parent,group,var,valueWave,attr,attrValues)
177
178        Variable fileID
179        String parent,group,var
180        Wave valueWave
181        Wave /T attr,attrValues
182        int i, numAttrs
183       
184        variable err=0, groupID
185        String NXentry_name
186       
187        groupID = NxCansas_CreateGroup(fileID,parent)
188
189        // Save data to disk
190        if(!stringmatch(var,""))
191                HDF5SaveData /O /Z /IGOR=0 valueWave, groupID, var
192                if (V_flag != 0)
193                        err = 1
194                        abort "Cannot save wave to HDF5 dataset " + var + " with V_flag of " + num2str(V_flag)
195                endif
196        endif
197               
198        NxCansas_writeAttributes(fileID,parent+var,attr,attrValues)
199       
200        // Close group and file to release resources
201        if(groupID)
202                HDF5CloseGroup /Z groupID
203        endif
204
205        return err
206end
207
208// Write in a single NxCansas element
209// This method should only be called by CreateStrNxCansas
210Function saveNxCansasStrs(fileID,parent,group,var,valueWave,attr,attrValues)
211        Variable fileID
212        String parent,group,var
213        Wave /T attr,attrValues, valueWave
214        int i, numAttrs
215       
216        variable err=0, groupID
217        String NXentry_name
218       
219        groupID = NxCansas_CreateGroup(fileID,parent)
220       
221        // Save data to disk
222        if(!stringmatch(var,""))
223                HDF5SaveData /O /Z /IGOR=0 valueWave, groupID, var
224                if (V_flag != 0)
225                        err = 1
226                        abort "Cannot save wave to HDF5 dataset " + var + " with V_flag of " + num2str(V_flag)
227                endif
228        endif
229       
230        NxCansas_writeAttributes(fileID,parent+var,attr,attrValues)
231       
232        // Close group and file to release resources
233        if(groupID)
234                HDF5CloseGroup /Z groupID
235        endif
236
237        return err
238end
239
240//
241///////////////////////////////////////////////////////////////////////////
242
243///////////////////////////////////////////////////////////////////////////
244//
245// NXcanSAS Reader and Utilities
246
247Function LoadNXcanSASData(fileStr,outstr,doPlot,forceOverwrite)
248        String fileStr, outstr
249        Variable doPlot,forceOverwrite
250       
251        Variable refnum,fileID
252        Variable rr,gg,bb,xdim,ydim
253        SetDataFolder root:             //build sub-folders for each data set under root
254       
255        String filename
256        String I_dataS,Q_dataS,dQ_dataS,dQl_dataS,dQw_dataS,dI_dataS
257        String angst = StrVarOrDefault("root:Packages:NIST:gAngstStr", "A")
258        String/G loadDir = "root:"
259       
260        // Check fullpath and dialog
261        if(stringmatch(fileStr, ""))
262                fileID = NxCansas_DoOpenFileDialog()
263        else
264                fileID = NxCansas_OpenFile(fileStr)
265        Endif
266       
267        filename = ParseFilePath(3,fileStr,":",0,0)
268        String basestr
269        if (!cmpstr(outstr, ""))                //Outstr = "", cmpstr returns 0
270                baseStr = ShortFileNameString(CleanupName(filename,0))
271                baseStr = CleanupName(baseStr,0)                //in case the user added odd characters
272        else
273                baseStr = outstr                        //for output, hopefully correct length as passed in
274        endif
275        String baseFormat = baseStr + "_%d"
276       
277        if(fileID)
278                HDF5ListGroup /F/R/Type=1/Z fileID,"/"
279                String groupList = S_HDF5ListGroup
280                Variable groupID
281                Variable inc=1,ii=0,isMultiData=0,i=0,j=0
282                String entryUnformatted = "/sasentry%d/"
283                String dataUnformatted = "sasdata%d/"
284                String addDigit = "%d"
285                String entryBase
286                String dataBase = "sasdata/"
287                sPrintf entryBase,entryUnformatted,inc
288                // Open first group
289                HDF5OpenGroup /Z fileID, entryBase + dataBase, groupID
290                If (groupID == 0)
291                        sPrintF dataBase,dataUnformatted,0
292                        HDF5OpenGroup /z fileID, entryBase + dataBase, groupID
293                        isMultiData = 1
294                        sPrintF baseStr,baseformat,0
295                EndIf
296               
297                // Multiple SASentry groups
298                do
299                        //go back to the root folder and clean up before leaving
300                        // Multiple SASdata groups
301                        do
302                                if (isMultiData == 1)
303                                        sPrintF baseStr,baseformat,ii
304                                EndIf
305                                loadDir = "root:" + baseStr
306                                NewDataFolder/O/S $(loadDir)
307                                // Load in data
308                                HDF5LoadData /O/Z/N=$(baseStr + "_i") fileID, entryBase + dataBase + "I"
309                                HDF5LoadData /O/Z/N=$(baseStr + "_q") fileID, entryBase + dataBase + "Q"
310                                HDF5LoadData /O/Z/N=$(baseStr + "_dq") fileID, entryBase + dataBase + "dQ"
311                                HDF5LoadData /O/Z/N=$(baseStr + "_dql") fileID, entryBase + dataBase + "dQl"
312                                HDF5LoadData /O/Z/N=$(baseStr + "_dqw") fileID, entryBase + dataBase + "dQw"
313                                HDF5LoadData /O/Z/N=$(baseStr + "_s") fileID, entryBase + dataBase + "Idev"
314                                if (DimSize($(baseStr + "_i"), 1) > 1)
315                                        // Do not auto-plot 2D data
316                                        doPlot = 0
317                                        xdim = DimSize($(baseStr + "_i"), 0)
318                                        ydim = DimSize($(baseStr + "_i"), 1)
319                                        Wave q = $(baseStr + "_q")
320                                        Wave dq = $(baseStr + "_dq")
321                                       
322                                        //
323                                        // FIXME: All points set to the same value - need to loop
324                                        //
325                                       
326                                        Make/O/N=(xdim,ydim) $(baseStr + "_qx")
327                                        Wave qx = $(baseStr + "_qx")
328                                        Make/O/N=(xdim,ydim) $(baseStr + "_qy")
329                                        Wave qy = $(baseStr + "_qy")
330                                        if (numpnts(dq)>0)
331                                                Make/O/N=(xdim,ydim) $(baseStr + "_dqx")
332                                                Wave dqx = $(baseStr + "_dqx")
333                                                Make/O/N=(xdim,ydim) $(baseStr + "_dqy")
334                                                Wave dqy = $(baseStr + "_dqy")
335                                        EndIf
336                                        for(i=0; i < xdim; i += 1)
337                                                for(j=0; j < ydim; j +=1)
338                                                        qx[i][j] = q[0][i][j]
339                                                        qy[i][j] = q[1][i][j]
340                                                        if (numpnts(dq)>0)
341                                                                dqx[i][j] = dq[0][i][j]
342                                                                dqy[i][j] = dq[1][i][j]
343                                                        EndIf
344                                                endFor
345                                        endFor
346                                       
347                                        KillWaves $(baseStr + "_q")
348                                EndIf
349                                if (isMultiData)
350                                        sprintf dataBase,dataUnformatted,ii
351                                        // Open next group to see if it exists
352                                        HDF5OpenGroup /Z fileID, entryBase + dataBase, groupID
353                                else
354                                        groupID = 0
355                                endIf
356                                ii += 1
357                                // Load in Meta Data
358                                LoadMetaData(fileID,loadDir,entryBase)
359                        while (groupID != 0)
360                        inc += 1
361                        If (isMultiData)
362                                sprintf dataBase,dataUnformatted,ii
363                        endIf
364                        // Open next group to see if it exists
365                sPrintf entryBase,entryUnformatted,inc
366                        HDF5OpenGroup /Z fileID, entryBase + dataBase, groupID
367                while(groupID != 0)
368               
369                //plot if desired
370                if(doPlot)
371                        Print GetDataFolder(1)
372                       
373                        String w0 = (baseStr + "_q")
374                        String w1 = (baseStr + "_i")
375                        String w2 = (baseStr + "_s")
376                       
377                        // assign colors randomly
378                        rr = abs(trunc(enoise(65535)))
379                        gg = abs(trunc(enoise(65535)))
380                        bb = abs(trunc(enoise(65535)))
381                       
382                        // if target window is a graph, and user wants to append, do so
383                   DoWindow/B Plot_Manager
384                        if(WinType("") == 1)
385                                DoAlert 1,"Do you want to append this data to the current graph?"
386                               
387                                if(V_Flag == 1)
388                                        AppendToGraph $w1 vs $w0
389                                        ModifyGraph mode($w1)=3,marker($w1)=19,msize($w1)=2,rgb($w1)=(rr,gg,bb),tickUnit=1
390                                        ErrorBars/T=0 $w1 Y,wave=($w2,$w2)
391                                        ModifyGraph tickUnit(left)=1
392                                else
393                                //new graph
394                                        Display $w1 vs $w0
395                                        ModifyGraph log=1,mode($w1)=3,marker($w1)=19,msize($w1)=2,rgb($w1)=(rr,gg,bb),tickUnit=1
396                                        ModifyGraph grid=1,mirror=2,standoff=0
397                                        ErrorBars/T=0 $w1 Y,wave=($w2,$w2)
398                                        ModifyGraph tickUnit(left)=1
399                                        Label left "I(q)"
400                                        Label bottom "q ("+angst+"\\S-1\\M)"
401                                        Legend
402                                endif
403                        else
404                        // graph window was not target, make new one
405                                Display $w1 vs $w0
406                                ModifyGraph log=1,mode($w1)=3,marker($w1)=19,msize($w1)=2,rgb($w1)=(rr,gg,bb),tickUnit=1
407                                ModifyGraph grid=1,mirror=2,standoff=0
408                                ErrorBars/T=0 $w1 Y,wave=($w2,$w2)
409                                ModifyGraph tickUnit(left)=1
410                                Label left "I(q)"
411                                Label bottom "q ("+angst+"\\S-1\\M)"
412                                Legend
413                        endif
414                endif
415        endif
416       
417        // Close the file
418        if(fileID)
419                HDF5CloseFile /Z fileID
420        endif
421
422end
423
424Function LoadMetaData(fileID,loadDir,parentBase)
425        String parentBase,loadDir
426        Variable fileID
427        Variable groupID
428        SetDataFolder $(loadDir)
429        Make/O/N=52 $(loadDir + ":realsRead")
430        Make/O/T/N=11 $(loadDir + ":textRead")
431        Wave rw = $(loadDir + ":realsRead")
432        Wave/T textw = $(loadDir + ":textRead")
433        int isMultiDetector = 0, ii = 0
434       
435        // Title
436        HDF5OpenGroup /Z fileID, parentBase, groupID
437        HDF5LoadData /O/Z/N=title fileID, parentBase + "title"
438        Wave/T title = $(loadDir + ":title")
439       
440        // SASinstrument
441        String instrParent = parentBase + "sasinstrument/"
442       
443        // SASaperture
444        String apertureParent = instrParent + "sasaperture/"
445        HDF5OpenGroup /Z fileID, apertureParent, groupID
446        HDF5LoadData /O/Z/N=xg fileID, apertureParent + "x_gap"
447        Wave xg = $(loadDir + ":xg")
448       
449        // SAScollimation
450        String collimationParent = instrParent + "sascollimation/"
451        HDF5OpenGroup /Z fileID, collimationParent, groupID
452        HDF5LoadData /O/Z/N=cdis fileID, collimationParent + "distance"
453        Wave cdis = $(loadDir + ":cdis")
454       
455        // SASdetector
456        String detectorParent = instrParent + "sasdetector/"
457        HDF5OpenGroup /Z fileID, detectorParent, groupID
458        If (groupID == 0)
459                isMultiDetector = 1
460                ii = 1
461                String detectorUnformatted = "sasdetector%d/"
462                sprintf detectorParent,instrParent + detectorUnformatted,ii
463                HDF5OpenGroup /Z fileID, detectorParent, groupID
464        EndIf
465        do
466                HDF5LoadData /O/Z/N=detname fileID, detectorParent + "name"
467                HDF5LoadData /O/Z/N=sdd fileID, detectorParent + "SDD"
468                HDF5LoadData /O/Z/N=bcx fileID, detectorParent + "beam_center_x"
469                HDF5LoadData /O/Z/N=bcy fileID, detectorParent + "beam_center_y"
470                HDF5LoadData /O/Z/N=xps fileID, detectorParent + "x_pixel_size"
471                HDF5LoadData /O/Z/N=xpy fileID, detectorParent + "y_pixel_size"
472                Wave/T detname = $(loadDir + ":detname")
473                Wave sdd = $(loadDir + ":sdd")
474                Wave bcx = $(loadDir + ":bcx")
475                Wave bcy = $(loadDir + ":bcy")
476                Wave xps = $(loadDir + ":xps")
477                Wave xpy = $(loadDir + ":xpy")
478                If (isMultiDetector)
479                        ii += 1
480                        sprintf detectorParent,instrParent + detectorUnformatted,ii
481                        HDF5OpenGroup /Z fileID, detectorParent, groupID
482                Else
483                        groupID = 0
484                EndIf
485        while (groupID != 0)
486       
487        // SASsource
488        String sourceParent = instrParent + "sassource/"
489        HDF5OpenGroup /Z fileID, sourceParent, groupID
490        HDF5LoadData /O/Z/N=wvel fileID, sourceParent + "incident_wavelength"
491        HDF5LoadData /O/Z/N=wvels fileID, sourceParent + "incident_wavelength_spread"
492        Wave wvel = $(loadDir + ":wvel")
493        Wave wvels = $(loadDir + ":wvels")
494       
495        // SASsample
496        String sampleParent = parentBase + "sassample/"
497        HDF5OpenGroup /Z fileID, sampleParent, groupID
498        HDF5LoadData /O/Z/N=smplname fileID, sampleParent + "name"
499        HDF5LoadData /O/Z/N=smplthick fileID, sampleParent + "thickness"
500        HDF5LoadData /O/Z/N=smpltrans fileID, sampleParent + "transmission"
501        Wave/T smplname = $(loadDir + ":smplname")
502        Wave smplthick = $(loadDir + ":smplthick")
503        Wave smpltrans = $(loadDir + ":smpltrans")
504       
505        textw[0] = title[0]
506        textw[6] = smplname[0]
507        textw[9] = detname[0]
508        rw[4] = smplthick[0]
509        rw[5] = smpltrans[0]
510        rw[10] = xps[0]
511        rw[13] = xpy[0]
512        rw[16] = bcx[0]
513        rw[17] = bcy[0]
514        rw[18] = sdd[0]
515        rw[24] = xg[0]
516        rw[25] = cdis[0]
517        rw[26] = wvel[0]
518        rw[27] = wvels[0]
519       
520        KillWaves title,smplname,detname,smplthick,smpltrans,xps,xpy,bcx,bcy,sdd,xg,cdis,wvel,wvels
521       
522End
523
524//
525///////////////////////////////////////////////////////////////////////////
526
527
528///////////////////////////////////////////////////////////////////////////
529//
530// Generic Read/Write operations.
531
532//Needed to test whether file is NXcanSAS. The load routine will then either give an error if HDF5 XOP is not present or load the file if it is.
533Function isNXcanSAS(filestr)
534        String filestr
535       
536        Variable fileID=0,groupID=0
537        Int isHDF5File = 0
538       
539        fileID = NxCansas_OpenFile(filestr)
540        HDF5ListGroup /F/R/Type=1/Z fileID,"/"
541        Variable length = strlen(S_HDF5ListGroup)
542       
543        if (numtype(length) != 2)
544                isHDF5File = 1
545        endif
546       
547        if (fileID != 0)
548                // Close the file
549                HDF5CloseFile /Z fileID
550        endif
551       
552        return isHDF5File
553
554end
555
556//
557///////////////////////////////////////////////////////////////////////////
558
559///////////////////////////////////////////////////////////////////////////
560//
561// Methods related to NSORT
562
563Function WriteNSORTedNXcanSASFile(qw,iw,sw,firstFileName,secondFileName,thirdFileName,fourthFileName,normTo,norm12,norm23,norm34,[res])
564        Wave qw,iw,sw,res
565        String firstFileName,secondFileName,thirdFileName,fourthFileName,normTo
566        Variable norm12,norm23,norm34
567       
568        Variable err=0,refNum,numCols,dialog=1,useRes=0
569        String fullPath="",formatStr="",process
570       
571        //check each wave - else REALLY FATAL error when writing file
572        If(!(WaveExists(qw)))
573                err = 1
574                return err
575        Endif
576        If(!(WaveExists(iw)))
577                err = 1
578                return err
579        Endif
580        If(!(WaveExists(sw)))
581                err = 1
582                return err
583        Endif
584        if(WaveExists(res))
585                useRes = 1
586        endif
587       
588        NVAR/Z useTable = root:myGlobals:CombineTable:useTable
589        if(NVAR_Exists(useTable) && useTable==1)
590                SVAR str=root:myGlobals:CombineTable:SaveNameStr        //messy, but pass in as a global
591                fullPath = str
592                dialog=0
593        endif
594       
595        NewDataFolder/O/S root:Packages:NIST:NSORT
596        SetDataFolder root:Packages:NIST:NSORT
597       
598        process = CreateNSORTProcess(firstFileName,secondFileName,thirdFileName,fourthFileName,normTo,norm12,norm23,norm34)
599        Make/O/T/N=1 processNote = process
600       
601        Variable pts = numpnts(qw)
602        Make/O/N=(pts) qval = qw
603        Make/O/N=(pts) aveint = iw
604        Make/O/N=(pts) sigave = sw
605        if (useRes)
606                Make/O/N=(dimsize(res,0)) SigmaQ = res[p][0]
607                Make/O/N=(dimsize(res,0)) QBar = res[p][1]
608                Make/O/N=(dimsize(res,0)) fSubS = res[p][2]
609        Else
610                Make/O/N=(pts) SigmaQ = 0
611                Make/O/N=(pts) QBar = 0
612                Make/O/N=(pts) fSubS = 0
613        EndIf
614       
615        Make/O/T/N=11 textRead
616        textRead[6] = firstfileName
617        textRead[0] = "Combined data"
618       
619        Make/O/N=52 realsRead = 0
620       
621        WriteNxCanSAS1D("NSORT",fullpath,dialog)
622       
623End
624
625Function/T CreateNSORTProcess(firstFileName,secondFileName,thirdFileName,fourthFileName,normTo,norm12,norm23,norm34)
626        String firstFileName,secondFileName,thirdFileName,fourthFileName,normTo
627        Variable norm12,norm23,norm34
628        String process
629        String processFormat = "COMBINED FILE CREATED: %s - NSORT-ed %s\t+ %s\t+ %s\t+%s, normalized to %s, multiplicative factor 1-2 = %12.8g\t multiplicative factor 2-3 = %12.8g\t multiplicative factor 3-4 = %12.8g"
630       
631        sprintf process,processFormat,date(),firstFileName,secondFileName,thirdFileName,fourthFileName,normTo,norm12,norm23,norm34
632        return process
633End
634
635//
636///////////////////////////////////////////////////////////////////////////
Note: See TracBrowser for help on using the repository browser.