source: trunk/User Procedures/Irena/IR3_SimpleFits.ipf @ 857

Last change on this file since 857 was 857, checked in by ilavsky, 21 months ago

Working on MultiDataFit? tool

  • Property svn:eol-style set to native
File size: 44.4 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method and strict wave access.
2#pragma version=1.1
3constant IR3JversionNumber = 1                  //Data merging panel version number
4
5//*************************************************************************\
6//* Copyright (c) 2005 - 2019, Argonne National Laboratory
7//* This file is distributed subject to a Software License Agreement found
8//* in the file LICENSE that is included with this distribution.
9//*************************************************************************/
10
11//1.1 combined this ipf with "Simple fits models"
12//1.0 Simple Fits tool first test version
13
14
15
16///******************************************************************************************
17///******************************************************************************************
18///******************************************************************************************
19///******************************************************************************************
20Function IR3J_MultiSaPlotFit()
21
22        IN2G_CheckScreenSize("width",1200)
23        DoWIndow IR3J_MultiSaPlotFitPanel
24        if(V_Flag)
25                DoWindow/F IR3J_MultiSaPlotFitPanel
26                //DoWindow/K IR3J_MultiSaPlotFitPanel
27                //Execute("IR3J_MultiSaPlotFitPanel()")
28        else
29                IR3J_InitMultiSaPlotFit()
30                IR3J_MultiSaPlotFitPanelFnct()
31//              setWIndow IR3J_MultiSaPlotFitPanel, hook(CursorMoved)=IR3D_PanelHookFunction
32        endif
33//      UpdatePanelVersionNumber("IR3D_DataMergePanel", IR3DversionNumber)
34//      IR3D_UpdateListOfAvailFiles(1)
35//      IR3D_UpdateListOfAvailFiles(2)
36//      IR3D_RebuildListboxTables()
37end
38
39//************************************************************************************************************
40//************************************************************************************************************
41//************************************************************************************************************
42//************************************************************************************************************
43Function IR3J_MultiSaPlotFitPanelFnct()
44        PauseUpdate; Silent 1           // building window...
45        NewPanel /K=1 /W=(2.25,43.25,1195,800) as "Simple Fits"
46        DoWIndow/C IR3J_MultiSaPlotFitPanel
47        TitleBox MainTitle title="Multi Sample plot & fit",pos={200,2},frame=0,fstyle=3, fixedSize=1,font= "Times New Roman", size={360,30},fSize=22,fColor=(0,0,52224)
48//      TitleBox FakeLine1 title=" ",fixedSize=1,size={330,3},pos={16,148},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
49//      TitleBox FakeLine2 title=" ",fixedSize=1,size={330,3},pos={16,428},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
50//      TitleBox FakeLine3 title=" ",fixedSize=1,size={330,3},pos={16,512},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
51//      TitleBox FakeLine4 title=" ",fixedSize=1,size={330,3},pos={16,555},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
52//      TitleBox Info1 title="Modify data 1                            Modify Data 2",pos={36,325},frame=0,fstyle=1, fixedSize=1,size={350,20},fSize=12
53//      TitleBox FakeLine5 title=" ",fixedSize=1,size={330,3},pos={16,300},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
54        string UserDataTypes=""
55        string UserNameString=""
56        string XUserLookup=""
57        string EUserLookup=""
58        IR2C_AddDataControls("Irena:MultiSaPlotFit","IR3J_MultiSaPlotFitPanel","DSM_Int;M_DSM_Int;SMR_Int;M_SMR_Int;","AllCurrentlyAllowedTypes",UserDataTypes,UserNameString,XUserLookup,EUserLookup, 0,1, DoNotAddControls=1)
59
60
61        DrawText 60,25,"Data selection"
62        Checkbox UseIndra2Data, pos={10,30},size={76,14},title="USAXS", proc=IR3J_LinearFitsCheckProc, variable=root:Packages:Irena:MultiSaPlotFit:UseIndra2Data
63        checkbox UseQRSData, pos={120,30}, title="QRS(QIS)", size={76,14},proc=IR3J_LinearFitsCheckProc, variable=root:Packages:Irena:MultiSaPlotFit:UseQRSdata
64        PopupMenu StartFolderSelection,pos={10,50},size={180,15},proc=IR3J_PopMenuProc,title="Start fldr"
65        SVAR DataStartFolder = root:Packages:Irena:MultiSaPlotFit:DataStartFolder
66        PopupMenu StartFolderSelection,mode=1,popvalue=DataStartFolder,value= #"\"root:;\"+IR2S_GenStringOfFolders2(root:Packages:Irena:MultiSaPlotFit:UseIndra2Data, root:Packages:Irena:MultiSaPlotFit:UseQRSdata,2,1)"
67        SetVariable FolderNameMatchString,pos={10,75},size={210,15}, proc=IR3J_SetVarProc,title="Folder Match (RegEx)"
68        Setvariable FolderNameMatchString,fSize=10,fStyle=2, variable=root:Packages:Irena:MultiSaPlotFit:DataMatchString
69        PopupMenu SortFolders,pos={10,100},size={180,20},fStyle=2,proc=IR3J_PopMenuProc,title="Sort Folders"
70        SVAR FolderSortString = root:Packages:Irena:MultiSaPlotFit:FolderSortString
71        PopupMenu SortFolders,mode=1,popvalue=FolderSortString,value=#"root:Packages:Irena:MultiSaPlotFit:FolderSortStringAll"
72
73        PopupMenu SubTypeData,pos={10,120},size={180,20},fStyle=2,proc=IR3J_PopMenuProc,title="Sub-type Data"
74        SVAR DataSubType = root:Packages:Irena:MultiSaPlotFit:DataSubType
75        PopupMenu SubTypeData,mode=1,popvalue=DataSubType,value= #""
76
77
78        ListBox DataFolderSelection,pos={4,165},size={250,500}, mode=10
79        ListBox DataFolderSelection,listWave=root:Packages:Irena:MultiSaPlotFit:ListOfAvailableData
80        ListBox DataFolderSelection,selWave=root:Packages:Irena:MultiSaPlotFit:SelectionOfAvailableData
81        ListBox DataFolderSelection,proc=IR3J_LinFitsListBoxProc
82
83
84        //Plotting controls...
85       
86        Button PlotData,pos={280,180},size={100,20}, proc=noproc,title="Plot Selected", help={"Plot selected data"}
87
88
89        //this is for fits, for now Guinier. Move to tab as needed
90        //      ListOfVariables+="DataBackground;"
91        //      ListOfVariables+="Guinier_Rg;Guinier_I0;"
92        //      ListOfVariables+="ProcessManually;ProcessSequentially;OverwriteExistingData;AutosaveAfterProcessing;"
93        //      ListOfVariables+="DataQEnd;DataQstart;"
94        //              SetVariable DataQEnd,pos={280,90},size={200,15}, proc=IR3D_MergeDataSetVarProc,title="Fit Q max      ",bodyWidth=150
95        //              Setvariable DataQEnd, variable=root:Packages:Irena:MultiSaPlotFit:DataQEnd, limits={-inf,inf,0}
96        //              SetVariable DataQstart,pos={280,110},size={200,15}, proc=IR3D_MergeDataSetVarProc,title="Fit Q start      ",bodyWidth=150
97        //              Setvariable DataQstart, variable=root:Packages:Irena:MultiSaPlotFit:DataQstart, limits={-inf,inf,0}
98        //              SetVariable DataBackground,pos={280,130},size={200,15}, noproc,title="Background",bodyWidth=150
99        //              Setvariable DataBackground, variable=root:Packages:Irena:MultiSaPlotFit:DataBackground, limits={-inf,inf,0}
100        //     
101        //              PopupMenu SimpleModel,pos={280,175},size={180,20},fStyle=2,proc=IR3J_PopMenuProc,title="Model to fit : "
102        //              PopupMenu SimpleModel,mode=1,popvalue=root:Packages:Irena:MultiSaPlotFit:ListOfSimpleModels,value= root:Packages:Irena:MultiSaPlotFit:SimpleModel
103        //     
104        //              SetVariable Guinier_Rg,pos={280,220},size={200,15}, proc=IR3D_MergeDataSetVarProc,title="Guinier  Rg    ",bodyWidth=150
105        //              Setvariable Guinier_Rg, variable=root:Packages:Irena:MultiSaPlotFit:Guinier_Rg, limits={-inf,inf,0}
106        //     
107        //              SetVariable Guinier_I0,pos={280,200},size={200,15}, proc=IR3D_MergeDataSetVarProc,title="Guinier I0    ",bodyWidth=150
108        //              Setvariable Guinier_I0, variable=root:Packages:Irena:MultiSaPlotFit:Guinier_I0, limits={-inf,inf,0}
109
110
111//      Button ProcessSaveData, pos={490,135}, size={20,500}, title="S\rA\rV\rE\r\rD\rA\rT\rA", proc=IR3D_MergeButtonProc, help={"Saves data which were automtaticaly processed already. "}, labelBack=(65535,60076,49151)
112//      //TextBox/C/N=text1/O=90/A=MC "Save Data", TextBox/C/N=text1/A=MC "S\rA\rV\rE\r\rD\rA\rT\rA"
113//
114//      Checkbox ProcessTest, pos={520,30},size={76,14},title="Test mode", proc=IR3D_DatamergeCheckProc, variable=root:Packages:Irena:SASDataMerging:ProcessTest
115//      Checkbox ProcessMerge, pos={520,50},size={76,14},title="Merge mode", proc=IR3D_DatamergeCheckProc, variable=root:Packages:Irena:SASDataMerging:ProcessMerge
116//      Checkbox ProcessMerge2, pos={520,70},size={76,14},title="Merge 2 mode", proc=IR3D_DatamergeCheckProc, variable=root:Packages:Irena:SASDataMerging:ProcessMerge2
117//
118//      Checkbox ProcessManually, pos={650,30},size={76,14},title="Process individually", proc=IR3D_DatamergeCheckProc, variable=root:Packages:Irena:SASDataMerging:ProcessManually
119//      Checkbox ProcessSequentially, pos={650,50},size={76,14},title="Process as sequence", proc=IR3D_DatamergeCheckProc, variable=root:Packages:Irena:SASDataMerging:ProcessSequentially
120//
121//      Checkbox AutosaveAfterProcessing, pos={780,30},size={76,14},title="Save Immediately", proc=IR3D_DatamergeCheckProc, variable=root:Packages:Irena:SASDataMerging:AutosaveAfterProcessing, disable=!root:Packages:Irena:SASDataMerging:ProcessManually
122//      Checkbox OverwriteExistingData, pos={780,50},size={76,14},title="Overwrite existing data", proc=IR3D_DatamergeCheckProc, variable=root:Packages:Irena:SASDataMerging:OverwriteExistingData
123//      TitleBox SavedDataMessage title="",fixedSize=1,size={100,17}, pos={780,70}, variable= root:Packages:Irena:SASDataMerging:SavedDataMessage
124//      TitleBox SavedDataMessage help={"Are the data saved?"}, fColor=(65535,16385,16385), frame=0, fSize=12,fstyle=1
125//
126//      TitleBox UserMessage title="",fixedSize=1,size={470,20}, pos={480,90}, variable= root:Packages:Irena:SASDataMerging:UserMessageString
127//      TitleBox UserMessage help={"This is what will happen"}
128//
129//             
130//      Button AutoScale,pos={520,117},size={100,17}, proc=IR3D_MergeButtonProc,title="Test AutoScale", help={"Autoscales. Set cursors on data overlap and the data 2 will be scaled to Data 1 using integral intensity"}, disable=!root:Packages:Irena:SASDataMerging:ProcessTest
131//      Button MergeData,pos={640,117},size={100,17}, proc=IR3D_MergeButtonProc,title="Test Merge", help={"Scales data 2 to data 1 and sets background for data 1 for merging. Sets checkboxes and trims. Saves data also"}, disable=!root:Packages:Irena:SASDataMerging:ProcessTest
132//      Button MergeData2,pos={760,117},size={100,17}, proc=IR3D_MergeButtonProc,title="Test Merge 2", help={"Scales data 2 to data 1, optimizes Q shift for data 2 and sets background for data 1 for merging. Saves data also"}, disable=!root:Packages:Irena:SASDataMerging:ProcessTest
133
134        Display /W=(521,10,1183,340) /HOST=# /N=LogLogDataDisplay
135        SetActiveSubwindow ##
136        Display /W=(521,350,1183,410) /HOST=# /N=ResidualDataDisplay
137        SetActiveSubwindow ##
138        Display /W=(521,420,1183,750) /HOST=# /N=LinearizedDataDisplay
139        SetActiveSubwindow ##
140
141//      SetVariable DataFolderName1,pos={550,625},size={510,15}, noproc,variable=root:Packages:Irena:SASDataMerging:DataFolderName1, title="Data 1:       ", disable=2
142//      SetVariable DataFolderName2,pos={550,642},size={510,15}, noproc,variable=root:Packages:Irena:SASDataMerging:DataFolderName2, title="Data 2:       ", disable=2
143//      SetVariable NewDataFolderName,pos={550,659},size={510,15}, noproc,variable=root:Packages:Irena:SASDataMerging:NewDataFolderName, title="Merged Data: "
144
145        DrawText 4,678,"Double click to add data to graph."
146        DrawText 4,695,"Shift-click to select range of data."
147        DrawText 4,710,"Ctrl/Cmd-click to select one data set."
148        DrawText 4,725,"Regex for not contain: ^((?!string).)*$"
149        DrawText 4,740,"Regex for contain:  string"
150        DrawText 4,755,"Regex for case independent contain:  (?i)string"
151       
152        IR3J_FixPanelControls()
153end
154//**********************************************************************************************************
155//**********************************************************************************************************
156//**********************************************************************************************************
157Function IR3J_FixPanelControls()
158
159        NVAR UseIndra2Data = root:Packages:Irena:MultiSaPlotFit:UseIndra2Data
160        NVAR UseQRSData=root:Packages:Irena:MultiSaPlotFit:UseQRSdata
161        SVAR DataSubType = root:Packages:Irena:MultiSaPlotFit:DataSubType
162        SVAR DataSubTypeResultsList=root:Packages:Irena:MultiSaPlotFit:DataSubTypeResultsList
163        SVAR DataSubTypeUSAXSList = root:Packages:Irena:MultiSaPlotFit:DataSubTypeUSAXSList
164        if(UseIndra2Data)
165                        PopupMenu SubTypeData, disable =0
166                        PopupMenu SubTypeData,mode=1,popvalue=DataSubType,value=#"root:Packages:Irena:MultiSaPlotFit:DataSubTypeUSAXSList"
167        else
168                        PopupMenu SubTypeData,mode=1,popvalue=DataSubType,value= ""
169                        PopupMenu SubTypeData, disable=1
170        endif
171end
172
173//**********************************************************************************************************
174//**********************************************************************************************************
175//**********************************************************************************************************
176
177Function IR3J_InitMultiSaPlotFit()     
178
179
180        string oldDf=GetDataFolder(1)
181        string ListOfVariables
182        string ListOfStrings
183        variable i
184               
185        if (!DataFolderExists("root:Packages:Irena:MultiSaPlotFit"))            //create folder
186                NewDataFolder/O root:Packages
187                NewDataFolder/O root:Packages:Irena
188                NewDataFolder/O root:Packages:Irena:MultiSaPlotFit
189        endif
190        SetDataFolder root:Packages:Irena:MultiSaPlotFit                                        //go into the folder
191
192        //here define the lists of variables and strings needed, separate names by ;...
193        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;dQWavename;DataUnits;"
194        ListOfStrings+="DataStartFolder;DataMatchString;FolderSortString;FolderSortStringAll;"
195        ListOfStrings+="UserMessageString;SavedDataMessage;"
196        ListOfStrings+="SimpleModel;ListOfSimpleModels;"
197        ListOfStrings+="DataSubTypeUSAXSList;DataSubTypeResultsList;DataSubType;"
198
199        ListOfVariables="UseIndra2Data1;UseQRSdata1;"
200        ListOfVariables+="DataBackground;"
201        ListOfVariables+="Guinier_Rg;Guinier_I0;"
202        ListOfVariables+="ProcessManually;ProcessSequentially;OverwriteExistingData;AutosaveAfterProcessing;"
203        ListOfVariables+="DataQEnd;DataQstart;"
204
205        //and here we create them
206        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
207                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
208        endfor         
209                                                               
210        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
211                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
212        endfor 
213
214        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;dQWavename;"
215        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
216                SVAR teststr=$(StringFromList(i,ListOfStrings))
217                teststr =""
218        endfor         
219        ListOfStrings="DataMatchString;FolderSortString;FolderSortStringAll;"
220        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
221                SVAR teststr=$(StringFromList(i,ListOfStrings))
222                if(strlen(teststr)<1)
223                        teststr =""
224                endif
225        endfor         
226        ListOfStrings="DataStartFolder;"
227        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
228                SVAR teststr=$(StringFromList(i,ListOfStrings))
229                if(strlen(teststr)<1)
230                        teststr ="root:"
231                endif
232        endfor         
233        SVAR ListOfSimpleModels
234        ListOfSimpleModels="Guinier;"
235        SVAR FolderSortStringAll
236        FolderSortStringAll = "Alphabetical;Reverse Alphabetical;_xyz;_xyz.ext;Reverse _xyz;Reverse _xyz.ext;Sxyz_;Reverse Sxyz_;_xyzmin;_xyzC;_xyzpct;_xyz_000;Reverse _xyz_000;"
237        SVAR SimpleModel
238        if(strlen(SimpleModel)<1)
239                SimpleModel="Guinier"
240        endif
241        SVAR DataSubTypeUSAXSList
242        DataSubTypeUSAXSList="DSM_Int;SMR_Int;R_Int;BL_R_Int;USAXS_PD;Monitor;"
243        SVAR DataSubTypeResultsList
244        DataSubTypeResultsList="Size"
245        SVAR DataSubType
246        DataSubType="DSM_Int"
247
248
249//      NVAR OverwriteExistingData
250//      NVAR AutosaveAfterProcessing
251//      OverwriteExistingData=1
252//      AutosaveAfterProcessing=1
253//      if(ProcessTest)
254//              AutosaveAfterProcessing=0
255//      endif
256
257        Make/O/T/N=(0) ListOfAvailableData
258        Make/O/N=(0) SelectionOfAvailableData
259        SetDataFolder oldDf
260
261end
262//**************************************************************************************
263//**************************************************************************************
264//**************************************************************************************
265
266//*****************************************************************************************************************
267//*****************************************************************************************************************
268//**************************************************************************************
269//**************************************************************************************
270
271Function IR3J_LinearFitsCheckProc(cba) : CheckBoxControl
272        STRUCT WMCheckboxAction &cba
273
274        switch( cba.eventCode )
275                case 2: // mouse up
276                        Variable checked = cba.checked
277                        NVAR UseIndra2Data =  root:Packages:Irena:MultiSaPlotFit:UseIndra2Data
278                        NVAR UseQRSData =  root:Packages:Irena:MultiSaPlotFit:UseQRSData
279                        SVAR DataStartFolder = root:Packages:Irena:MultiSaPlotFit:DataStartFolder
280//                      SVAR UserMessageString=root:Packages:Irena:SASDataMerging:UserMessageString
281//                      NVAR ProcessManually =root:Packages:Irena:SASDataMerging:ProcessManually
282//                      NVAR ProcessSequentially=root:Packages:Irena:SASDataMerging:ProcessSequentially
283//                      NVAR OverwriteExistingData=root:Packages:Irena:SASDataMerging:OverwriteExistingData
284//                      NVAR AutosaveAfterProcessing=root:Packages:Irena:SASDataMerging:AutosaveAfterProcessing
285//                      Checkbox AutosaveAfterProcessing, win=IR3D_DataMergePanel, disable=0
286//                      Checkbox ProcessSequentially, win=IR3D_DataMergePanel, disable=0
287                        if(stringmatch(cba.ctrlName,"UseIndra2Data"))
288                                if(checked)
289                                        UseQRSData = 0
290                                        IR3J_FixPanelControls()
291                                endif
292                        endif
293                        if(stringmatch(cba.ctrlName,"UseQRSData"))
294                                if(checked)
295                                        UseIndra2Data = 0
296                                        IR3J_FixPanelControls()
297                                endif
298                        endif
299                        if(stringmatch(cba.ctrlName,"UseQRSData")||stringmatch(cba.ctrlName,"UseIndra2Data"))
300                                DataStartFolder = "root:"
301                                PopupMenu StartFolderSelection,win=IR3J_MultiSaPlotFitPanel, mode=1,popvalue="root:"
302                                IR3J_UpdateListOfAvailFiles()
303                        endif
304//                      Checkbox AutosaveAfterProcessing, win=IR3D_DataMergePanel, disable=0
305//                      UserMessageString = ""
306//                      if(stringmatch(cba.ctrlName,"ProcessManually"))
307//                              if(checked)
308//                                      ProcessSequentially = 0
309//                              endif
310//                      endif
311//                      if(stringmatch(cba.ctrlName,"ProcessSequentially"))
312//                              if(checked)
313//                                      ProcessManually = 0
314//                                      ProcessTest = 0
315//                                      AutosaveAfterProcessing = 1
316//                                      if(ProcessTest+ProcessMerge+ProcessMerge2!=1)
317//                                              ProcessMerge2=1
318//                                              ProcessMerge =0
319//                                      endif
320//                                      //Checkbox AutosaveAfterProcessing, win=IR3D_DataMergePanel, disable=1
321//                              endif
322//                      endif
323//                      if(stringmatch(cba.ctrlName,"ProcessTest"))
324//                              if(checked)
325//                                      ProcessMerge = 0
326//                                      ProcessMerge2 = 0
327//                                      AutosaveAfterProcessing = 0
328//                                      ProcessManually = 1
329//                                      ProcessSequentially = 0
330//                              endif
331//                      endif
332//                      if(stringmatch(cba.ctrlName,"ProcessMerge"))
333//                              if(checked)
334//                                      ProcessTest = 0
335//                                      ProcessMerge2 = 0
336//                                      UserMessageString += "Using Merge. "
337//                              endif
338//                      endif
339//                      if(stringmatch(cba.ctrlName,"ProcessMerge2"))
340//                              if(checked)
341//                                      ProcessMerge = 0
342//                                      ProcessTest = 0
343//                                      UserMessageString += "Using Merge2. "
344//                              endif
345//                      endif
346//      //              if(stringmatch(cba.ctrlName,"ProcessMerge2")||stringmatch(cba.ctrlName,"ProcessMerge")||stringmatch(cba.ctrlName,"ProcessTest"))
347////                    endif
348//                      IR3D_SetGUIControls()
349                       
350                        break
351                case -1: // control being killed
352                        break
353        endswitch
354
355        return 0
356End
357//**************************************************************************************
358//**************************************************************************************
359//**************************************************************************************
360//**************************************************************************************
361//**************************************************************************************
362Function IR3J_UpdateListOfAvailFiles()
363
364
365        string OldDF=GetDataFolder(1)
366        setDataFolder root:Packages:Irena:MultiSaPlotFit
367       
368        NVAR UseIndra2Data=root:Packages:Irena:MultiSaPlotFit:UseIndra2Data
369        NVAR UseQRSdata=root:Packages:Irena:MultiSaPlotFit:UseQRSData
370        SVAR StartFolderName=root:Packages:Irena:MultiSaPlotFit:DataStartFolder
371        SVAR DataMatchString= root:Packages:Irena:MultiSaPlotFit:DataMatchString
372        string LStartFolder, FolderContent
373        if(stringmatch(StartFolderName,"---"))
374                LStartFolder="root:"
375        else
376                LStartFolder = StartFolderName
377        endif
378        string CurrentFolders=IR3D_GenStringOfFolders(LStartFolder,UseIndra2Data, UseQRSData, 2,0,DataMatchString)
379
380        Wave/T ListOfAvailableData=root:Packages:Irena:MultiSaPlotFit:ListOfAvailableData
381        Wave SelectionOfAvailableData=root:Packages:Irena:MultiSaPlotFit:SelectionOfAvailableData
382        variable i, j, match
383        string TempStr, FolderCont
384
385               
386        Redimension/N=(ItemsInList(CurrentFolders , ";")) ListOfAvailableData, SelectionOfAvailableData
387        j=0
388        For(i=0;i<ItemsInList(CurrentFolders , ";");i+=1)
389                //TempStr = RemoveFromList("USAXS",RemoveFromList("root",StringFromList(i, CurrentFolders , ";"),":"),":")
390                TempStr = ReplaceString(LStartFolder, StringFromList(i, CurrentFolders , ";"),"")
391                if(strlen(TempStr)>0)
392                        ListOfAvailableData[j] = tempStr
393                        j+=1
394                endif
395        endfor
396        if(j<ItemsInList(CurrentFolders , ";"))
397                DeletePoints j, numpnts(ListOfAvailableData)-j, ListOfAvailableData, SelectionOfAvailableData
398        endif
399        SelectionOfAvailableData = 0
400        IR3J_SortListOfAvailableFldrs()
401        setDataFolder OldDF
402end
403
404
405//**************************************************************************************
406//**************************************************************************************
407//**************************************************************************************
408//**************************************************************************************
409//**************************************************************************************
410//**************************************************************************************
411//**************************************************************************************
412//**************************************************************************************
413Function IR3J_SortListOfAvailableFldrs()
414       
415        SVAR FolderSortString=root:Packages:Irena:MultiSaPlotFit:FolderSortString
416        Wave/T ListOfAvailableData=root:Packages:Irena:MultiSaPlotFit:ListOfAvailableData
417        Wave SelectionOfAvailableData=root:Packages:Irena:MultiSaPlotFit:SelectionOfAvailableData
418        if(numpnts(ListOfAvailableData)<2)
419                return 0
420        endif
421        Duplicate/Free SelectionOfAvailableData, TempWv
422        variable i, InfoLoc, j=0
423        variable DIDNotFindInfo
424        DIDNotFindInfo =0
425        string tempstr
426        SelectionOfAvailableData=0
427        if(stringMatch(FolderSortString,"---"))
428                //nothing to do
429        elseif(stringMatch(FolderSortString,"Alphabetical"))
430                Sort /A ListOfAvailableData, ListOfAvailableData
431        elseif(stringMatch(FolderSortString,"Reverse Alphabetical"))
432                Sort /A /R ListOfAvailableData, ListOfAvailableData
433        elseif(stringMatch(FolderSortString,"_xyz"))
434                For(i=0;i<numpnts(TempWv);i+=1)
435                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-1, ListOfAvailableData[i]  , "_"))
436                endfor
437                Sort TempWv, ListOfAvailableData
438        elseif(stringMatch(FolderSortString,"Sxyz_"))
439                For(i=0;i<numpnts(TempWv);i+=1)
440                        TempWv[i] = str2num(ReplaceString("S", StringFromList(0, ListOfAvailableData[i], "_"), ""))
441                endfor
442                Sort TempWv, ListOfAvailableData
443        elseif(stringMatch(FolderSortString,"Reverse Sxyz_"))
444                For(i=0;i<numpnts(TempWv);i+=1)
445                        TempWv[i] = str2num(ReplaceString("S", StringFromList(0, ListOfAvailableData[i], "_"), ""))
446                endfor
447                Sort/R TempWv, ListOfAvailableData
448        elseif(stringMatch(FolderSortString,"_xyzmin"))
449                Do
450                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
451                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*min" ))
452                                        InfoLoc = i
453                                        break
454                                endif
455                        endfor
456                        j+=1
457                        if(j>(numpnts(ListOfAvailableData)-1))
458                                DIDNotFindInfo=1
459                                break
460                        endif
461                while (InfoLoc<1)
462                if(DIDNotFindInfo)
463                        DoALert /T="Information not found" 0, "Cannot find location of _xyzmin information, sorting alphabetically"
464                        Sort /A ListOfAvailableData, ListOfAvailableData
465                else
466                        For(i=0;i<numpnts(TempWv);i+=1)
467                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*min*" ))
468                                        TempWv[i] = str2num(ReplaceString("min", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
469                                else    //data not found
470                                        TempWv[i] = inf
471                                endif
472                        endfor
473                        Sort TempWv, ListOfAvailableData
474                endif
475        elseif(stringMatch(FolderSortString,"_xyzpct"))
476                Do
477                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
478                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*pct" ))
479                                        InfoLoc = i
480                                        break
481                                endif
482                        endfor
483                        j+=1
484                        if(j>(numpnts(ListOfAvailableData)-1))
485                                DIDNotFindInfo=1
486                                break
487                        endif
488                while (InfoLoc<1)
489                if(DIDNotFindInfo)
490                        DoAlert/T="Information not found" 0, "Cannot find location of _xyzpct information, sorting alphabetically"
491                        Sort /A ListOfAvailableData, ListOfAvailableData
492                else
493                        For(i=0;i<numpnts(TempWv);i+=1)
494                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*pct*" ))
495                                        TempWv[i] = str2num(ReplaceString("pct", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
496                                else    //data not found
497                                        TempWv[i] = inf
498                                endif
499                        endfor
500                        Sort TempWv, ListOfAvailableData
501                endif
502        elseif(stringMatch(FolderSortString,"_xyzC"))
503                Do
504                        For(i=0;i<ItemsInList(ListOfAvailableData[j] , "_");i+=1)
505                                if(StringMatch(ReplaceString(":", StringFromList(i, ListOfAvailableData[j], "_"),""), "*C" ))
506                                        InfoLoc = i
507                                        break
508                                endif
509                        endfor
510                        j+=1
511                        if(j>(numpnts(ListOfAvailableData)-1))
512                                DIDNotFindInfo=1
513                                break
514                        endif
515                while (InfoLoc<1)
516                if(DIDNotFindInfo)
517                        DoAlert /T="Information not found" 0, "Cannot find location of _xyzC information, sorting alphabetically"
518                        Sort /A ListOfAvailableData, ListOfAvailableData
519                else
520                        For(i=0;i<numpnts(TempWv);i+=1)
521                                if(StringMatch(StringFromList(InfoLoc, ListOfAvailableData[i], "_"), "*C*" ))
522                                        TempWv[i] = str2num(ReplaceString("C", StringFromList(InfoLoc, ListOfAvailableData[i], "_"), ""))
523                                else    //data not found
524                                        TempWv[i] = inf
525                                endif
526                        endfor
527                        Sort TempWv, ListOfAvailableData
528                endif
529        elseif(stringMatch(FolderSortString,"Reverse _xyz"))
530                For(i=0;i<numpnts(TempWv);i+=1)
531                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-1, ListOfAvailableData[i]  , "_"))
532                endfor
533                Sort /R  TempWv, ListOfAvailableData
534        elseif(stringMatch(FolderSortString,"_xyz.ext"))
535                For(i=0;i<numpnts(TempWv);i+=1)
536                        tempstr = StringFromList(ItemsInList(ListOfAvailableData[i]  , ".")-2, ListOfAvailableData[i]  , ".")
537                        TempWv[i] = str2num(StringFromList(ItemsInList(tempstr , "_")-1, tempstr , "_"))
538                endfor
539                Sort TempWv, ListOfAvailableData
540        elseif(stringMatch(FolderSortString,"Reverse _xyz.ext"))
541                For(i=0;i<numpnts(TempWv);i+=1)
542                        tempstr = StringFromList(ItemsInList(ListOfAvailableData[i]  , ".")-2, ListOfAvailableData[i]  , ".")
543                        TempWv[i] = str2num(StringFromList(ItemsInList(tempstr , "_")-1, tempstr , "_"))
544                endfor
545                Sort /R  TempWv, ListOfAvailableData
546        elseif(stringMatch(FolderSortString,"_xyz_000"))
547                For(i=0;i<numpnts(TempWv);i+=1)
548                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-2, ListOfAvailableData[i]  , "_"))
549                endfor
550                Sort TempWv, ListOfAvailableData
551        elseif(stringMatch(FolderSortString,"Reverse _xyz_000"))
552                For(i=0;i<numpnts(TempWv);i+=1)
553                        TempWv[i] = str2num(StringFromList(ItemsInList(ListOfAvailableData[i]  , "_")-2, ListOfAvailableData[i]  , "_"))
554                endfor
555                Sort /R  TempWv, ListOfAvailableData
556        endif
557
558end
559//**************************************************************************************
560//**************************************************************************************
561//**************************************************************************************
562//**************************************************************************************
563//**************************************************************************************
564
565Function IR3J_PopMenuProc(ctrlName,popNum,popStr) : PopupMenuControl
566        String ctrlName
567        Variable popNum
568        String popStr
569
570        if(stringmatch(ctrlName,"StartFolderSelection"))
571                //Update the listbox using start folde popStr
572                SVAR StartFolderName=root:Packages:Irena:MultiSaPlotFit:DataStartFolder
573                StartFolderName = popStr
574                IR3J_UpdateListOfAvailFiles()
575        endif
576        if(stringmatch(ctrlName,"SortFolders"))
577                //do something here
578                SVAR FolderSortString = root:Packages:Irena:MultiSaPlotFit:FolderSortString
579                FolderSortString = popStr
580                IR3J_UpdateListOfAvailFiles()
581        endif
582        if(stringmatch(ctrlName,"SimpleModel"))
583                //do something here
584                SVAR SimpleModel = root:Packages:Irena:MultiSaPlotFit:SimpleModel
585                SimpleModel = popStr
586                IR3J_CreateLinearizedData()
587                IR3J_AppendDataToGraphModel()
588        endif
589
590        if(stringmatch(ctrlName,"SubTypeData"))
591                //do something here
592                SVAR DataSubType = root:Packages:Irena:MultiSaPlotFit:DataSubType
593                DataSubType = popStr
594        endif
595end
596
597//**************************************************************************************
598//**************************************************************************************
599//**************************************************************************************
600//**************************************************************************************
601
602Function IR3J_SetVarProc(sva) : SetVariableControl
603        STRUCT WMSetVariableAction &sva
604
605        variable tempP
606        switch( sva.eventCode )
607                case 1: // mouse up
608                case 2: // Enter key
609                        if(stringmatch(sva.ctrlName,"FolderNameMatchString1"))
610                                IR3D_UpdateListOfAvailFiles(1)
611                                IR3D_RebuildListboxTables()
612//                              IR2S_SortListOfAvailableFldrs()
613                        endif
614                        NVAR DataQstart=root:Packages:Irena:MultiSaPlotFit:DataQstart
615                        NVAR DataQEnd=root:Packages:Irena:MultiSaPlotFit:DataQEnd
616                       
617                        if(stringmatch(sva.ctrlName,"DataQEnd"))
618                                WAVE OriginalDataQWave = root:Packages:Irena:MultiSaPlotFit:OriginalDataQWave
619                                tempP = BinarySearch(OriginalDataQWave, DataQEnd )
620                                if(tempP<1)
621                                        print "Wrong Q value set, Data Q max must be at most 1 point before the end of Data"
622                                        tempP = numpnts(OriginalDataQWave)-2
623                                        DataQEnd = OriginalDataQWave[tempP]
624                                endif
625        //                      cursor /W=IR3D_DataMergePanel#DataDisplay B, OriginalData1IntWave, tempP
626                        endif
627                        if(stringmatch(sva.ctrlName,"DataQstart"))
628                                WAVE OriginalDataQWave = root:Packages:Irena:MultiSaPlotFit:OriginalDataQWave
629                                tempP = BinarySearch(OriginalDataQWave, DataQstart )
630                                if(tempP<1)
631                                        print "Wrong Q value set, Data Q min must be at least 1 point from the start of Data"
632                                        tempP = 1
633                                        DataQstart = OriginalDataQWave[tempP]
634                                endif
635        //                      cursor /W=IR3D_DataMergePanel#DataDisplay A, OriginalData2IntWave, tempP
636                        endif
637                        break
638
639                case 3: // live update
640                        break
641                case -1: // control being killed
642                        break
643        endswitch
644
645        return 0
646End
647
648//**************************************************************************************
649//**************************************************************************************
650//**************************************************************************************
651//**************************************************************************************
652
653Function IR3J_LinFitsListBoxProc(lba) : ListBoxControl
654        STRUCT WMListboxAction &lba
655
656        Variable row = lba.row
657        WAVE/T/Z listWave = lba.listWave
658        WAVE/Z selWave = lba.selWave
659        string FoldernameStr
660        Variable isData1or2
661        switch( lba.eventCode )
662                case -1: // control being killed
663                        break
664                case 1: // mouse down
665                        break
666                case 3: // double click
667//                      NVAR ProcessTest=root:Packages:Irena:SASDataMerging:ProcessTest
668//                      NVAR ProcessManually=root:Packages:Irena:SASDataMerging:ProcessManually
669//                      NVAR AutosaveAfterProcessing = root:Packages:Irena:SASDataMerging:AutosaveAfterProcessing
670//                      if(col==0)
671//                              isData1or2=1
672//                      else
673//                              isData1or2=2
674//                      endif
675                        FoldernameStr=listWave[row]
676                        IR3J_CopyAndAppendData(FoldernameStr)
677//                      if(col==1&&!ProcessTest)                //this is second column of data
678//                              IR3D_MergeProcessData()
679//                      endif
680//                      if(col==1&&AutosaveAfterProcessing&&ProcessManually)
681//                              IR3D_SaveData()
682//                      endif
683                        break
684                case 4: // cell selection
685                case 5: // cell selection plus shift key
686                        break
687                case 6: // begin edit
688                        break
689                case 7: // finish edit
690                        break
691                case 13: // checkbox clicked (Igor 6.2 or later)
692                        break
693        endswitch
694
695        return 0
696End
697//**************************************************************************************
698//**************************************************************************************
699Function IR3J_CopyAndAppendData(FolderNameStr)
700        string FolderNameStr
701       
702        string oldDf=GetDataFolder(1)
703        SetDataFolder root:Packages:Irena:MultiSaPlotFit                                        //go into the folder
704        //IR3D_SetSavedNotSavedMessage(0)
705
706                SVAR DataStartFolder=root:Packages:Irena:MultiSaPlotFit:DataStartFolder
707                SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
708                SVAR IntensityWaveName=root:Packages:Irena:MultiSaPlotFit:IntensityWaveName
709                SVAR QWavename=root:Packages:Irena:MultiSaPlotFit:QWavename
710                SVAR ErrorWaveName=root:Packages:Irena:MultiSaPlotFit:ErrorWaveName
711                SVAR dQWavename=root:Packages:Irena:MultiSaPlotFit:dQWavename
712                NVAR UseIndra2Data=root:Packages:Irena:MultiSaPlotFit:UseIndra2Data
713                NVAR UseQRSdata=root:Packages:Irena:MultiSaPlotFit:UseQRSdata
714                SVAR DataSubType = root:Packages:Irena:MultiSaPlotFit:DataSubType
715                //these are variables used by the control procedure
716                NVAR  UseResults=  root:Packages:Irena:MultiSaPlotFit:UseResults
717                NVAR  UseUserDefinedData=  root:Packages:Irena:MultiSaPlotFit:UseUserDefinedData
718                NVAR  UseModelData = root:Packages:Irena:MultiSaPlotFit:UseModelData
719                SVAR DataFolderName  = root:Packages:Irena:MultiSaPlotFit:DataFolderName
720                SVAR IntensityWaveName = root:Packages:Irena:MultiSaPlotFit:IntensityWaveName
721                SVAR QWavename = root:Packages:Irena:MultiSaPlotFit:QWavename
722                SVAR ErrorWaveName = root:Packages:Irena:MultiSaPlotFit:ErrorWaveName
723                UseResults = 0
724                UseUserDefinedData = 0
725                UseModelData = 0
726                DataFolderName = DataStartFolder+FolderNameStr
727                if(UseQRSdata)
728                        //get the names of waves, assume this tool actually works. May not under some conditions. In that case this tool will not work.
729                        QWavename = stringFromList(0,IR2P_ListOfWaves("Xaxis","", "IR3J_MultiSaPlotFitPanel"))
730                        IntensityWaveName = stringFromList(0,IR2P_ListOfWaves("Yaxis","*", "IR3J_MultiSaPlotFitPanel"))
731                        ErrorWaveName = stringFromList(0,IR2P_ListOfWaves("Error","*", "IR3J_MultiSaPlotFitPanel"))
732                        if(UseIndra2Data)
733                                dQWavename = ReplaceString("Qvec", QWavename, "dQ")
734                        elseif(UseQRSdata)
735                                dQWavename = "w"+QWavename[1,31]
736                        else
737                                dQWavename = ""
738                        endif
739                elseif(UseIndra2Data)
740                        string DataSubTypeInt = DataSubType
741                        string QvecLookup="R_Int=R_Qvec;BL_R_Int=BL_R_Qvec;SMR_Int=SMR_Qvec;DSM_Int=DSM_Qvec;USAXS_PD=Ar_encoder;Monitor=Ar_encoder;"
742                        string ErrorLookup="R_Int=R_Error;BL_R_Int=BL_R_error;SMR_Int=SMR_Error;DSM_Int=DSM_error;"
743                        string dQLookup="SMR_Int=SMR_dQ;DSM_Int=DSM_dQ;"
744                        string DataSubTypeQvec = StringByKey(DataSubTypeInt, QvecLookup,"=",";")
745                        string DataSubTypeError = StringByKey(DataSubTypeInt, ErrorLookup,"=",";")
746                        string DataSubTypedQ = StringByKey(DataSubTypeInt, dQLookup,"=",";")
747                        IntensityWaveName = DataSubTypeInt
748                        QWavename = QvecLookup
749                        ErrorWaveName = ErrorLookup
750                        dQWavename = dQLookup
751                endif
752                Wave/Z SourceIntWv=$(DataFolderName+IntensityWaveName)
753                Wave/Z SourceQWv=$(DataFolderName+QWavename)
754                Wave/Z SourceErrorWv=$(DataFolderName+ErrorWaveName)
755                Wave/Z SourcedQWv=$(DataFolderName+dQWavename)
756                if(!WaveExists(SourceIntWv)||   !WaveExists(SourceQWv))
757                        print "Data selection failed for "+DataFolderName
758                        return 0
759                endif
760                Duplicate/O SourceIntWv, OriginalDataIntWave
761                Duplicate/O SourceQWv, OriginalDataQWave
762                if(WaveExists(SourceErrorWv))
763                        Duplicate/O SourceErrorWv, OriginalDataErrorWave
764                else
765                        Duplicate/O OriginalDataIntWave, OriginalDataErrorWave
766                        Wave OriginalDataErrorWave
767                        OriginalDataErrorWave = 0
768                endif
769                if(WaveExists(SourcedQWv))
770                        Duplicate/O SourcedQWv, OriginalDatadQWave
771                else
772                        dQWavename=""
773                endif
774                IR3J_AppendDataToGraphLogLog()
775                IR3J_CreateLinearizedData()
776                IR3J_AppendDataToGraphModel()
777                print "Added Data from folder : "+DataFolderName
778        SetDataFolder oldDf
779        return 1
780end
781//**********************************************************************************************************
782//**********************************************************************************************************
783//**********************************************************************************************************
784Function IR3J_CreateLinearizedData()
785
786        string oldDf=GetDataFolder(1)
787        SetDataFolder root:Packages:Irena:MultiSaPlotFit                                        //go into the folder
788        Wave OriginalDataIntWave=root:Packages:Irena:MultiSaPlotFit:OriginalDataIntWave
789        Wave OriginalDataQWave=root:Packages:Irena:MultiSaPlotFit:OriginalDataQWave
790        Wave OriginalDataErrorWave=root:Packages:Irena:MultiSaPlotFit:OriginalDataErrorWave
791        SVAR SimpleModel=root:Packages:Irena:MultiSaPlotFit:SimpleModel
792        Duplicate/O OriginalDataIntWave, LinModelDataIntWave, ModelNormalizedResidual
793        Duplicate/O OriginalDataQWave, LinModelDataQWave, ModelNormResXWave
794        Duplicate/O OriginalDataErrorWave, LinModelDataEWave
795        ModelNormalizedResidual = 0
796        if(stringmatch(SimpleModel,"Guinier"))
797                LinModelDataQWave = OriginalDataQWave^2
798                ModelNormResXWave = OriginalDataQWave^2
799        endif
800       
801       
802        SetDataFolder oldDf
803end
804
805//**********************************************************************************************************
806//**********************************************************************************************************
807//**********************************************************************************************************
808
809
810
811Function IR3J_AppendDataToGraphModel()
812       
813        DoWindow IR3J_MultiSaPlotFitPanel
814        if(!V_Flag)
815                return 0
816        endif
817        variable WhichLegend=0
818        variable startQp, endQp, tmpStQ
819
820//      Duplicate/O OriginalDataIntWave, LinModelDataIntWave, ModelNormalizedResidual
821//      Duplicate/O OriginalDataQWave, LinModelDataQWave, ModelNormResXWave
822//      Duplicate/O OriginalDataErrorWave, LinModelDataEWave
823
824        Wave LinModelDataIntWave=root:Packages:Irena:MultiSaPlotFit:LinModelDataIntWave
825        Wave LinModelDataQWave=root:Packages:Irena:MultiSaPlotFit:LinModelDataQWave
826        Wave LinModelDataEWave=root:Packages:Irena:MultiSaPlotFit:LinModelDataEWave
827        CheckDisplayed /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay LinModelDataIntWave
828        if(!V_flag)
829                AppendToGraph /W=IR3J_MultiSaPlotFitPanel#LinearizedDataDisplay  LinModelDataIntWave  vs LinModelDataQWave
830                ModifyGraph /W=IR3J_MultiSaPlotFitPanel#LinearizedDataDisplay log=1, mirror(bottom)=1
831                Label /W=IR3J_MultiSaPlotFitPanel#LinearizedDataDisplay left "\\Z"+IN2G_LkUpDfltVar("AxisLabelSize")+"Intensity"
832                Label /W=IR3J_MultiSaPlotFitPanel#LinearizedDataDisplay bottom "\\Z"+IN2G_LkUpDfltVar("AxisLabelSize")+"Q [A\\S-1\\M]"
833                ErrorBars /W=IR3J_MultiSaPlotFitPanel#LinearizedDataDisplay LinModelDataIntWave Y,wave=(LinModelDataEWave,LinModelDataEWave)           
834        endif
835//      NVAR DataQEnd = root:Packages:Irena:MultiSaPlotFit:DataQEnd
836//      if(DataQEnd>0)                  //old Q max already set.
837//              endQp = BinarySearch(OriginalDataQWave, DataQEnd)
838//      endif
839//      if(endQp<1)     //Qmax not set or not found. Set to last point-1 on that wave.
840//              DataQEnd = OriginalDataQWave[numpnts(OriginalDataQWave)-2]
841//              endQp = numpnts(OriginalDataQWave)-2
842//      endif
843//      cursor /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay B, OriginalDataIntWave, endQp
844        DoUpdate
845
846        Wave/Z ModelNormalizedResidual=root:Packages:Irena:MultiSaPlotFit:ModelNormalizedResidual
847        Wave/Z ModelNormResXWave=root:Packages:Irena:MultiSaPlotFit:ModelNormResXWave
848        CheckDisplayed /W=IR3J_MultiSaPlotFitPanel#ResidualDataDisplay ModelNormalizedResidual  //, ResultIntensity
849        if(!V_flag)
850                AppendToGraph /W=IR3J_MultiSaPlotFitPanel#ResidualDataDisplay  ModelNormalizedResidual  vs ModelNormResXWave
851                ModifyGraph /W=IR3J_MultiSaPlotFitPanel#LinearizedDataDisplay log=1, mirror(bottom)=1
852                Label /W=IR3J_MultiSaPlotFitPanel#LinearizedDataDisplay left "\\Z"+IN2G_LkUpDfltVar("AxisLabelSize")+"Normalized res."
853                Label /W=IR3J_MultiSaPlotFitPanel#LinearizedDataDisplay bottom "\\Z"+IN2G_LkUpDfltVar("AxisLabelSize")+"Q [A\\S-1\\M]"
854        endif
855
856
857
858        string Shortname1, ShortName2
859       
860        switch(V_Flag)  // numeric switch
861                case 0:         // execute if case matches expression
862                        Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /N=text0/K
863                        break                                           // exit from switch
864//              case 1:         // execute if case matches expression
865//                      SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
866//                      Shortname1 = StringFromList(ItemsInList(DataFolderName1, ":")-1, DataFolderName1  ,":")
867//                      Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /C/N=text0/J/A=LB "\\s(OriginalData1IntWave) "+Shortname1
868//                      break
869//              case 2:
870//                      SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
871//                      Shortname2 = StringFromList(ItemsInList(DataFolderName2, ":")-1, DataFolderName2  ,":")
872//                      Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /C/N=text0/J/A=LB "\\s(OriginalData2IntWave) " + Shortname2         
873//                      break
874//              case 3:
875//                      SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
876//                      Shortname1 = StringFromList(ItemsInList(DataFolderName1, ":")-1, DataFolderName1  ,":")
877//                      Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /C/N=text0/J/A=LB "\\s(OriginalData1IntWave) "+Shortname1+"\r\\s(OriginalData2IntWave) "+Shortname2
878//                      break
879//              case 7:
880//                      SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
881//                      Shortname1 = StringFromList(ItemsInList(DataFolderName1, ":")-1, DataFolderName1  ,":")
882//                      Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /C/N=text0/J/A=LB "\\s(OriginalData1IntWave) "+Shortname1+"\r\\s(OriginalData2IntWave) "+Shortname2+"\r\\s(ResultIntensity) Merged Data"
883                        break
884        endswitch
885
886       
887end
888//**********************************************************************************************************
889//**********************************************************************************************************
890//**********************************************************************************************************
891
892
893Function IR3J_AppendDataToGraphLogLog()
894       
895        DoWindow IR3J_MultiSaPlotFitPanel
896        if(!V_Flag)
897                return 0
898        endif
899        variable WhichLegend=0
900        variable startQp, endQp, tmpStQ
901        Wave OriginalDataIntWave=root:Packages:Irena:MultiSaPlotFit:OriginalDataIntWave
902        Wave OriginalDataQWave=root:Packages:Irena:MultiSaPlotFit:OriginalDataQWave
903        Wave OriginalDataErrorWave=root:Packages:Irena:MultiSaPlotFit:OriginalDataErrorWave
904        CheckDisplayed /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay OriginalDataIntWave
905        if(!V_flag)
906                AppendToGraph /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay  OriginalDataIntWave  vs OriginalDataQWave
907                ModifyGraph /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay log=1, mirror(bottom)=1
908                Label /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay left "Intensity 1"
909                Label /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay bottom "Q [A\\S-1\\M]"
910                ErrorBars /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay OriginalDataIntWave Y,wave=(OriginalDataErrorWave,OriginalDataErrorWave)               
911        endif
912        NVAR DataQEnd = root:Packages:Irena:MultiSaPlotFit:DataQEnd
913        if(DataQEnd>0)                  //old Q max already set.
914                endQp = BinarySearch(OriginalDataQWave, DataQEnd)
915        endif
916        if(endQp<1)     //Qmax not set or not found. Set to last point-1 on that wave.
917                DataQEnd = OriginalDataQWave[numpnts(OriginalDataQWave)-2]
918                endQp = numpnts(OriginalDataQWave)-2
919        endif
920        cursor /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay B, OriginalDataIntWave, endQp
921        DoUpdate
922
923        Wave/Z OriginalDataIntWave=root:Packages:Irena:MultiSaPlotFit:OriginalDataIntWave
924        CheckDisplayed /W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay OriginalDataIntWave  //, ResultIntensity
925        string Shortname1, ShortName2
926       
927        switch(V_Flag)  // numeric switch
928                case 0:         // execute if case matches expression
929                        Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /N=text0/K
930                        break                                           // exit from switch
931//              case 1:         // execute if case matches expression
932//                      SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
933//                      Shortname1 = StringFromList(ItemsInList(DataFolderName1, ":")-1, DataFolderName1  ,":")
934//                      Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /C/N=text0/J/A=LB "\\s(OriginalData1IntWave) "+Shortname1
935//                      break
936//              case 2:
937//                      SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
938//                      Shortname2 = StringFromList(ItemsInList(DataFolderName2, ":")-1, DataFolderName2  ,":")
939//                      Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /C/N=text0/J/A=LB "\\s(OriginalData2IntWave) " + Shortname2         
940//                      break
941//              case 3:
942//                      SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
943//                      Shortname1 = StringFromList(ItemsInList(DataFolderName1, ":")-1, DataFolderName1  ,":")
944//                      Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /C/N=text0/J/A=LB "\\s(OriginalData1IntWave) "+Shortname1+"\r\\s(OriginalData2IntWave) "+Shortname2
945//                      break
946//              case 7:
947//                      SVAR DataFolderName=root:Packages:Irena:MultiSaPlotFit:DataFolderName
948//                      Shortname1 = StringFromList(ItemsInList(DataFolderName1, ":")-1, DataFolderName1  ,":")
949//                      Legend/W=IR3J_MultiSaPlotFitPanel#LogLogDataDisplay /C/N=text0/J/A=LB "\\s(OriginalData1IntWave) "+Shortname1+"\r\\s(OriginalData2IntWave) "+Shortname2+"\r\\s(ResultIntensity) Merged Data"
950                        break
951        endswitch
952
953       
954end
955//**********************************************************************************************************
956//**********************************************************************************************************
957//**********************************************************************************************************
Note: See TracBrowser for help on using the repository browser.