source: trunk/User Procedures/Irena/IR3_MultiDataPlot.ipf @ 956

Last change on this file since 956 was 956, checked in by ilavsky, 3 years ago

More bioSAXS fixes

  • Property svn:eol-style set to native
File size: 61.6 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method and strict wave access.
2#pragma version=1
3constant IR3LversionNumber = 1.01                       //MultiDataPloting tool version number.
4
5//*************************************************************************\
6//* Copyright (c) 2005 - 2020, 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
12//1.01          Changed working folder name. 
13//1.0           New ploting tool to make plotting various data easy for multiple data sets. 
14
15
16
17///******************************************************************************************
18///******************************************************************************************
19///                     Multi-Data ploting tool, easy way to plot many data sets at once
20///******************************************************************************************
21///******************************************************************************************
22Function IR3L_MultiSamplePlot()
23
24        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
25        IN2G_CheckScreenSize("width",1000)
26        IN2G_CheckScreenSize("height",670)
27        DoWIndow IR3L_MultiSamplePlotPanel
28        if(V_Flag)
29                DoWindow/F IR3L_MultiSamplePlotPanel
30        else
31                IR3L_InitMultiSamplePlot()
32                IR3L_MultiSamplePlotPanelFnct()
33                //              setWIndow IR3L_MultiSamplePlotPanel, hook(CursorMoved)=IR3D_PanelHookFunction
34                IR1_UpdatePanelVersionNumber("IR3L_MultiSamplePlotPanel", IR3LversionNumber,1)
35                //link it to top graph, if exists
36                IR3L_SetStartConditions()
37        endif
38        IR3C_MultiUpdListOfAvailFiles("Irena:MultiSamplePlot")
39end
40//**********************************************************************************************************
41//**********************************************************************************************************
42//**********************************************************************************************************
43
44Function IR3L_MainCheckVersion()       
45        DoWindow IR3L_MultiSamplePlotPanel
46        if(V_Flag)
47                if(!IR1_CheckPanelVersionNumber("IR3L_MultiSamplePlotPanel", IR3LversionNumber))
48                        DoAlert /T="The Multi Data Plots panel was created by incorrect version of Irena " 1, "Multi Data Plots may need to be restarted to work properly. Restart now?"
49                        if(V_flag==1)
50                                KillWIndow/Z IR3L_MultiSamplePlotPanel
51                                IR3L_MultiSamplePlot()
52                        else            //at least reinitialize the variables so we avoid major crashes...
53                                IR3L_InitMultiSamplePlot()
54                        endif
55                endif
56        endif
57end
58//**********************************************************************************************************
59//**********************************************************************************************************
60//**********************************************************************************************************
61
62static Function IR3L_SetStartConditions()
63               
64                IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
65                SVAR GraphWindowName = root:Packages:Irena:MultiSamplePlot:GraphWindowName
66                SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
67               
68                //look for top MultiDataPlot_*, if does nto exist, attach to top graph, if exists...
69                string List=WinList("MultiDataPlot_*", ";", "WIN:1" )
70                string TopWinName
71                if(ItemsInList(list)>0)
72                        TopWinName = stringFromList(0,list)
73                else
74                        list = WinList("*", ";", "WIN:1" )
75                        if(ItemsInList(list)>0)
76                                TopWinName = stringFromList(0,list)
77                        else
78                                TopWinName = ""
79                        endif
80                endif
81                if(strlen(TopWinName)>0)
82                        GetWindow $(TopWinName) title
83                        GraphUserTitle = S_value
84                        GraphWindowName = TopWinName
85                        DoWindow/F $(TopWinName)
86                else
87                        GraphUserTitle = ""
88                        GraphWindowName = ""
89               
90                endif
91end
92//************************************************************************************************************
93//************************************************************************************************************
94//************************************************************************************************************
95//************************************************************************************************************
96Function IR3L_MultiSamplePlotPanelFnct()
97        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
98        PauseUpdate             // building window...
99        NewPanel /K=1 /W=(5.25,43.25,605,820) as "MultiData Ploting tool"
100        DoWIndow/C IR3L_MultiSamplePlotPanel
101        TitleBox MainTitle title="\Zr220Multi Data ploting tool",pos={140,1},frame=0,fstyle=3, fixedSize=1,font= "Times New Roman", size={360,30},fColor=(0,0,52224)
102                                                                //      TitleBox FakeLine2 title=" ",fixedSize=1,size={330,3},pos={16,428},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
103        string UserDataTypes=""
104        string UserNameString=""
105        string XUserLookup=""
106        string EUserLookup=""
107        IR2C_AddDataControls("Irena:MultiSamplePlot","IR3L_MultiSamplePlotPanel","DSM_Int;M_DSM_Int;SMR_Int;M_SMR_Int;","AllCurrentlyAllowedTypes",UserDataTypes,UserNameString,XUserLookup,EUserLookup, 0,1, DoNotAddControls=1)
108        Button GetHelp,pos={480,10},size={80,15},fColor=(65535,32768,32768), proc=IR3L_ButtonProc,title="Get Help", help={"Open www manual page for this tool"}
109        IR3C_MultiAppendControls("Irena:MultiSamplePlot","IR3L_MultiSamplePlotPanel", "IR3L_DoubleClickAction","",0,1)
110
111        Button SelectAll,pos={190,680},size={80,15}, proc=IR3L_ButtonProc,title="SelectAll", help={"Select All data in Listbox"}
112
113        //graph controls
114        SVAR GraphWindowName=root:Packages:Irena:MultiSamplePlot:GraphWindowName
115        PopupMenu SelectGraphWindows,pos={280,90},size={310,20},proc=IR3L_PopMenuProc, title="Select Graph",help={"Select one of controllable graphs"}
116        PopupMenu SelectGraphWindows,value=IR3L_GraphListPopupString(),mode=1, popvalue=GraphWindowName
117       
118        SetVariable GraphWindowName,pos={280,115},size={310,20}, proc=IR3L_SetVarProc,title="\Zr120Graph Window name: ", noedit=1, valueColor=(65535,0,0)
119        Setvariable GraphWindowName,fStyle=2, variable=root:Packages:Irena:MultiSamplePlot:GraphWindowName, disable=0, frame=0, help={"This is Igro internal name for graph currently selected for controls"}
120
121        SetVariable GraphUserTitle,pos={280,140},size={310,20}, proc=IR3L_SetVarProc,title="\Zr120Graph title: "
122        Setvariable GraphUserTitle,fStyle=2, variable=root:Packages:Irena:MultiSamplePlot:GraphUserTitle, help={"This is human name for graph currently controlled by the tool. You can change it."}
123
124        //Plotting controls...
125        TitleBox FakeLine1 title=" ",fixedSize=1,size={330,3},pos={260,170},frame=0,fColor=(0,0,52224), labelBack=(0,0,52224)
126       
127        Button NewGraphPlotData,pos={270,180},size={120,20}, proc=IR3L_ButtonProc,title="New graph", help={"Plot selected data in new graph"}
128        Button AppendPlotData,pos={410,180},size={180,20}, proc=IR3L_ButtonProc,title="Append to selected graph", help={"Append selected data to graph selected above"}
129        //this is selection of data types the code will plot.
130        SVAR SelectedDataPlot=root:Packages:Irena:MultiSamplePlot:SelectedDataPlot
131        PopupMenu SelectedDataPlot,pos={260,215},size={310,20},proc=IR3L_PopMenuProc, title="\Zr120Data type to plot?  : ",help={"Select data to create if needed to graph"}
132        PopupMenu SelectedDataPlot,value=#"root:Packages:Irena:MultiSamplePlot:ListOfDefinedDataPlots",mode=1, popvalue=SelectedDataPlot, bodyWidth=150
133        PopupMenu SelectedDataPlot fstyle=5,fColor=(0,0,65535)
134        TitleBox SelectedDataPlotInstructions title="\Zr100",size={245,15},pos={260,240},frame=0,fColor=(0,0,65535),labelBack=0
135
136
137        TitleBox GraphAxesControls title="\Zr100Graph Axes Options",fixedSize=1,size={150,20},pos={350,260},frame=0,fstyle=1, fixedSize=1
138
139        TitleBox XAxisLegendTB title="\Zr100X Axis Legend",fixedSize=1,size={150,20},pos={280,280},frame=0,fstyle=1, fixedSize=1
140        TitleBox YAxisLegendTB title="\Zr100Y Axis Legend",fixedSize=1,size={150,20},pos={450,280},frame=0,fstyle=1, fixedSize=1
141
142        SetVariable XAxisLegend,pos={260,300},size={160,15}, proc=IR3L_SetVarProc,title=" "
143        Setvariable XAxisLegend, fStyle=2, variable=root:Packages:Irena:MultiSamplePlot:XAxisLegend, help={"Legend for X axis, you can change it. "}
144        SetVariable YAxislegend,pos={430,300},size={160,15}, proc=IR3L_SetVarProc,title=" "
145        Setvariable YAxislegend, fStyle=2, variable=root:Packages:Irena:MultiSamplePlot:YAxislegend, help={"legend for Y axis. You can change it. "}
146       
147        Checkbox LogXAxis, pos={280,320},size={76,14},title="LogXAxis?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:LogXAxis, help={"Use log X axis. You can change it. "}
148        Checkbox LogYAxis, pos={450,320},size={76,14},title="LogYAxis?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:LogYAxis, help={"Use log X axis. You can change it. "}
149
150        SetVariable XOffset,pos={260,340},size={130,15}, proc=IR3L_SetVarProc,title="X offset :     ", limits={0,inf,1}
151        Setvariable XOffset, fStyle=2, variable=root:Packages:Irena:MultiSamplePlot:XOffset, help={"X Offxet for X axis, you can change it. "}
152        SetVariable YOffset,pos={430,340},size={130,15}, proc=IR3L_SetVarProc,title="Y offset :     ",limits={0,inf,1}
153        Setvariable YOffset, fStyle=2, variable=root:Packages:Irena:MultiSamplePlot:YOffset, help={"Y Offset for Y axis. You can change it. "}
154
155
156        TitleBox GraphTraceControls title="\Zr100Graph Trace Options",fixedSize=1,size={150,20},pos={350,420},frame=0,fstyle=1, fixedSize=1
157
158        Checkbox Colorize, pos={280,440},size={76,14},title="Vary colors?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:Colorize, help={"Colorize the data? Oposite is B/W"}
159        Checkbox UseSymbols, pos={280,480},size={76,14},title="Use Symbols?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:UseSymbols, help={"Use Symbols for data. "}
160        Checkbox UseLines, pos={280,500},size={76,14},title="Use Lines?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:UseLines, help={"Use Lines for data"}
161
162        Checkbox DisplayErrorBars, pos={280,520},size={76,14},title="Display Error bars?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:DisplayErrorBars, help={"Display error bars (if they exist)"}
163
164
165        NVAR SymbolSize=root:Packages:Irena:MultiSamplePlot:SymbolSize
166        PopupMenu SymbolSize,pos={430,480},size={310,20},proc=IR3L_PopMenuProc, title="Symbol Size : ",help={"Symbol Size"}
167        PopupMenu SymbolSize,value="0;1;2;3;5;7;10;",mode=1, popvalue=num2str(SymbolSize)
168        SetVariable LineThickness,pos={430,500},size={160,15}, proc=IR3L_SetVarProc,title="Line Thickness",limits={0.5,10,0.5}
169        Setvariable LineThickness, fStyle=2, variable=root:Packages:Irena:MultiSamplePlot:LineThickness, help={"Line Thickness. You can change it. "}
170
171
172        TitleBox GraphOtherControls title="\Zr100Graph Other Options",fixedSize=1,size={150,20},pos={350,560},frame=0,fstyle=1, fixedSize=1
173
174        Checkbox AddLegend, pos={280,580},size={76,14},title="Add Legend?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:AddLegend, help={"Add legend to data."}
175        Checkbox UseOnlyFoldersInLegend, pos={280,600},size={76,14},title="Only Folders?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:UseOnlyFoldersInLegend, help={"Only Folders in Legend?"}
176        NVAR LegendSize=root:Packages:Irena:MultiSamplePlot:LegendSize
177        PopupMenu LegendSize,pos={430,580},size={310,20},proc=IR3L_PopMenuProc, title="Legend Size : ",help={"legend Size"}
178        PopupMenu LegendSize,value="8;10;12;14;16;20;24;",mode=1, popvalue=num2str(LegendSize)
179
180
181
182        TitleBox Instructions1 title="\Zr100Double click to add data to graph",size={330,15},pos={4,680},frame=0,fColor=(0,0,65535),labelBack=0
183        TitleBox Instructions2 title="\Zr100Shift-click to select range of data",size={330,15},pos={4,695},frame=0,fColor=(0,0,65535),labelBack=0
184        TitleBox Instructions3 title="\Zr100Ctrl/Cmd-click to select one data set",size={330,15},pos={4,710},frame=0,fColor=(0,0,65535),labelBack=0
185        TitleBox Instructions4 title="\Zr100Regex for not contain: ^((?!string).)*$",size={330,15},pos={4,725},frame=0,fColor=(0,0,65535),labelBack=0
186        TitleBox Instructions5 title="\Zr100Regex for contain:  string, two: str2.*str1",size={330,15},pos={4,740},frame=0,fColor=(0,0,65535),labelBack=0
187        TitleBox Instructions6 title="\Zr100Regex for case independent:  (?i)string",size={330,15},pos={4,755},frame=0,fColor=(0,0,65535),labelBack=0
188
189        SVAR SelectedStyle = root:Packages:Irena:MultiSamplePlot:SelectedStyle
190        PopupMenu ApplyStyle,pos={280,660},size={400,20},proc=IR3L_PopMenuProc, title="Apply style:",help={"Set tool setting to defined conditions and apply to graph"}
191        PopupMenu ApplyStyle,value=#"root:Packages:Irena:MultiSamplePlot:ListOfDefinedStyles",popvalue=SelectedStyle
192        Button ApplyPresetFormating,pos={260,710},size={160,20}, proc=IR3L_ButtonProc,title="Apply All Formating", help={"Apply Preset Formating to update graph based on these choices"}
193        Checkbox ApplyFormatingEveryTime, pos={250,735},size={76,14},title="Apply Formating automatically?", proc=IR3L_CheckProc, variable=root:Packages:Irena:MultiSamplePlot:ApplyFormatingEveryTime, help={"Should all formatting be applied after every data additon?"}
194
195       
196        Button ExportGraphJPG,pos={450,680},size={140,20}, proc=IR3L_ButtonProc,title="Export as jpg", help={"Export as jpg file"}
197        Button ExportGraphTIF,pos={450,705},size={140,20}, proc=IR3L_ButtonProc,title="Export as tiff", help={"Export as tiff file"}
198        Button SaveGraphAsFile,pos={450,730},size={140,20}, proc=IR3L_ButtonProc,title="Export as pxp", help={"Save Graph As Igor experiment"}
199
200
201        IR3L_FixPanelControls()
202end
203//**********************************************************************************************************
204//**********************************************************************************************************
205//**********************************************************************************************************
206
207static Function IR3L_FixPanelControls()
208        //fix panel controls to whatever selection user made...
209
210        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
211        SVAR SelectedDataPlot=root:Packages:Irena:MultiSamplePlot:SelectedDataPlot
212        strswitch(SelectedDataPlot)                                             // string switch
213                case "X-Y (q-Int, etc.)":                               // execute if case matches expression
214                        TitleBox SelectedDataPlotInstructions win=IR3L_MultiSamplePlotPanel, title="\Zr100Original data will be used"
215                        break                                                                           // exit from switch
216                case "Guinier (Q^2-ln(I))":                             // execute if case matches expression
217                        TitleBox SelectedDataPlotInstructions win=IR3L_MultiSamplePlotPanel, title="\Zr100Guinier data will be created"
218                        break
219                case "Guinier Rod (Q^2-ln(I*Q))":                               // execute if case matches expression
220                        TitleBox SelectedDataPlotInstructions win=IR3L_MultiSamplePlotPanel, title="\Zr100Guinier Rod data will be created"
221                        break
222                case "Guinier Sheet (Q^2-ln(I*Q^2))":                           // execute if case matches expression
223                        TitleBox SelectedDataPlotInstructions win=IR3L_MultiSamplePlotPanel, title="\Zr100Guinier Sheet data will be created"
224                        break
225                case "Kratky (Q-IQ^2)":                                 // execute if case matches expression
226                        TitleBox SelectedDataPlotInstructions win=IR3L_MultiSamplePlotPanel, title="\Zr100Kratky data will be created"
227                        break
228                case "DimLess Kratky (Q-I*(Q*Rg)^2/I0)":                                        // execute if case matches expression
229                        TitleBox SelectedDataPlotInstructions win=IR3L_MultiSamplePlotPanel, title="\Zr100DimLess Kratky data will be created if Guinier fit results exist"
230                        break
231                case "Porod (Q^4-IQ^4)":                                        // execute if case matches expression
232                        TitleBox SelectedDataPlotInstructions win=IR3L_MultiSamplePlotPanel, title="\Zr100Porod data will be created"
233                        break
234                default:                                                                                // optional default expression executed, this is basically X-Y case again
235                                                                                                                // when no case matches
236        endswitch
237
238end
239//**********************************************************************************************************
240//**********************************************************************************************************
241//**********************************************************************************************************
242
243Function/S IR3L_GraphListPopupString()
244        // Create some waves for demo purposes
245        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
246        string list = WinList("MultiDataPlot_*", ";", "WIN:1" )
247        list = SortList(list)
248        //now, append names to them
249        variable i
250        string LongList=""
251        if(strlen(WinList("*", ";", "WIN:1" ))>2)
252                GetWindow $(stringFromList(0,WinList("*", ";", "WIN:1" ))) wtitle
253                LongList+="Top Graph"+"="+S_value+";"           
254        else
255                LongList+="---;"
256        endif
257        for(i=0;i<ItemsInList(list);i+=1)
258                GetWindow $(StringFromList(i, list)) wtitle
259                LongList+=StringFromList(i, list)+"="+S_value+";"
260        endfor 
261        return LongList
262End
263
264
265//**********************************************************************************************************
266//**********************************************************************************************************
267//**********************************************************************************************************
268
269static Function IR3L_InitMultiSamplePlot()     
270        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
271        DfRef OldDf=GetDataFolderDFR()
272        string ListOfVariables
273        string ListOfStrings
274        variable i
275               
276        if (!DataFolderExists("root:Packages:Irena:MultiSamplePlot"))           //create folder
277                NewDataFolder/O root:Packages
278                NewDataFolder/O root:Packages:Irena
279                NewDataFolder/O root:Packages:Irena:MultiSamplePlot
280        endif
281        SetDataFolder root:Packages:Irena:MultiSamplePlot                                       //go into the folder
282
283        //here define the lists of variables and strings needed, separate names by ;...
284        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;dQWavename;DataUnits;"
285        ListOfStrings+="DataStartFolder;DataMatchString;FolderSortString;FolderSortStringAll;"
286        ListOfStrings+="UserMessageString;SavedDataMessage;"
287        ListOfStrings+="SelectedResultsTool;SelectedResultsType;ResultsGenerationToUse;"
288        ListOfStrings+="DataSubTypeUSAXSList;DataSubTypeResultsList;DataSubType;"
289        ListOfStrings+="GraphUserTitle;GraphWindowName;XAxisLegend;YAxislegend;"
290        ListOfStrings+="QvecLookupUSAXS;ErrorLookupUSAXS;dQLookupUSAXS;"
291        ListOfStrings+="ListOfDefinedStyles;SelectedStyle;ListOfDefinedDataPlots;SelectedDataPlot;"
292
293        ListOfVariables="UseIndra2Data;UseQRSdata;UseResults;"
294        ListOfVariables+="InvertGrepSearch;"
295        ListOfVariables+="LogXAxis;LogYAxis;MajorGridXaxis;MajorGridYaxis;MinorGridXaxis;MinorGridYaxis;"
296        ListOfVariables+="Colorize;UseSymbols;UseLines;SymbolSize;LineThickness;"
297        ListOfVariables+="XOffset;YOffset;DisplayErrorBars;ApplyFormatingEveryTime;"
298        ListOfVariables+="AddLegend;UseOnlyFoldersInLegend;LegendSize;"
299       
300        //and here we create them
301        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
302                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
303        endfor         
304                                                               
305        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
306                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
307        endfor 
308
309        ListOfStrings="DataFolderName;IntensityWaveName;QWavename;ErrorWaveName;dQWavename;"
310        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
311                SVAR teststr=$(StringFromList(i,ListOfStrings))
312                teststr =""
313        endfor         
314        ListOfStrings="DataMatchString;FolderSortString;FolderSortStringAll;"
315        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
316                SVAR teststr=$(StringFromList(i,ListOfStrings))
317                if(strlen(teststr)<1)
318                        teststr =""
319                endif
320        endfor         
321        ListOfStrings="DataStartFolder;"
322        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
323                SVAR teststr=$(StringFromList(i,ListOfStrings))
324                if(strlen(teststr)<1)
325                        teststr ="root:"
326                endif
327        endfor         
328        SVAR FolderSortStringAll
329        FolderSortStringAll = "Alphabetical;Reverse Alphabetical;_xyz;_xyz.ext;Reverse _xyz;Reverse _xyz.ext;Sxyz_;Reverse Sxyz_;_xyzmin;_xyzC;_xyzpct;_xyz_000;Reverse _xyz_000;"
330        SVAR DataSubTypeUSAXSList
331        DataSubTypeUSAXSList="DSM_Int;SMR_Int;R_Int;Blank_R_Int;USAXS_PD;Monitor;"
332        SVAR DataSubTypeResultsList
333        DataSubTypeResultsList="Size"
334        SVAR DataSubType
335        DataSubType="DSM_Int"
336       
337        SVAR ListOfDefinedStyles
338        ListOfDefinedStyles = "Log-Log;Lin-Lin;Lin-Log;VolumeSizeDistribution;NumberSizeDistribution;"
339        SVAR ListOfDefinedDataPlots
340        ListOfDefinedDataPlots = "X-Y (q-Int, etc.);Guinier (Q^2-ln(I));Kratky (Q-IQ^2);Porod (Q^4-IQ^4);Guinier Rod (Q^2-ln(I*Q));Guinier Sheet (Q^2-ln(I*Q^2));DimLess Kratky (Q-I*(Q*Rg)^2/I0);"
341        SVAR SelectedStyle
342        if(strlen(SelectedStyle)<2)
343                SelectedStyle="Log-Log"
344        endif
345        SVAR SelectedDataPlot
346        if(strlen(SelectedDataPlot)<2)
347                SelectedDataPlot=StringFromList(0,ListOfDefinedDataPlots)
348        endif
349
350
351
352        SVAR QvecLookupUSAXS
353        QvecLookupUSAXS="R_Int=R_Qvec;Blank_R_Int=Blank_R_Qvec;SMR_Int=SMR_Qvec;DSM_Int=DSM_Qvec;USAXS_PD=Ar_encoder;Monitor=Ar_encoder;"
354        SVAR ErrorLookupUSAXS
355        ErrorLookupUSAXS="R_Int=R_Error;Blank_R_Int=Blank_R_error;SMR_Int=SMR_Error;DSM_Int=DSM_error;"
356        SVAR dQLookupUSAXS
357        dQLookupUSAXS="SMR_Int=SMR_dQ;DSM_Int=DSM_dQ;"
358       
359        SVAR GraphUserTitle
360        SVAR GraphWindowName
361        GraphUserTitle=""
362        GraphWindowName=stringFromList(0,WinList("MultiDataPlot_*", ";", "WIN:1" ))
363        if(strlen(GraphWindowName)<2)
364                GraphWindowName="---"
365        endif
366        SVAR SelectedResultsTool
367        SVAR SelectedResultsType
368        SVAR ResultsGenerationToUse
369        if(strlen(SelectedResultsTool)<1)
370                SelectedResultsTool="Unified Fit"
371        endif
372        if(strlen(SelectedResultsTool)<1)
373                SelectedResultsTool=IR2C_ReturnKnownToolResults(SelectedResultsTool)
374        endif
375        if(strlen(ResultsGenerationToUse)<1)
376                ResultsGenerationToUse="Latest"
377        endif
378       
379        NVAR LegendSize
380        if(LegendSize<8)
381                LegendSize=12
382        endif
383        NVAR UseSymbols
384        NVAR UseLines
385        NVAR Colorize
386        NVAR SymbolSize
387        NVAR LineThickness
388        NVAR AddLegend
389        NVAR UseOnlyFoldersInLegend
390        NVAR LegendSize
391        if(UseSymbols+UseLines < 1)                     //seems to start new tool
392                UseLines = 1
393                Colorize = 1
394                SymbolSize = 2
395                LineThickness = 2
396                AddLegend = 1
397                UseOnlyFoldersInLegend = 1
398                LegendSize = 12
399        endif
400       
401        Make/O/T/N=(0) ListOfAvailableData
402        Make/O/N=(0) SelectionOfAvailableData
403        SetDataFolder oldDf
404
405end
406//**************************************************************************************
407//**************************************************************************************
408//**************************************************************************************
409Function IR3L_CheckProc(cba) : CheckBoxControl
410        STRUCT WMCheckboxAction &cba
411
412        switch( cba.eventCode )
413                case 2: // mouse up
414                        Variable checked = cba.checked
415                        NVAR UseIndra2Data =  root:Packages:Irena:MultiSamplePlot:UseIndra2Data
416                        NVAR UseQRSData =  root:Packages:Irena:MultiSamplePlot:UseQRSData
417                        NVAR UseResults =  root:Packages:Irena:MultiSamplePlot:UseResults
418                        SVAR DataStartFolder = root:Packages:Irena:MultiSamplePlot:DataStartFolder
419                        SVAR GraphWindowName = root:Packages:Irena:MultiSamplePlot:GraphWindowName
420                        NVAR UseLines = root:Packages:Irena:MultiSamplePlot:UseLines
421                        NVAR UseSymbols = root:Packages:Irena:MultiSamplePlot:UseSymbols
422                        NVAR SymbolSize = root:Packages:Irena:MultiSamplePlot:SymbolSize
423                        NVAR LineThickness= root:Packages:Irena:MultiSamplePlot:LineThickness
424                        NVAR LegendSize = root:Packages:Irena:MultiSamplePlot:LegendSize
425                        NVAR UseOnlyFoldersInLegend = root:Packages:Irena:MultiSamplePlot:UseOnlyFoldersInLegend
426                        NVAR AddLegend= root:Packages:Irena:MultiSamplePlot:AddLegend
427                        if(stringmatch(cba.ctrlName,"DisplayErrorBars"))
428                                NVAR DisplayErrorBars = root:Packages:Irena:MultiSamplePlot:DisplayErrorBars
429                                IN2G_ShowHideErrorBars(DisplayErrorBars, topGraphStr=GraphWindowName)
430                        endif
431                        if(stringmatch(cba.ctrlName,"LogXAxis"))
432                                if(checked)
433                                        ModifyGraph/W=$(GraphWindowName) log(bottom)=1
434                                else
435                                        ModifyGraph/W=$(GraphWindowName) log(bottom)=0
436                                endif
437                        endif
438                        if(stringmatch(cba.ctrlName,"LogYAxis"))
439                                if(checked)
440                                        ModifyGraph/W=$(GraphWindowName) log(left)=1
441                                else
442                                        ModifyGraph/W=$(GraphWindowName) log(left)=0
443                                endif
444                        endif
445                        if(stringmatch(cba.ctrlName,"Colorize"))
446                                DoWIndow/F $(GraphWindowName)
447                                if(checked)
448                                        IN2G_ColorTopGrphRainbow()
449                                else
450                        ModifyGraph/W=$(GraphWindowName) rgb=(0,0,0)
451                                endif
452                                DoWIndow/F IR3L_MultiSamplePlotPanel
453                        endif
454                        if(stringmatch(cba.ctrlName,"UseSymbols"))
455                                DoWIndow/F $(GraphWindowName)
456                                if(UseLines+UseSymbols<1)
457                                        UseSymbols = checked
458                                        UseLines = !checked
459                                endif
460                                if(checked)
461                                        ModifyGraph mode=3*UseSymbols+UseLines 
462                                        IN2G_VaryMarkersTopGrphRainbow(1, SymbolSize, 0)
463                                else
464                                        ModifyGraph mode=!(UseLines)   
465                                endif
466                                DoWIndow/F IR3L_MultiSamplePlotPanel
467                        endif
468                        if(stringmatch(cba.ctrlName,"UseLines"))
469                                DoWIndow/F $(GraphWindowName)
470                                if(UseLines+UseSymbols<1)
471                                        UseSymbols = !checked
472                                        UseLines = checked
473                                endif
474                                if(LineThickness<0.5)
475                                        LineThickness = 0.5
476                                endif
477                                if(checked)
478                                        ModifyGraph mode=UseSymbols*3 + UseLines
479                                        IN2G_VaryLinesTopGrphRainbow(LineThickness, 1)
480                                else
481                                        ModifyGraph mode=UseSymbols*3   
482                                endif
483                                DoWIndow/F IR3L_MultiSamplePlotPanel
484                        endif
485                       
486                        if(stringmatch(cba.ctrlName,"AddLegend") || stringmatch(cba.ctrlName,"UseOnlyFoldersInLegend"))
487                                DoWIndow/F $(GraphWindowName)
488                                if(AddLegend)
489                                        IN2G_LegendTopGrphFldr(LegendSize, 20, 1, !(UseOnlyFoldersInLegend))
490                                else
491                                        Legend/K/N=text0/W=$(GraphWindowName)
492                                endif
493                                DoWIndow/F IR3L_MultiSamplePlotPanel
494                        endif
495               
496       
497                        break
498                case -1: // control being killed
499                        break
500        endswitch
501        return 0
502End
503//**************************************************************************************
504//**********************************************************************************************************
505//**********************************************************************************************************
506//**********************************************************************************************************
507
508Function IR3L_PopMenuProc(pa) : PopupMenuControl
509        STRUCT WMPopupAction &pa
510
511        String ctrlName=Pa.ctrlName
512        Variable popNum=Pa.popNum
513        String popStr=Pa.popStr
514       
515        if(Pa.eventcode!=2)
516                return 0
517        endif
518        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
519        SVAR GraphWindowName = root:Packages:Irena:MultiSamplePlot:GraphWindowName
520        if(strlen(GraphWindowName)>0)
521                if(stringmatch(ctrlName,"SelectGraphWindows"))
522                        //do something here
523                        SVAR GraphWindowName=root:Packages:Irena:MultiSamplePlot:GraphWindowName
524                        SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
525                        if(stringmatch(popStr,"---"))
526                                GraphWindowName = ""
527                                GraphUserTitle=""
528                                return 0
529                        endif
530                        string StartPopStr=stringFromList(0,popStr,"=")
531                        if(StringMatch(StartPopStr, "Top Graph"))
532                                GetWindow $(stringFromList(0,WinList("*", ";", "WIN:1" ))) title
533                                GraphUserTitle = S_value
534                                GraphWindowName = stringFromList(0,WinList("*", ";", "WIN:1" ))
535                        else
536                                GetWindow $(StartPopStr) title
537                                GraphUserTitle = S_value
538                                GraphWindowName = StartPopStr           
539                        endif
540                        DoWIndow/F $(GraphWindowName)
541                endif
542       
543                if(stringmatch(ctrlName,"SymbolSize"))
544                        //do something here
545                        NVAR UseSymbols = root:Packages:Irena:MultiSamplePlot:UseSymbols
546                        NVAR SymbolSize = root:Packages:Irena:MultiSamplePlot:SymbolSize
547                        NVAR UseLines = root:Packages:Irena:MultiSamplePlot:UseLines
548                        SymbolSize = str2num(popStr)
549                        if(UseLines+UseSymbols<1)
550                                UseSymbols = 1
551                        endif
552                        DoWIndow/F $(GraphWindowName)
553                        if(UseSymbols)
554                                ModifyGraph mode=3*UseSymbols+UseLines 
555                                IN2G_VaryMarkersTopGrphRainbow(1, SymbolSize, 0)
556                        else
557                                ModifyGraph mode=!(UseLines)   
558                        endif
559       
560                endif
561       
562                if(stringmatch(ctrlName,"LegendSize"))
563                        //do something here
564                        NVAR LegendSize = root:Packages:Irena:MultiSamplePlot:LegendSize
565                        NVAR AddLegend = root:Packages:Irena:MultiSamplePlot:AddLegend
566                        NVAR UseOnlyFoldersInLegend = root:Packages:Irena:MultiSamplePlot:UseOnlyFoldersInLegend
567                        LegendSize = str2num(popStr)
568                        if(AddLegend)
569                                        IN2G_LegendTopGrphFldr(LegendSize, 20, 1, !(UseOnlyFoldersInLegend))
570                        endif
571                endif           
572        endif
573        if(stringmatch(ctrlName,"ApplyStyle"))
574                //do something here
575                SVAR SelectedStyle=root:Packages:Irena:MultiSamplePlot:SelectedStyle
576                SelectedStyle = popStr
577                IR3L_SetAndApplyStyle(popStr)   
578        endif
579        if(stringmatch(ctrlName,"SelectedDataPlot"))
580                //do something here
581                SVAR SelectedDataPlot=root:Packages:Irena:MultiSamplePlot:SelectedDataPlot
582                SelectedDataPlot=popStr
583                IR3L_SetPlotLegends()   
584                SVAR SelectedStyle=root:Packages:Irena:MultiSamplePlot:SelectedStyle
585                SelectedStyle = "Lin-Lin"
586                IR3L_SetAndApplyStyle(SelectedStyle)   
587                PopupMenu ApplyStyle,win=IR3L_MultiSamplePlotPanel, popmatch=SelectedStyle
588                IR3L_FixPanelControls()
589        endif
590        DOWIndow/F IR3L_MultiSamplePlotPanel
591end
592
593//**************************************************************************************
594//**************************************************************************************
595//**************************************************************************************
596//**************************************************************************************
597
598Function IR3L_SetVarProc(sva) : SetVariableControl
599        STRUCT WMSetVariableAction &sva
600
601        variable tempP
602        switch( sva.eventCode )
603                case 1: // mouse up
604                case 2: // Enter key
605                                //                      if(stringmatch(sva.ctrlName,"FolderNameMatchString"))
606                                //                              IR3L_UpdateListOfAvailFiles()
607                                //                      endif
608                SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
609                SVAR GraphWindowName = root:Packages:Irena:MultiSamplePlot:GraphWindowName
610                        if(strlen(GraphWindowName)>0)
611                                if(stringmatch(sva.ctrlName,"GraphUserTitle"))
612                                        DoWindow/T $(GraphWindowName),(GraphUserTitle)
613                                endif
614                               
615                                if(stringmatch(sva.ctrlName,"LineThickness"))
616                                        NVAR LineThickness = root:Packages:Irena:MultiSamplePlot:LineThickness
617                                        if(LineThickness<0.5)
618                                                LineThickness = 0.5
619                                        endif
620                                        DoWindow/F $(GraphWindowName)
621                                        IN2G_VaryLinesTopGrphRainbow(LineThickness, 1)
622                                endif
623                               
624                                if(stringmatch(sva.ctrlName,"XOffset") || stringmatch(sva.ctrlName,"YOffset"))
625                                        NVAR XOffset=root:Packages:Irena:MultiSamplePlot:XOffset
626                                        NVAR YOffset=root:Packages:Irena:MultiSamplePlot:YOffset
627                                        NVAR LogXAxis=root:Packages:Irena:MultiSamplePlot:LogXAxis
628                                        NVAR LogYAxis=root:Packages:Irena:MultiSamplePlot:LogYAxis
629                                        DoWindow/F $(GraphWindowName)
630                                        IN2G_OffsetTopGrphTraces(LogXAxis, XOffset ,LogYAxis, YOffset)
631                                endif
632       
633                                break
634                        endif
635                case 3: // live update
636                        break
637                case -1: // control being killed
638                        break
639        endswitch
640        DoWIndow/F IR3L_MultiSamplePlotPanel
641        return 0
642End
643
644
645//**************************************************************************************
646//**************************************************************************************
647Function IR3L_DoubleClickAction(FoldernameStr)
648                string FoldernameStr
649                IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
650                //if called with GraphWindowName = "---" need to create new graph and direct data there, or the tool doe snothing
651                SVAR GraphWindowName=root:Packages:Irena:MultiSamplePlot:GraphWindowName
652                string LocalGraphName
653                variable CreatedNewGraph=0
654                if(strlen(GraphWindowName)<2 || StringMatch(GraphWindowName, "---" ))
655                        LocalGraphName="none"
656                else
657                        LocalGraphName = GraphWindowName
658                endif
659                DOWIndow $(LocalGraphName)
660                if(V_Flag<1)                    //widnow does not exist, need new window to use...
661                        //set some meaningful values for these data first
662                        IR3L_SetPlotLegends()                                                           
663                        //Create new graph and append data to graph
664                        IR3L_CreateNewGraph()           
665                        CreatedNewGraph = 1
666                endif           
667                IR3L_AppendData(FoldernameStr)
668                if(CreatedNewGraph)
669                        IR3L_ApplyPresetFormating(GraphWindowName)
670                endif
671
672end
673//**********************************************************************************************************
674//**********************************************************************************************************
675//**********************************************************************************************************
676
677static Function IR3L_AppendData(FolderNameStr)
678        string FolderNameStr
679       
680        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
681        DfRef OldDf=GetDataFolderDFR()
682        SetDataFolder root:Packages:Irena:MultiSamplePlot                                       //go into the folder
683                SVAR DataStartFolder=root:Packages:Irena:MultiSamplePlot:DataStartFolder
684                SVAR DataFolderName=root:Packages:Irena:MultiSamplePlot:DataFolderName
685                SVAR IntensityWaveName=root:Packages:Irena:MultiSamplePlot:IntensityWaveName
686                SVAR QWavename=root:Packages:Irena:MultiSamplePlot:QWavename
687                SVAR ErrorWaveName=root:Packages:Irena:MultiSamplePlot:ErrorWaveName
688                SVAR dQWavename=root:Packages:Irena:MultiSamplePlot:dQWavename
689                NVAR UseIndra2Data=root:Packages:Irena:MultiSamplePlot:UseIndra2Data
690                NVAR UseQRSdata=root:Packages:Irena:MultiSamplePlot:UseQRSdata
691                NVAR useResults=root:Packages:Irena:MultiSamplePlot:useResults
692                SVAR DataSubType = root:Packages:Irena:MultiSamplePlot:DataSubType
693                //these are variables used by the control procedure
694                NVAR  UseUserDefinedData=  root:Packages:Irena:MultiSamplePlot:UseUserDefinedData
695                NVAR  UseModelData = root:Packages:Irena:MultiSamplePlot:UseModelData
696                SVAR DataFolderName  = root:Packages:Irena:MultiSamplePlot:DataFolderName
697                SVAR IntensityWaveName = root:Packages:Irena:MultiSamplePlot:IntensityWaveName
698                SVAR QWavename = root:Packages:Irena:MultiSamplePlot:QWavename
699                SVAR ErrorWaveName = root:Packages:Irena:MultiSamplePlot:ErrorWaveName
700                //graph control variable
701                SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
702                SVAR GraphWindowName=root:Packages:Irena:MultiSamplePlot:GraphWindowName
703                SVAR ResultsDataTypesLookup=root:Packages:IrenaControlProcs:ResultsDataTypesLookup
704                //what data are actually plot???
705                SVAR SelectedDataPlot=root:Packages:Irena:MultiSamplePlot:SelectedDataPlot
706                SVAR ListOfDefinedDataPlots=root:Packages:Irena:MultiSamplePlot:ListOfDefinedDataPlots
707
708                IR3C_SelectWaveNamesData("Irena:MultiSamplePlot", FolderNameStr)                        //thsi routine will presetn names in strings as needed
709                Wave/Z SourceIntWv=$(DataFolderName+IntensityWaveName)
710                Wave/Z SourceQWv=$(DataFolderName+QWavename)
711                Wave/Z SourceErrorWv=$(DataFolderName+ErrorWaveName)
712                Wave/Z SourcedQWv=$(DataFolderName+dQWavename)
713                if(!WaveExists(SourceIntWv)||   !WaveExists(SourceQWv))
714                        print "Data selection failed for "+DataFolderName
715                        return 0
716                endif
717                //create local copies of original data, inc case their are needed later
718                Duplicate/Free SourceIntWv, SourceIntWvOrig
719                Duplicate/Free SourceQWv, SourceQWvOrig
720                if(WaveExists(SourceErrorWv))
721                        Duplicate/Free SourceErrorWv, SourceErrorWvOrig
722                endif
723                //create graph if needed.
724                if(StringMatch(GraphWindowName, "---" ))
725                                IR3L_CreateNewGraph()                                                                                   
726                endif
727                DoWIndow  $(GraphWindowName)
728                if(V_Flag==0)
729                        print "Graph does not exist, nothing to append to, stopping... "
730                        SetDataFolder oldDf
731                        return 0
732                endif
733                //now we need to create data, if they do not exist. Here is where we decide what data user wants to plot.
734                //      ListOfDefinedDataPlots = "X-Y (q-Int, etc.);Guinier (Q^2-ln(I));Kratky (Q-IQ^2);Porod (Q^4-IQ^4);DimLess Kratky (Q-I*(Q*Rg)^2/I0);"
735                strswitch(SelectedDataPlot)                                             // string switch
736                        case "X-Y (q-Int, etc.)":                               // execute if case matches expression
737                                //nothing to do...
738                                break                                                                           // exit from switch
739                        case "Guinier (Q^2-ln(I))":                             // execute if case matches expression
740                                //create and save Guinier data
741                                Duplicate/O SourceIntWv, $(DataFolderName+"Guinier_"+IntensityWaveName)
742                                Duplicate/O SourceQWv, $(DataFolderName+"Guinier_"+QWavename)
743                                Wave SourceIntWv=$(DataFolderName+"Guinier_"+IntensityWaveName)
744                                Wave SourceQWv=$(DataFolderName+"Guinier_"+QWavename)
745                                SourceQWv = SourceQWv^2
746                                SourceIntWv = ln(SourceIntWv)                                           //error propagation, see: https://terpconnect.umd.edu/~toh/models/ErrorPropagation.pdf
747                                if(WaveExists(SourceErrorWv))
748                                        Duplicate/O SourceErrorWv, $(DataFolderName+"Guinier_"+ErrorWaveName)
749                                                Wave SourceErrorWv=$(DataFolderName+"Guinier_"+ErrorWaveName)
750                                        SourceErrorWv = SourceErrorWvOrig/SourceIntWvOrig
751                                endif
752                                break
753                        case "Guinier Rod (Q^2-ln(I*Q))":                               // execute if case matches expression
754                                //create and save Guinier data
755                                Duplicate/O SourceIntWv, $(DataFolderName+"GuinierR_"+IntensityWaveName)
756                                Duplicate/O SourceQWv, $(DataFolderName+"GuinierR_"+QWavename)
757                                Wave SourceIntWv=$(DataFolderName+"GuinierR_"+IntensityWaveName)
758                                Wave SourceQWv=$(DataFolderName+"GuinierR_"+QWavename)
759                                SourceQWv = SourceQWv^2
760                                SourceIntWv = ln(SourceIntWv*SourceQWvOrig)                                             //error propagation, see: https://terpconnect.umd.edu/~toh/models/ErrorPropagation.pdf
761                                if(WaveExists(SourceErrorWv))
762                                        Duplicate/O SourceErrorWv, $(DataFolderName+"GuinierR_"+ErrorWaveName)
763                                                Wave SourceErrorWv=$(DataFolderName+"GuinierR_"+ErrorWaveName)
764                                        SourceErrorWv = (SourceErrorWvOrig)/(SourceIntWvOrig)
765                                endif
766                                break
767                        case "Guinier Sheet (Q^2-ln(I*Q^2))":                           // execute if case matches expression
768                                //create and save Guinier data
769                                Duplicate/O SourceIntWv, $(DataFolderName+"GuinierS_"+IntensityWaveName)
770                                Duplicate/O SourceQWv, $(DataFolderName+"GuinierS_"+QWavename)
771                                Wave SourceIntWv=$(DataFolderName+"GuinierS_"+IntensityWaveName)
772                                Wave SourceQWv=$(DataFolderName+"GuinierS_"+QWavename)
773                                SourceQWv = SourceQWv^2
774                                SourceIntWv = ln(SourceIntWv*SourceQWvOrig^2)                                           //error propagation, see: https://terpconnect.umd.edu/~toh/models/ErrorPropagation.pdf
775                                if(WaveExists(SourceErrorWv))
776                                        Duplicate/O SourceErrorWv, $(DataFolderName+"GuinierS_"+ErrorWaveName)
777                                                Wave SourceErrorWv=$(DataFolderName+"GuinierS_"+ErrorWaveName)
778                                        SourceErrorWv = (SourceErrorWvOrig)/(SourceIntWvOrig)
779                                endif
780                                break
781                        case "Kratky (Q-IQ^2)":                                 // execute if case matches expression
782                                //create and save Kratky data
783                                Duplicate/O SourceIntWv, $(DataFolderName+"Kratky_"+IntensityWaveName)
784                                Duplicate/O SourceQWv, $(DataFolderName+"Kratky_"+QWavename)
785                                Wave SourceIntWv=$(DataFolderName+"Kratky_"+IntensityWaveName)
786                                Wave SourceQWv=$(DataFolderName+"Kratky_"+QWavename)
787                                SourceIntWv = SourceIntWv * SourceQWv^2
788                                if(WaveExists(SourceErrorWv))
789                                        Duplicate/O SourceErrorWv, $(DataFolderName+"Kratky_"+ErrorWaveName)
790                                        Wave SourceErrorWv=$(DataFolderName+"Kratky_"+ErrorWaveName)
791                                        SourceErrorWv = SourceErrorWv * SourceQWv^2
792                                endif
793                                break
794                        case "DimLess Kratky (Q-I*(Q*Rg)^2/I0)":                                        // execute if case matches expression
795                                //create and save Kraky data corrected for Rg and I0
796                                //need to find Guinier fit results
797                                Wave/Z/T SampleName =  root:GuinierFitResults:SampleName
798                                Wave/Z GuinierI0 = root:GuinierFitResults:GuinierI0
799                                Wave/Z GuinierRg = root:GuinierFitResults:GuinierRg
800                                if(!WaveExists(SampleName) || !WaveExists(GuinierI0) ||!WaveExists(GuinierRg))
801                                        Abort "Guinier results not found. In order to use this data type, you need to save results from Guinier fit using Simple Fits tool for all data you want to plot"
802                                endif
803                                variable I0 = IR3L_LookUpValueForWaveName(DataFolderName, SampleName,GuinierI0)
804                                variable Rg = IR3L_LookUpValueForWaveName(DataFolderName, SampleName,GuinierRg)
805                                if(numtype(I0) || numtype(Rg))
806                                        Abort "Could not find Guinier results for "+DataFolderName+" in the Guinier fit results from Simple fit."
807                                endif
808                                Duplicate/O SourceIntWv, $(DataFolderName+"DLKratky_"+IntensityWaveName)
809                                Duplicate/O SourceQWv, $(DataFolderName+"DLKratky_"+QWavename)
810                                Wave SourceIntWv=$(DataFolderName+"DLKratky_"+IntensityWaveName)
811                                Wave SourceQWv=$(DataFolderName+"DLKratky_"+QWavename)
812                                SourceIntWv = SourceIntWv * ((Rg*SourceQWv)^2)/I0
813                                if(WaveExists(SourceErrorWv))
814                                        Duplicate/O SourceErrorWv, $(DataFolderName+"DLKratky_"+ErrorWaveName)
815                                        Wave SourceErrorWv=$(DataFolderName+"DLKratky_"+ErrorWaveName)
816                                        SourceErrorWv = SourceErrorWv * ((Rg*SourceQWv)^2)/I0
817                                endif
818                                break
819                        case "Porod (Q^4-IQ^4)":                                        // execute if case matches expression
820                                //create and save Porod data
821                                Duplicate/O SourceIntWv, $(DataFolderName+"Porod_"+IntensityWaveName)
822                                Duplicate/O SourceQWv, $(DataFolderName+"Porod_"+QWavename)
823                                Wave SourceIntWv=$(DataFolderName+"Porod_"+IntensityWaveName)
824                                Wave SourceQWv=$(DataFolderName+"Porod_"+QWavename)
825                                SourceQWv = SourceQWv^4
826                                SourceIntWv = SourceIntWv * SourceQWv
827                                if(WaveExists(SourceErrorWv))
828                                        Duplicate/O SourceErrorWv, $(DataFolderName+"Porod_"+ErrorWaveName)
829                                        Wave SourceErrorWv=$(DataFolderName+"Porod_"+ErrorWaveName)
830                                        SourceErrorWv = SourceErrorWv * SourceQWv
831                                endif
832                                break
833                        default:                                                                                // optional default expression executed, this is basically X-Y case again
834                                                                                                                        // when no case matches
835                endswitch
836               
837                CheckDisplayed /W=$(GraphWindowName) SourceIntWv
838                if(V_Flag==0)
839                        AppendToGraph /W=$(GraphWindowName) SourceIntWv vs  SourceQWv
840                        if(WaveExists(SourceErrorWv))
841                                ErrorBars /W=$(GraphWindowName)  $(NameOfWave(SourceIntWv)) Y,wave=(SourceErrorWv,SourceErrorWv)
842                        endif
843                        print "Appended : "+DataFolderName+IntensityWaveName +" top the graph : "+GraphWindowName
844                else
845                        print "Could not append "+DataFolderName+IntensityWaveName+" to the graph : "+GraphWindowName+" this wave is already displayed in the graph"
846                endif
847                //append data to graph
848                NVAR ApplyFormatingEveryTime = root:Packages:Irena:MultiSamplePlot:ApplyFormatingEveryTime
849                if(ApplyFormatingEveryTime)
850                        IR3L_ApplyPresetFormating(GraphWindowName)
851                endif
852        SetDataFolder oldDf
853        return 1
854end
855//**********************************************************************************************************
856//**********************************************************************************************************
857//**********************************************************************************************************
858
859static Function IR3L_LookUpValueForWaveName(SampleNameStr, SampleNameWV,ValueWv)
860                string SampleNameStr                    //folder name only, no wabe nae and include ":" at the end.
861                wave/T SampleNameWV
862                Wave ValueWv
863               
864        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
865        variable i
866        For (i=0;i<numpnts(SampleNameWV);i+=1)
867                if(StringMatch(SampleNameStr, SampleNameWV[i]))
868                        return ValueWv[i]
869                endif
870        endfor
871        return NaN
872end
873//**********************************************************************************************************
874//**********************************************************************************************************
875//**********************************************************************************************************
876
877Function IR3L_ButtonProc(ba) : ButtonControl
878        STRUCT WMButtonAction &ba
879
880        variable i
881        string FoldernameStr
882        switch( ba.eventCode )
883                case 2: // mouse up
884                        SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
885                        SVAR GraphWindowName=root:Packages:Irena:MultiSamplePlot:GraphWindowName
886                        // click code here
887                        if(stringmatch(ba.ctrlname,"NewGraphPlotData"))
888                                //set some meaningful values for these data first
889                                IR3L_SetPlotLegends()                                                           
890                                //Create new graph and append data to graph
891                                //use $(GraphWindowName) for now... To be changed.
892                                //KillWindow/Z $(GraphWindowName)
893                                IR3L_CreateNewGraph()
894                                //now, append the data to it...
895                                Wave/T ListOfAvailableData = root:Packages:Irena:MultiSamplePlot:ListOfAvailableData
896                                Wave SelectionOfAvailableData = root:Packages:Irena:MultiSamplePlot:SelectionOfAvailableData   
897                                for(i=0;i<numpnts(ListOfAvailableData);i+=1)
898                                        if(SelectionOfAvailableData[i]>0.5)
899                                                IR3L_AppendData(ListOfAvailableData[i])
900                                        endif
901                                endfor
902                                DoUpdate
903                                IR3L_ApplyPresetFormating(GraphWindowName)
904                        endif
905                        if(stringmatch(ba.ctrlname,"AppendPlotData"))
906                                //append data to graph
907                                DoWIndow $(GraphWindowName)
908                                if(V_Flag==0)
909                                        //IR3L_CreateNewGraph()
910                                        print "could not find graph we can control"
911                                endif
912                                Wave/T ListOfAvailableData = root:Packages:Irena:MultiSamplePlot:ListOfAvailableData
913                                Wave SelectionOfAvailableData = root:Packages:Irena:MultiSamplePlot:SelectionOfAvailableData   
914                                for(i=0;i<numpnts(ListOfAvailableData);i+=1)    // Initialize variables;continue test
915                                        if(SelectionOfAvailableData[i]>0.5)
916                                                IR3L_AppendData(ListOfAvailableData[i])
917                                        endif
918                                endfor                                          // Execute body code until continue test is FALSE
919                        endif
920                        if(stringmatch(ba.ctrlname,"ApplyPresetFormating"))
921                                //append data to graph
922                                DoWIndow $(GraphWindowName)
923                                if(V_Flag)
924                                        IR3L_ApplyPresetFormating(GraphWindowName)
925                                endif
926                        endif
927                        if(cmpstr(ba.ctrlname,"GetHelp")==0)
928                                //Open www manual with the right page
929                                IN2G_OpenWebManual("Irena/Plotting.html#plotting-tool-3")
930                        endif
931                        if(cmpstr(ba.ctrlname,"ExportGraphJPG")==0)
932                                DoWindow/F $(GraphWindowName)
933                                SavePICT/E=-6/B=288     as (GraphUserTitle)                             //this is jpg
934                                DoWIndow/F IR3L_MultiSamplePlotPanel
935                        endif
936                        if(cmpstr(ba.ctrlname,"ExportGraphTif")==0)
937                                DoWindow/F $(GraphWindowName)
938                                SavePICT/E=-7/B=288     as (GraphUserTitle)                                     //this is TIFF
939                                DoWIndow/F IR3L_MultiSamplePlotPanel
940                        endif
941                        if(cmpstr(ba.ctrlname,"SaveGraphAsFile")==0)
942                                DoWindow/F $(GraphWindowName)
943                                SaveGraphCopy /I /W=$(GraphWindowName)                                                  //      saves current graph as Igor packed experiment
944                                DoWIndow/F IR3L_MultiSamplePlotPanel
945                        endif
946
947                        if(stringmatch(ba.ctrlName,"SelectAll"))
948                                Wave/Z SelectionOfAvailableData = root:Packages:Irena:MultiSamplePlot:SelectionOfAvailableData
949                                if(WaveExists(SelectionOfAvailableData))
950                                        SelectionOfAvailableData=1
951                                endif
952                        endif
953
954                        break
955                case -1: // control being killed
956                        break
957        endswitch
958        return 0
959End
960//**********************************************************************************************************
961//**********************************************************************************************************
962//**********************************************************************************************************
963static Function IR3L_CreateNewGraph()
964
965        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
966        SVAR GraphWindowName=root:Packages:Irena:MultiSamplePlot:GraphWindowName
967        SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
968        //first create a new GraphWindowName, this is new graph...
969        string basename="MultiDataPlot_"
970        GraphWindowName = UniqueName(basename, 6, 0)
971        Display /K=1/W=(200,30,1000,730) as GraphUserTitle
972        DoWindow/C $(GraphWindowName)
973        AutoPositionWindow /M=0 /R=IR3L_MultiSamplePlotPanel $(GraphWindowName)
974end
975//**********************************************************************************************************
976//**********************************************************************************************************
977//**********************************************************************************************************
978static Function IR3L_SetAndApplyStyle(WHichStyle)       
979        string WHichStyle
980       
981        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
982        //      ListOfDefinedStyles = "Log-Log;Lin-Log;VolumeSizeDistribution;NumberSizeDistribution;"
983                SVAR GraphWindowName=root:Packages:Irena:MultiSamplePlot:GraphWindowName
984                NVAR LogXAxis=root:Packages:Irena:MultiSamplePlot:LogXAxis
985                NVAR LogYAxis=root:Packages:Irena:MultiSamplePlot:LogYAxis
986                NVAR Colorize=root:Packages:Irena:MultiSamplePlot:Colorize
987                NVAR AddLegend=root:Packages:Irena:MultiSamplePlot:AddLegend
988                SVAR XAxisLegend=root:Packages:Irena:MultiSamplePlot:XAxisLegend
989                SVAR YAxislegend=root:Packages:Irena:MultiSamplePlot:YAxislegend       
990                SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
991                NVAR LineThickness = root:Packages:Irena:MultiSamplePlot:LineThickness
992                NVAR UseSymbols = root:Packages:Irena:MultiSamplePlot:UseSymbols
993                NVAR UseLines = root:Packages:Irena:MultiSamplePlot:UseLines
994                NVAR SymbolSize = root:Packages:Irena:MultiSamplePlot:SymbolSize
995                NVAR LegendSize = root:Packages:Irena:MultiSamplePlot:LegendSize
996                NVAR UseOnlyFoldersInLegend = root:Packages:Irena:MultiSamplePlot:UseOnlyFoldersInLegend
997
998        if(stringmatch(WHichStyle,"log-Log"))
999                LogXAxis = 1
1000                LogYAxis = 1
1001                Colorize = 1
1002                AddLegend = 1
1003                LineThickness  = 2
1004                UseSymbols = 0
1005                UseLines = 1
1006                SymbolSize = 2
1007                LegendSize = 12
1008                UseOnlyFoldersInLegend = 1
1009        elseif(stringmatch(WHichStyle,"Lin-Log"))
1010                LogXAxis = 1
1011                LogYAxis = 0
1012                Colorize = 1
1013                AddLegend = 1
1014                LineThickness  = 2
1015                UseSymbols = 0
1016                UseLines = 1
1017                SymbolSize = 2
1018                LegendSize = 12
1019                UseOnlyFoldersInLegend = 1
1020        elseif(stringmatch(WHichStyle,"Lin-Lin"))
1021                LogXAxis = 0
1022                LogYAxis = 0
1023                Colorize = 1
1024                AddLegend = 1
1025                LineThickness  = 2
1026                UseSymbols = 0
1027                UseLines = 1
1028                SymbolSize = 2
1029                LegendSize = 12
1030                UseOnlyFoldersInLegend = 1
1031        elseif(stringmatch(WHichStyle,"VolumeSizeDistribution"))
1032                LogXAxis = 1
1033                LogYAxis = 0
1034                Colorize = 1
1035                AddLegend = 1
1036                LineThickness  = 2
1037                UseSymbols = 0
1038                UseLines = 1
1039                SymbolSize = 2
1040                LegendSize = 12
1041                UseOnlyFoldersInLegend = 1
1042        elseif(stringmatch(WHichStyle,"NumberSizeDistribution"))
1043                LogXAxis = 1
1044                LogYAxis = 0
1045                Colorize = 1
1046                AddLegend = 1
1047                LineThickness  = 2
1048                UseSymbols = 0
1049                UseLines = 1
1050                SymbolSize = 2
1051                LegendSize = 12
1052                UseOnlyFoldersInLegend = 1
1053        endif
1054        IR3L_ApplyPresetFormating(GraphWindowName)     
1055end
1056//**********************************************************************************************************
1057//**********************************************************************************************************
1058//**********************************************************************************************************
1059static Function IR3L_ApplyPresetFormating(GraphNameString)
1060                string GraphNameString
1061
1062        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1063        if(strlen(GraphNameString)<1)
1064                return 0
1065        endif
1066        DoWIndow $(GraphNameString)
1067        if(V_Flag)
1068                NVAR LogXAxis=root:Packages:Irena:MultiSamplePlot:LogXAxis
1069                NVAR LogYAxis=root:Packages:Irena:MultiSamplePlot:LogYAxis
1070                NVAR Colorize=root:Packages:Irena:MultiSamplePlot:Colorize
1071                NVAR AddLegend=root:Packages:Irena:MultiSamplePlot:AddLegend
1072                SVAR XAxisLegend=root:Packages:Irena:MultiSamplePlot:XAxisLegend
1073                SVAR YAxislegend=root:Packages:Irena:MultiSamplePlot:YAxislegend       
1074                SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
1075                NVAR LineThickness = root:Packages:Irena:MultiSamplePlot:LineThickness
1076                NVAR UseSymbols = root:Packages:Irena:MultiSamplePlot:UseSymbols
1077                NVAR UseLines = root:Packages:Irena:MultiSamplePlot:UseLines
1078                NVAR SymbolSize = root:Packages:Irena:MultiSamplePlot:SymbolSize
1079                NVAR LegendSize = root:Packages:Irena:MultiSamplePlot:LegendSize
1080                NVAR UseOnlyFoldersInLegend = root:Packages:Irena:MultiSamplePlot:UseOnlyFoldersInLegend
1081                NVAR DisplayErrorBars = root:Packages:Irena:MultiSamplePlot:DisplayErrorBars
1082                //mirror axis when needed, but do not choke on graphs with more axis...
1083                if(ItemsInList(AxisList(GraphNameString))<3)
1084                        ModifyGraph/W= $(GraphNameString)/Z  mirror=1
1085                endif
1086                DoWIndow/F $(GraphNameString)
1087                IN2G_ShowHideErrorBars(DisplayErrorBars, topGraphStr=GraphNameString)
1088                if(LogXAxis)
1089                        ModifyGraph/W= $(GraphNameString)/Z log(bottom)=1
1090                else
1091                        ModifyGraph/W= $(GraphNameString)/Z log(bottom)=0
1092                endif
1093                if(LogYAxis)
1094                        ModifyGraph/W= $(GraphNameString)/Z log(left)=1
1095                else
1096                        ModifyGraph/W= $(GraphNameString)/Z log(left)=0
1097                endif
1098                if(strlen(GraphUserTitle)>0)
1099                        DoWindow/T $(GraphNameString),GraphUserTitle   
1100                endif
1101                if(strlen(XAxisLegend)>0)
1102                        Label/Z/W=$(GraphNameString) bottom XAxisLegend
1103                endif
1104                if(strlen(YAxisLegend)>0)
1105                        Label/Z/W=$(GraphNameString) left YAxisLegend
1106                endif
1107                       
1108                if(Colorize)
1109                        DoWIndow/F  $(GraphNameString)
1110                        IN2G_ColorTopGrphRainbow()
1111                else
1112                        ModifyGraph/Z/W=$(GraphNameString) rgb=(0,0,0)
1113                endif
1114                if(AddLegend)
1115                        IN2G_LegendTopGrphFldr(LegendSize, 20, 1, !(UseOnlyFoldersInLegend))
1116                else
1117                        Legend/K/N=text0/W= $(GraphNameString)
1118                endif
1119                if(UseLines)
1120                        if(UseLines+UseSymbols<1)
1121                                UseSymbols = !UseLines
1122                        endif
1123                        if(LineThickness<0.5)
1124                                LineThickness = 0.5
1125                        endif
1126                        ModifyGraph/Z/W=$(GraphNameString) mode=UseSymbols*3 + UseLines
1127                        IN2G_VaryLinesTopGrphRainbow(LineThickness, 1)
1128                else
1129                        ModifyGraph/Z/W=$(GraphNameString) mode=UseSymbols*3   
1130                endif
1131                if(UseSymbols)
1132                        if(UseLines+UseSymbols<1)
1133                                UseLines = !UseSymbols
1134                        endif
1135                        ModifyGraph/Z/W=$(GraphNameString) mode=3*UseSymbols+UseLines   
1136                        IN2G_VaryMarkersTopGrphRainbow(1, SymbolSize, 0)
1137                else
1138                        ModifyGraph/Z/W=$(GraphNameString) mode=!(UseLines)     
1139                endif
1140                NVAR XOffset=root:Packages:Irena:MultiSamplePlot:XOffset
1141                NVAR YOffset=root:Packages:Irena:MultiSamplePlot:YOffset
1142                NVAR LogXAxis=root:Packages:Irena:MultiSamplePlot:LogXAxis
1143                NVAR LogYAxis=root:Packages:Irena:MultiSamplePlot:LogYAxis
1144                IN2G_OffsetTopGrphTraces(LogXAxis, XOffset ,LogYAxis, YOffset)
1145
1146
1147                TextBox/W=$(GraphNameString)/C/N=DateTimeTag/F=0/A=RB/E=2/X=2.00/Y=1.00 "\\Z07"+date()+", "+time()             
1148       
1149                DoWIndow/F IR3L_MultiSamplePlotPanel
1150
1151        endif
1152end
1153
1154//**********************************************************************************************************
1155//**********************************************************************************************************
1156//**********************************************************************************************************
1157
1158static Function IR3L_SetPlotLegends()                           //this function will set axis legends and otehr stuff based on waves
1159                //applies only when creating new graph...
1160
1161                IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1162                NVAR UseIndra2Data=root:Packages:Irena:MultiSamplePlot:UseIndra2Data
1163                NVAR UseQRSdata=root:Packages:Irena:MultiSamplePlot:UseQRSdata
1164                NVAR  UseResults=  root:Packages:Irena:MultiSamplePlot:UseResults
1165                NVAR  UseUserDefinedData=  root:Packages:Irena:MultiSamplePlot:UseUserDefinedData
1166                NVAR  UseModelData = root:Packages:Irena:MultiSamplePlot:UseModelData
1167               
1168                SVAR XAxisLegend=root:Packages:Irena:MultiSamplePlot:XAxisLegend
1169                SVAR YAxislegend=root:Packages:Irena:MultiSamplePlot:YAxislegend       
1170                SVAR GraphUserTitle=root:Packages:Irena:MultiSamplePlot:GraphUserTitle
1171                SVAR GraphWindowName=root:Packages:Irena:MultiSamplePlot:GraphWindowName
1172                SVAR DataFolderName  = root:Packages:Irena:MultiSamplePlot:DataFolderName
1173                SVAR IntensityWaveName = root:Packages:Irena:MultiSamplePlot:IntensityWaveName
1174                SVAR QWavename = root:Packages:Irena:MultiSamplePlot:QWavename
1175                SVAR ErrorWaveName = root:Packages:Irena:MultiSamplePlot:ErrorWaveName
1176                SVAR DataSubType = root:Packages:Irena:MultiSamplePlot:DataSubType
1177                SVAR SelectedResultsTool = root:Packages:Irena:MultiSamplePlot:SelectedResultsTool
1178                SVAR SelectedResultsType = root:Packages:Irena:MultiSamplePlot:SelectedResultsType
1179                SVAR ResultsGenerationToUse = root:Packages:Irena:MultiSamplePlot:ResultsGenerationToUse
1180               
1181                string yAxisUnits="arbitrary"
1182                string xAxisUnits = ""
1183                variable CanDoLinearization = 0
1184                string InputDataType=""
1185                //now, what can we do about naming this for users....
1186                if(UseIndra2Data)
1187                        IntensityWaveName = DataSubType
1188                        Wave/Z SourceIntWv=$(DataFolderName+IntensityWaveName)
1189                        if(WaveExists(SourceIntWv))
1190                                yAxisUnits= StringByKey("Units", note(SourceIntWv),"=",";")
1191                                //format the units...
1192                                if(stringmatch(yAxisUnits,"cm2/g"))
1193                                        yAxisUnits = "cm\S2\Mg\S-1\M"
1194                                elseif(stringmatch(yAxisUnits,"1/cm"))
1195                                        yAxisUnits = "cm\S2\M/cm\S3\M"
1196                                endif
1197                        endif
1198                        if(StringMatch(DataSubType, "DSM_Int" ))
1199                                GraphUserTitle = "USAXS desmeared data"
1200                                XAxisLegend = "Q [A\S-1\M]"
1201                                YAxislegend = "Intensity ["+yAxisUnits+"]"
1202                                CanDoLinearization = 1
1203                                InputDataType="USAXS desmeared data"
1204                        elseif(StringMatch(DataSubType, "SMR_Int" ))
1205                                GraphUserTitle = "USAXS slit smeared data"
1206                                XAxisLegend = "Q [A\S-1\M]"
1207                                YAxislegend = "Intensity ["+yAxisUnits+"]"
1208                                InputDataType="USAXS slit smeared data"
1209                        elseif(StringMatch(DataSubType, "Blank_R_int" ))
1210                                GraphUserTitle = "USAXS Blank R Intensity"
1211                                XAxisLegend = "Q [A\S-1\M]"
1212                                YAxislegend = "Intensity"
1213                                InputDataType="USAXS Blank data"
1214                        elseif(StringMatch(DataSubType, "R_int" ))
1215                                GraphUserTitle = "USAXS R Intensity"
1216                                XAxisLegend = "Q [A\S-1\M]"
1217                                YAxislegend = "Intensity [normalized, arbitrary]"
1218                                InputDataType="USAXS R intensity data"
1219                        elseif(StringMatch(DataSubType, "USAXS_PD" ))
1220                                GraphUserTitle = "USAXS Diode Intensity"
1221                                XAxisLegend = "AR angle [degrees]"
1222                                YAxislegend = "Diode Intensity [not normalized, arbitrary counts]"
1223                                InputDataType="USAXS Diode intensity data"
1224                        elseif(StringMatch(DataSubType, "Monitor" ))
1225                                GraphUserTitle = "USAXS I0 Intensity"
1226                                XAxisLegend = "AR angle [degrees]"
1227                                YAxislegend = "I0 Intensity [not normalized, counts]"
1228                                InputDataType="USAXS I0 intensity data"
1229                        else
1230                                GraphUserTitle = "USAXS data"
1231                                XAxisLegend = ""
1232                                YAxislegend = ""                       
1233                                InputDataType="USAXS data"
1234                        endif
1235                elseif(UseQRSdata)
1236                                GraphUserTitle = "SAXS/WAXS data"
1237                                XAxisLegend = "Q [A\S-1\M]"
1238                                YAxislegend = "Intensity [arb]"
1239                                CanDoLinearization = 1
1240                                InputDataType="QRS data"
1241                elseif(UseResults)
1242                        //      AllKnownToolsResults = "Unified Fit;Size Distribution;Modeling II;Modeling I;Small-angle diffraction;Analytical models;Fractals;PDDF;Reflectivity;Guinier-Porod;"
1243                        if(StringMatch(SelectedResultsTool, "Unified Fit" ))
1244                                GraphUserTitle = "Unified Fit results"
1245                                if(StringMatch(SelectedResultsType, "*SizeDistVol*" ))
1246                                        XAxisLegend = "Size [A]"
1247                                        YAxislegend = "Volume Fraction [arbitrary]"
1248                                elseif(StringMatch(SelectedResultsType, "*SizeDistNum*" ))
1249                                        XAxisLegend = "Size [A]"
1250                                        YAxislegend = "Number Fraction [arbitrary]"
1251                                endif
1252                                InputDataType="Unified fit results"
1253                        elseif(StringMatch(SelectedResultsTool, "Size Distribution" ))
1254                                GraphUserTitle = "Size Distribution results"
1255                                XAxisLegend = "Q [A\S-1\M]"
1256                                YAxislegend = "Intensity [arb]"
1257                                if(StringMatch(SelectedResultsType, "SizesVolume*" ))
1258                                        XAxisLegend = "Size [A]"
1259                                        YAxislegend = "Volume Fraction [1/A]"
1260                                elseif(StringMatch(SelectedResultsType, "SizesNumber*" ))
1261                                        XAxisLegend = "Size [A]"
1262                                        YAxislegend = "Number Fraction [1/(Acm\S3\M)]"
1263                                endif
1264                                InputDataType="Size distribution results"
1265                        elseif(StringMatch(SelectedResultsTool, "Modeling II" ))
1266                                GraphUserTitle = "Modeling results"
1267                                XAxisLegend = "Q [A\S-1\M]"
1268                                YAxislegend = "Intensity [arb]"
1269                                if(StringMatch(SelectedResultsType, "VolumeDist*" ))
1270                                        XAxisLegend = "Size [A]"
1271                                        YAxislegend = "Volume Fraction [1/A]"
1272                                elseif(StringMatch(SelectedResultsType, "NumberDist*" ))
1273                                        XAxisLegend = "Size [A]"
1274                                        YAxislegend = "Number Fraction [1/(Acm\S3\M)]"
1275                                endif
1276                                InputDataType="Modeling results"
1277                        elseif(StringMatch(SelectedResultsTool, "PDDF" ))
1278                                GraphUserTitle = "PDDF results"
1279                                XAxisLegend = "Radius [A]"
1280                                YAxislegend = "PDDF [arb]"
1281                                if(StringMatch(SelectedResultsType, "PDDFDistFunction" ))
1282                                        XAxisLegend = "Radius [A]"
1283                                        YAxislegend = "PDDF"
1284                                elseif(StringMatch(SelectedResultsType, "PDDFGammaFunction" ))
1285                                        XAxisLegend = "Radius [A]"
1286                                        YAxislegend = "Gamma"
1287                                elseif(StringMatch(SelectedResultsType, "PDDFIntensity" ))
1288                                        XAxisLegend = "Q [A\S-1\M]"
1289                                        YAxislegend = "Intensity [arb]"
1290                                elseif(StringMatch(SelectedResultsType, "PDDFChiSquared" ))
1291                                        XAxisLegend = "Radius [A]"
1292                                        YAxislegend = "Chi\S2"
1293                                endif
1294                                InputDataType="Modeling results"
1295                        elseif(StringMatch(SelectedResultsTool, "Small-angle diffraction" ))
1296                                GraphUserTitle = "Small-angle diffraction results"
1297                                XAxisLegend = "Q [A\S-1\M]"
1298                                YAxislegend = "Intensity [arb]"
1299                                InputDataType="Small-angle diffraction results"
1300                        elseif(StringMatch(SelectedResultsTool, "Analytical models" ))
1301                                GraphUserTitle = "Analytical models results"
1302                                XAxisLegend = "Q [A\S-1\M]"
1303                                YAxislegend = "Intensity [arb]"
1304                                InputDataType="Analytical models results"
1305                        elseif(StringMatch(SelectedResultsTool, "Fractals" ))
1306                                GraphUserTitle = "Fractals results"
1307                                XAxisLegend = "Q [A\S-1\M]"
1308                                YAxislegend = "Intensity [arb]"
1309                                InputDataType="Fractals results"
1310                        elseif(StringMatch(SelectedResultsTool, "Reflectivity" ))
1311                                GraphUserTitle = "Reflectivity results"
1312                                XAxisLegend = "Q [A\S-1\M]"
1313                                YAxislegend = "Intensity [arb]"
1314                                InputDataType="Reflectivity results"
1315                        elseif(StringMatch(SelectedResultsTool, "Guinier-Porod" ))
1316                                GraphUserTitle = "Guinier-Porod results"
1317                                XAxisLegend = "Q [A\S-1\M]"
1318                                YAxislegend = "Intensity [arb]"
1319                                InputDataType="Guinier-Porod results"
1320                        endif
1321                else
1322                                GraphUserTitle = "Arbitrary data Plot"
1323                                XAxisLegend = "X"
1324                                YAxislegend = "Y"
1325                                InputDataType="User selected"
1326                endif
1327                //now, this is for standard X-Y data. Next we need to deal with option to plot linearization plots...
1328       
1329                SVAR SelectedDataPlot=root:Packages:Irena:MultiSamplePlot:SelectedDataPlot
1330                //      ListOfDefinedDataPlots = "X-Y (q-Int, etc.);Guinier (Q^2-ln(I));Kratky (Q-IQ^2);Porod (Q^4-IQ^4);"
1331                strswitch(SelectedDataPlot)                                             // string switch
1332                        case "X-Y (q-Int, etc.)":                               // execute if case matches expression
1333                                //nothing to do...
1334                                //this was sorted out above...
1335                                break                                                                           // exit from switch
1336                        case "Guinier (Q^2-ln(I))":                             // execute if case matches expression
1337                                //create and save Guinier data
1338                                GraphUserTitle = "Guinier Plot for data"
1339                                XAxisLegend = "Q\S2\M [A\S-2\M]"
1340                                YAxislegend = "ln(Intensity)"
1341                                break
1342                        case "Guinier Rod (Q^2-ln(I*Q))":                               // execute if case matches expression
1343                                //create and save Guinier data
1344                                GraphUserTitle = "Guinier Plot for data"
1345                                XAxisLegend = "Q\S2\M [A\S-2\M]"
1346                                YAxislegend = "ln(Intensity*Q)"
1347                                break
1348                        case "Guinier Sheet (Q^2-ln(I*Q^2))":                           // execute if case matches expression
1349                                //create and save Guinier data
1350                                GraphUserTitle = "Guinier Plot for data"
1351                                XAxisLegend = "Q\S2\M [A\S-2\M]"
1352                                YAxislegend = "ln(Intensity*Q^2)"
1353                                break
1354                        case "Kratky (Q-IQ^2)":                                 // execute if case matches expression
1355                                //create and save Kratky data
1356                                GraphUserTitle = "Kratky Plot for data"
1357                                XAxisLegend = "Q [A\S-1\M]"
1358                                YAxislegend = "Intensity*Q\S2\M"
1359                                break
1360                        case "DimLess Kratky (Q-I*(Q*Rg)^2/I0)":                                        // execute if case matches expression
1361                                //create and save Kratky data
1362                                GraphUserTitle = "Dimension less Kratky Plot for data"
1363                                XAxisLegend = "Q [A\S-1\M]"
1364                                YAxislegend = "Intensity/I0*(QRg)\S2\M"
1365                                break
1366                        case "Porod (Q^4-IQ^4)":                                        // execute if case matches expression
1367                                //create and save Porod data
1368                                GraphUserTitle = "Porod Plot for data"
1369                                XAxisLegend = "Q\S4\M [A\S-4\M]"
1370                                YAxislegend = "Intensity*Q\S4\M"
1371                                break
1372                        default:                                                                                // optional default expression executed, this is basically X-Y case again
1373                                                                                                                        // when no case matches
1374                endswitch
1375
1376                if(     !CanDoLinearization && !StringMatch(SelectedDataPlot, "X-Y (q-Int, etc.)"))                                     //abort and warn user, if linearization plots are nto possible...
1377                        Abort "Selected input data type is not compatible with selected plot type. Cannot create "+SelectedDataPlot+" for "+InputDataType+"  Linearization plots are only for QRS and USAXS desmeared data"
1378                endif
1379end
1380
1381//**********************************************************************************************************
1382//**********************************************************************************************************
1383//**********************************************************************************************************
1384
Note: See TracBrowser for help on using the repository browser.