source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_IQ_Utilities.ipf @ 1073

Last change on this file since 1073 was 1073, checked in by srkline, 5 years ago

lots of changes here:
many little fixes to clean up TODO items and marke them DONE

changed the handling of the panel "gap" to split the gap evenly. Q-calculations have been re-verified with this change.

re-named the list of "bin Type" values, and added a few more choices. Streamlined how the averaging and plotting works with this list so that it can be more easily modified as different combinations of binning are envisioned. This resulted in a lot of excess code being cut out and replaced with cleaner logic. This change has also been verified to work as intended.

Attenuation is now always calculated from the table. The table also by (NEW) definition has values for the white beam (one waelength) and graphite (multiple possible wavelengths) where the wavelengths are artificially scaled (*1000) or *1e6) so that the interpolations can be done internally without the need for multiple attenuator tables.

File size: 18.1 KB
RevLine 
[984]1#pragma TextEncoding = "MacRoman"               // For details execute DisplayHelpTopic "The TextEncoding Pragma"
2#pragma rtGlobals=3             // Use modern global access method and strict wave access.
3
[1023]4
[984]5//
[1023]6// Operation does no scaling, only the basic (default) trim of the ends, concatenate, sort, and save
[1030]7// -- if data has been converted to WORK and the solid angle correction was done, then the data
[1023]8//   is per unit solid angle, and matches up - at least the simulated data does...
[1030]9//   It should match up in real VSANS data since the flux conditions are identical for
10//   all panels, only the geometry is different.
[984]11//
[999]12//
[1023]13// V_DataPlotting.ipf is where the I(q) panel is drawn and the binning is set
14//
[999]15// see the VCALC BinAllMiddlePanels() for an example of this
16// see the binning routines in VC_DetectorBinning_Utils.ipf for the details
17//
[1023]18
[999]19// TODO
[1022]20//
21// -- verify the binning for slit mode. Looks correct, but verify
22// -- DOCUMENT
23//
[999]24// x- detector "B" is currently skipped since the calibration waves are not faked
25//    when the raw data is loaded. Then the qxqyqz waves are not generated.
26//
[1022]27// x- REDO the logic here. It's a mess, and will get the calculation wrong
[999]28//
[1022]29// x- figure out the binning type (where is it set for VSANS?)
30// x- don't know, so currently VSANS binning type is HARD-WIRED
31// x- figure out when this needs to be called to (force) re-calculate I vs Q
[999]32//
[1022]33
34
[1036]35
[1038]36//
[1035]37// NOTE
38// this is the master conversion function
39// ***Use no others
40// *** When other bin types are developed, DO NOT reassign these numbers.
41//  instead, skip the old numbers and assign new ones.
[1073]42//
43// - the numbers here in the switch can be out of order - it's fine
44//
45// old modes can be removed from the string constant ksBinTypeStr(n) (in V_Initialize.ipf), but the
[1035]46// mode numbers are what many different binning, plotting, and reduction functions are
47// switching on. In the future, it may be necessary to change the key (everywhere) to a string
48// switch, but for now, stick with the numbers.
[1073]49//
50// Strconstant ksBinTypeStr = "F4-M4-B;F2-M2-B;F1-M1-B;F2-M1-B;F1-M2xTB-B;F2-M2xTB-B;SLIT-F2-M2-B;"
51//
52//
[1035]53Function V_BinTypeStr2Num(binStr)
54        String binStr
55       
56        Variable binType
57        strswitch(binStr)       // string switch
[1073]58                case "F4-M4-B":
[1035]59                        binType = 1
60                        break           // exit from switch
[1073]61                case "F2-M2-B":
[1035]62                        binType = 2
63                        break           // exit from switch
[1073]64                case "F1-M1-B":
[1035]65                        binType = 3
66                        break           // exit from switch
[1073]67                case "SLIT-F2-M2-B":
[1035]68                        binType = 4
69                        break           // exit from switch
70
[1073]71                case "F2-M1-B":
72                        binType = 5
73                        break
74                case "F1-M2xTB-B":
75                        binType = 6
76                        break
77                case "F2-M2xTB-B":
78                        binType = 7
79                        break
80                       
[1035]81                default:                        // optional default expression executed
82                        binType = 0
83                        Abort "Binning mode not found"// when no case matches
84        endswitch       
[1073]85       
[1035]86        return(binType)
87end
88
[1044]89//
90// TODO -- binType == 4 (slit mode) should never end up here
91// -- new logic in calling routines to dispatch to proper routine
92// -- AND need to write the routine for binning_SlitMode
93//
94Function V_QBinAllPanels_Circular(folderStr,binType)
[999]95        String folderStr
[1027]96        Variable binType
[999]97
98        // do the back, middle, and front separately
99       
100//      figure out the binning type (where is it set?)
[1027]101        Variable ii,delQ
[999]102        String detStr
103
[1027]104//      binType = V_GetBinningPopMode()
[1022]105
[1073]106        // set delta Q for binning (used later inside VC_fDoBinning_QxQy2D)
107        for(ii=0;ii<ItemsInList(ksDetectorListAll);ii+=1)
108                detStr = StringFromList(ii, ksDetectorListAll, ";")
109               
110                delQ = SetDeltaQ(folderStr,detStr)              // this sets (overwrites) the global value for each panel type
111        endfor
[999]112       
113
[1073]114        switch(binType)
115                case 1:
116                        VC_fDoBinning_QxQy2D(folderStr,"FL")
117                        VC_fDoBinning_QxQy2D(folderStr,"FR")
118                        VC_fDoBinning_QxQy2D(folderStr,"FT")
119                        VC_fDoBinning_QxQy2D(folderStr,"FB")
120                        VC_fDoBinning_QxQy2D(folderStr,"ML")
121                        VC_fDoBinning_QxQy2D(folderStr,"MR")
122                        VC_fDoBinning_QxQy2D(folderStr,"MT")
123                        VC_fDoBinning_QxQy2D(folderStr,"MB")                   
124                        VC_fDoBinning_QxQy2D(folderStr, "B")           
[999]125
[1073]126                        break
127                case 2:
128                        VC_fDoBinning_QxQy2D(folderStr,"FLR")
129                        VC_fDoBinning_QxQy2D(folderStr,"FTB")
130                        VC_fDoBinning_QxQy2D(folderStr,"MLR")
131                        VC_fDoBinning_QxQy2D(folderStr,"MTB")
132                        VC_fDoBinning_QxQy2D(folderStr, "B")           
[999]133
[1073]134                        break
135                case 3:
136                        VC_fDoBinning_QxQy2D(folderStr,"MLRTB")
137                        VC_fDoBinning_QxQy2D(folderStr,"FLRTB")
138                        VC_fDoBinning_QxQy2D(folderStr, "B")           
139                       
140                        break
141                case 4:                         /// this is for a tall, narrow slit mode       
142                        VC_fBinDetector_byRows(folderStr,"FL")
143                        VC_fBinDetector_byRows(folderStr,"FR")
144                        VC_fBinDetector_byRows(folderStr,"ML")
145                        VC_fBinDetector_byRows(folderStr,"MR")
146                        VC_fBinDetector_byRows(folderStr,"B")
[999]147
[1073]148                        break
149                case 5:
150                        VC_fDoBinning_QxQy2D(folderStr,"FTB")
151                        VC_fDoBinning_QxQy2D(folderStr,"FLR")
152                        VC_fDoBinning_QxQy2D(folderStr,"MLRTB")
153                        VC_fDoBinning_QxQy2D(folderStr, "B")           
[999]154               
[1073]155                        break
156                case 6:
157                        VC_fDoBinning_QxQy2D(folderStr,"FLRTB")
158                        VC_fDoBinning_QxQy2D(folderStr,"MLR")
159                        VC_fDoBinning_QxQy2D(folderStr, "B")           
[999]160               
[1073]161                        break
162                case 7:
163                        VC_fDoBinning_QxQy2D(folderStr,"FTB")
164                        VC_fDoBinning_QxQy2D(folderStr,"FLR")
165                        VC_fDoBinning_QxQy2D(folderStr,"MLR")
166                        VC_fDoBinning_QxQy2D(folderStr, "B")           
[999]167               
[1073]168                        break
169                       
170                default:
171                        Abort "Binning mode not found in V_QBinAllPanels_Circular"// when no case matches       
172        endswitch
[999]173       
174
175        return(0)
176End
177
[1027]178// concatenates and sorts the 1D data in "type" WORK folder
179// uses the current display if type==""
180//
[1039]181Function V_ConcatenateForSave(pathStr,type,tagStr,binType)
182        String pathStr,type,tagStr
[1027]183        Variable binType
184       
185// get the current display type, if null string passed in
186        SVAR curtype = root:Packages:NIST:VSANS:Globals:gCurDispType
187       
188        if(strlen(type)==0)
189                type = curType
190        endif
[999]191
[984]192// trim the data if needed
[1002]193        // remove the q=0 point from the back detector, if it's there
[1027]194        // does not need to know binType
[1002]195        V_RemoveQ0_B(type)
[984]196
197// concatenate the data sets
[1023]198// TODO x- figure out which binning was used (this is done in V_1DConcatenate())
[1002]199        // clear the old tmp waves first, if they still exist
[1039]200//      SetDataFolder $("root:Packages:NIST:VSANS:"+type)
201        SetDataFolder $(pathStr+type)
[1064]202        Killwaves/Z tmp_q,tmp_i,tmp_s,tmp_sq,tmp_qb,tmp_fs
[1002]203        setDataFolder root:
[1039]204        V_1DConcatenate(pathStr,type,tagStr,binType)
[984]205       
206// sort the data set
[1039]207        V_TmpSort1D(pathStr,type)
[984]208       
[1027]209        return(0)
210End
211
212//
[1057]213// this is only called from the button on the data panel (**not anymore**)
[1027]214// so the type is the currently displayed type, and the binning is from the panel
215//
[1039]216Function V_SimpleSave1DData(pathStr,type,tagStr,saveName)
217        String pathStr,type,tagStr,saveName
[1027]218
219//
220// get the current display type, if null string passed in
221        SVAR curtype = root:Packages:NIST:VSANS:Globals:gCurDispType
222        Variable binType = V_GetBinningPopMode()
223       
[1039]224        V_ConcatenateForSave(pathStr,curType,tagStr,binType)
[1027]225       
[984]226// write out the data set to a file
[1027]227        if(strlen(saveName)==0)
228                Execute "V_GetNameForSave()"
229                SVAR newName = root:saveName
230                saveName = newName
231        endif
232       
[1039]233        V_Write1DData(pathStr,curtype,saveName)
[984]234
[999]235End
[984]236
[1027]237
[999]238Proc V_GetNameForSave(str)
239        String str
[1027]240        String/G root:saveName=str
[984]241End
242
243
[1002]244// blindly assumes that there is only one zero at the top of the wave
245// could be more sophisticated in the future...
246Function V_RemoveQ0_B(type)
247        String type
248       
249        SetDataFolder $("root:Packages:NIST:VSANS:"+type)
250
251        WAVE/Z qBin = qBin_qxqy_B
252        WAVE/Z iBin = iBin_qxqy_B
253        WAVE/Z eBin = eBin_qxqy_B
254        WAVE/Z nBin = nBin_qxqy_B
255        WAVE/Z iBin2 = iBin2_qxqy_B
256
[1064]257        // resolution waves
258        Wave/Z sigQ = sigmaQ_qxqy_B
259        Wave/Z qBar = qBar_qxqy_B
260        Wave/Z fSubS = fSubS_qxqy_B
261
[1002]262        if(qBin[0] == 0)
[1064]263                DeletePoints 0, 1, qBin,iBin,eBin,nBin,iBin2,sigQ,qBar,fSubS
[1002]264        endif
265       
266        SetDataFolder root:
267        return(0)
268end
269
270
[984]271// concatentate data in folderStr
272//
273// TODO:
[1073]274// x- !!! Resolution waves are currently skipped - these must be added
[1051]275//
[1023]276// x- this currently ignores the binning type (one, two, etc. )
[1036]277// x- change the Concatenate call to use the waveList, to eliminate the need to declare all of the waves
[984]278// -- this currently assumes that all of the waves exist
279// -- need robust error checking for wave existence
280// -- wave names are hard-wired and their name and location may be different in the future
[1023]281// x- if different averaging options were chosen (bin type of 2, 4 etc) then
[984]282//    although waves may exist, they may not be the right ones to use. There
283//    will be a somewhat complex selection process
[1002]284// x- detector B is currently skipped
[984]285//
[1023]286// this seems like a lot of extra work to do something so simple...but it's better than a loop
[984]287//
288//  root:Packages:NIST:VSANS:RAW:iBin_qxqy_FB
[1023]289//
[1073]290// Now, the extensions needed for each binType are handled in a loop using the strings
291// defined globally for each of the numbered binTypes
292//
[1023]293// binType = 1 = one
294// binType = 2 = two
295// binType = 3 = four
296// binType = 4 = Slit Mode
[1073]297// binType = 5...
[1023]298//
[1027]299// if binType is passed in as -9999, get the binning mode from the popup
300// otherwise the value is assumed good (from a protocol)
301//
[1039]302// pathStr must have the trailing colon
303// tagStr is normally null, but is "_trim" for data to be trimmed
[1036]304//
[1039]305Function V_1DConcatenate(pathStr,folderStr,tagStr,binType)
306        String pathStr,folderStr,tagStr
[1027]307        Variable binType
[984]308       
[1073]309
[1027]310        if(binType==-9999)
311                binType = V_GetBinningPopMode()
312        endif   
[1023]313       
[1073]314        String binTypeString = V_getBinTypeString(binType)
315        if(strlen(binTypeString) == 0)
316                DoAlert 0,"binTypeString is null in V_1DConcatenate"
317                return(0)
318        endif
319       
[1039]320//      SetDataFolder $("root:Packages:NIST:VSANS:"+folderStr)
321        SetDataFolder $(pathStr+folderStr)
[1023]322
[1031]323        //kill these waves before starting, or the new concatenation will be added to the old
[1064]324        KillWaves/Z tmp_q,tmp_i,tmp_s,tmp_qb,tmp_sq,tmp_fs
[1051]325
[1073]326        String q_waveListStr=""
327        String i_waveListStr=""
328        String s_waveListStr=""
329        String sq_waveListStr=""
330        String qb_waveListStr=""
331        String fs_waveListStr=""
332       
333        Variable num,ii
334        String item=""
335       
336        //Generate string lists of the waves to be concatenated based on the
337        // binTypeString (a global string constant with the extensions)
338        //
339       
[1051]340        NVAR gIgnoreDetB = root:Packages:NIST:VSANS:Globals:gIgnoreDetB
[1073]341        if(!gIgnoreDetB)
342                q_waveListStr =  "qBin_qxqy_B" + tagStr + ";"
343                i_waveListStr =  "iBin_qxqy_B" + tagStr + ";"
344                s_waveListStr =  "eBin_qxqy_B" + tagStr + ";"
345                sq_waveListStr =  "sigmaQ_qxqy_B" + tagStr + ";"
346                qb_waveListStr =  "qBar_qxqy_B" + tagStr + ";"
347                fs_waveListStr =  "fSubS_qxqy_B" + tagStr + ";"
[1036]348        endif
349
[1073]350        num = ItemsInList(binTypeString, ";")
351        for(ii=0;ii<num;ii+=1)
352                item = StringFromList(ii, binTypeString  ,";") 
353       
354        // "B" was handled outside the loop, be sure to skip here
355                if(cmpstr(item,"B") != 0)
356                        q_waveListStr +=  "qBin_qxqy_" + item + tagStr + ";"
357                        i_waveListStr +=  "iBin_qxqy_" + item + tagStr + ";"
358                        s_waveListStr +=  "eBin_qxqy_" + item + tagStr + ";"
359                        sq_waveListStr +=  "sigmaQ_qxqy_" + item + tagStr + ";"
360                        qb_waveListStr +=  "qBar_qxqy_" + item + tagStr + ";"
361                        fs_waveListStr +=  "fSubS_qxqy_" + item + tagStr + ";" 
[1051]362                endif
[1073]363        endfor
364       
365        // concatenate each of the sets
[1036]366
[1073]367        Concatenate/NP/O q_waveListStr, tmp_q
368       
369        Concatenate/NP/O i_waveListStr, tmp_i
[1036]370               
[1073]371        Concatenate/NP/O s_waveListStr, tmp_s
[1039]372               
[1073]373        Concatenate/NP/O sq_waveListStr, tmp_sq
[1036]374
[1073]375        Concatenate/NP/O qb_waveListStr, tmp_qb
[1039]376               
[1073]377        Concatenate/NP/O fs_waveListStr, tmp_fs
378                                                                               
[1036]379
380
381// Can't kill here, since they are still needed to sort and write out!
382//      KillWaves/Z tmp_q,tmp_i,tmp_s,tmp_res0,tmp_res1,tmp_res2,tmp_res3       
383       
384        SetDataFolder root:
385       
386        return(0)               
387End
388
389// TODO:
390// -- resolution waves are ignored, since they don't exist (yet)
391// -- only a sort is done, no rescaling of data sets
392//    (it's too late now anyways, since the data was concatenated)
393//
394// see Auto_Sort() in the SANS Automation ipf for the rest of the details of
395// how to combine the resolution waves (they also need to be concatenated, which is currently not done)
396//
[1039]397Function V_TmpSort1D(pathStr,folderStr)
398        String pathStr,folderStr
[1036]399       
[1039]400        SetDataFolder $(pathStr+folderStr)
[1036]401
402        Wave qw = tmp_q
403        Wave iw = tmp_i
404        Wave sw = tmp_s
[1064]405        Wave sq = tmp_sq
406        Wave qb = tmp_qb
407        Wave fs = tmp_fs
[1036]408       
409
[1064]410        Sort qw, qw,iw,sw,sq,qb,fs
[1036]411
412
413        SetDataFolder root:
414        return(0)
415End
416
417
418//
[1042]419Proc V_Load_Data_ITX()
[1038]420        V_Load_itx("","",0,0)
421end
422
[1037]423// TODO
424// -- fill in
425// -- link somewhere?
426//
427// a function to load in the individual I(q) sets which were written out to a single
428// file, in itx format.
429//
430// The data, like other 1D data sets, is to be loaded to its own folder under root
431//
432// Then, the data sets can be plotted as VSANS data sets, depending on which data extensions are present.
433// (and color coded)
434// (and used for setting the trimming)
435// (and...)
436//
437//
438// see A_LoadOneDDataToName(fileStr,outStr,doPlot,forceOverwrite)
439//
440Function V_Load_itx(fileStr,outStr,doPlot,forceOverwrite)
441        String fileStr, outstr
442        Variable doPlot,forceOverwrite
443
444        SetDataFolder root:             //build sub-folders for each data set under root
445
446        // if no fileStr passed in, display dialog now
447        if (cmpStr(fileStr,"") == 0)
448                fileStr = DoOpenFileDialog("Select a data file to load")
449                if (cmpstr(fileStr,"") == 0)
450                        String/G root:Packages:NIST:gLastFileName = ""
451                        return(0)               //get out if no file selected
452                endif
453        endif
454
455        //Load the waves, using default waveX names
456        //if no path or file is specified for LoadWave, the default Mac open dialog will appear
457        LoadWave/O/T fileStr
458//      LoadWave/G/D/A/Q fileStr
459        String fileNamePath = S_Path+S_fileName
460//              String basestr = ParseFilePath(3,ParseFilePath(5,fileNamePath,":",0,0),":",0,0)
461
462        String basestr
463        if (!cmpstr(outstr, ""))                //Outstr = "", cmpstr returns 0
464//                      enforce a short enough name here to keep Igor objects < 31 chars
465                baseStr = ShortFileNameString(CleanupName(S_fileName,0))
466                baseStr = CleanupName(baseStr,0)                //in case the user added odd characters
467                //baseStr = CleanupName(S_fileName,0)
468        else
469                baseStr = outstr                        //for output, hopefully correct length as passed in
470        endif
471
472//              print "basestr :"+basestr
473        String fileName =  ParseFilePath(0,ParseFilePath(5,filestr,":",0,0),":",1,0)
474//              print "filename :"+filename
475       
476        Variable ii,num=ItemsinList(S_waveNames)
477       
478        if(DataFolderExists("root:"+baseStr))
479                if (!forceOverwrite)
480                        DoAlert 1,"The file "+S_filename+" has already been loaded. Do you want to load the new data file, overwriting the data in memory?"
481                        if(V_flag==2)   //user selected No, don't load the data
482                                SetDataFolder root:
483                                for(ii=0;ii<num;ii+=1)         
484                                        KillWaves $(StringFromList(ii, S_waveNames))    // kill the waves that were loaded
485                                endfor
486                                if(DataFolderExists("root:Packages:NIST"))
487                                        String/G root:Packages:NIST:gLastFileName = filename
488                                endif
489                                return(0)       //quits the macro
490                        endif
491                endif
492                SetDataFolder $("root:"+baseStr)
493        else
494                NewDataFolder/S $("root:"+baseStr)
495        endif
496       
497//                      ////overwrite the existing data, if it exists
498
499// a semicolon-delimited list of wave names loaded
500//S_waveNames
501        for(ii=0;ii<num;ii+=1)         
502                Duplicate/O $("root:"+StringFromList(ii, S_waveNames)), $(StringFromList(ii, S_waveNames))
503        endfor
504
505
506// clean up
507        SetDataFolder root:
508
509        for(ii=0;ii<num;ii+=1)         
510                KillWaves $(StringFromList(ii, S_waveNames))    // kill the waves that were loaded
511        endfor
512//                      Duplicate/O $("root:"+n0), $w0
513//                      Duplicate/O $("root:"+n1), $w1
514//                      Duplicate/O $("root:"+n2), $w2
515       
[1073]516        // no resolution matrix to make
[1037]517
518       
519        return(0)
[1038]520End
521
522
[1073]523
524// string function to select the correct string constant
525// that corresponds to the selected binType. This string constant
526// contains the list of extensions to be used for plotting, saving, etc.
[1039]527//
[1073]528// returns null string if no match
529//
530Function/S V_getBinTypeString(binType)
[1038]531        Variable binType
532       
[1073]533        String detListStr=""
[1038]534        if(binType == 1)
535                detListStr = ksBinType1
536        endif
537        if(binType == 2)
538                detListStr = ksBinType2
539        endif
540        if(binType == 3)
541                detListStr = ksBinType3
542        endif
543        if(binType == 4)
544                detListStr = ksBinType4
545        endif
[1073]546        if(binType == 5)
547                detListStr = ksBinType5
548        endif
549        if(binType == 6)
550                detListStr = ksBinType6
551        endif
552        if(binType == 7)
553                detListStr = ksBinType7
554        endif
555       
556       
557        return(detListStr)
558End
559
560// given strings of the number of points to remove, loop over the detectors
561//
562// TODO
563// -- currently uses global strings or default strings
564// -- if proper strings (non-null) are passed in, they are used, otherwise global, then default
565Function V_Trim1DDataStr(folderStr,binType,nBegStr,nEndStr)
566        String folderStr
567        Variable binType
568        String nBegStr,nEndStr
569       
570        String detListStr=""
571
572        detListStr = V_getBinTypeString(binType)                //the list of extensions
[1038]573        if(strlen(detListStr)==0)
574                return(0)
575        endif
[1039]576
[1038]577       
[1039]578        //use global, then default values if null string passed in
[1038]579        if(strlen(nBegStr)==0)
[1039]580                SVAR/Z gBegPtsStr=root:Packages:NIST:VSANS:Globals:Protocols:gBegPtsStr
581                SVAR/Z gEndPtsStr=root:Packages:NIST:VSANS:Globals:Protocols:gEndPtsStr
582       
583                if(!SVAR_exists(gBegPtsStr) || !SVAR_exists(gEndPtsStr) || strlen(gBegPtsStr)==0 || strlen(gEndPtsStr)==0)
584                        nBegStr = ksBinTrimBegDefault
585                        nEndStr = ksBinTrimEndDefault
586                else
587                        nBegStr = gBegPtsStr
588                        nEndStr = gEndPtsStr
589                endif
[1038]590        endif   
591
592        Variable num, ii,nBeg,nEnd
593        String item,detstr
594       
595        num = ItemsInList(detListStr)
596        for(ii=0;ii<num;ii+=1)
597                detStr = StringFromList(ii, detListStr)
598                nBeg = NumberByKey(detStr, nBegStr,"=",";")
599                nEnd = NumberByKey(detStr, nEndStr,"=",";")
600                V_TrimOneSet(folderStr,detStr,nBeg,nEnd)
601        endfor
602
603        return(0)
604End
605
606// TODO
[1064]607// x- make this resolution-aware
[1038]608//
609Function V_TrimOneSet(folderStr,detStr,nBeg,nEnd)
610        String folderStr,detStr
611        Variable nBeg,nEnd
612       
613        SetDataFolder $("root:Packages:NIST:VSANS:"+folderStr)
614
615        Printf "%d points removed from beginning, %d points from the end  of %s \r",nbeg,nend,detStr
616
617// TODO
618// for each binType block:
619// --declare the waves
620// --make a copy of the waves??
621//      //--Break out resolution wave into separate waves
622// --delete the beginning points from everything
623        // --trim off the last nEnd points from everything
624//      --DeletePoints num-nEnd,nEnd, qw,iw,sw
625//      // --delete all points where the shadow is < 0.98
626////--Put resolution contents back???
627
628                Wave/Z qw = $("qBin_qxqy_"+detStr)
629                Wave/Z iw = $("iBin_qxqy_"+detStr)
630                Wave/Z ew = $("eBin_qxqy_"+detStr)
[1064]631                // resolution waves
632                Wave/Z sigQ = $("sigmaQ_qxqy_"+detStr)
633                Wave/Z qBar = $("qBar_qxqy_"+detStr)
634                Wave/Z fSubS = $("fSubS_qxqy_"+detStr)
[1038]635                       
[1064]636                DeletePoints 0,nBeg, qw,iw,ew,sigQ,qBar,fSubS
[1038]637
638                Variable npt
639                npt = numpnts(qw)
[1064]640                DeletePoints npt-nEnd,nEnd, qw,iw,ew,sigQ,qBar,fSubS
[1038]641       
642        return(0)
[1064]643End
644
645
646//
647// returns 1 if the val is non-negative, other value
648// indicates that the resoution data is USANS data.
649//
650// TODO:
651// -- this DUPLICATES a same-named SANS procedure, so there could be a clash at some point
652// -- bigger issue - I'll need a better way to identify and load the different resolution
653//              conditions with VSANS
654//
655//
656Function isSANSResolution(val)
657        Variable val
658       
659        if(val >= 0)
660                return(1)
661        else
662                return(0)
663        endif
664End
665
666
Note: See TracBrowser for help on using the repository browser.