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

Last change on this file since 923 was 923, checked in by ilavsky, 2 years ago

FIxes for GetHelp? button and manuals

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