1 | #pragma rtGlobals=1 // Use modern global access method. |
---|
2 | #pragma version=4.00 |
---|
3 | #pragma IgorVersion=6.1 |
---|
4 | |
---|
5 | |
---|
6 | ////////////////////////////////////////// |
---|
7 | // |
---|
8 | // Plot manager that is largely based on the plot manager in the Reduction package |
---|
9 | // |
---|
10 | // "A_" is crudely prepended to function names to avoid conflicts |
---|
11 | // |
---|
12 | // -- data folders will sitll overlap, but should not be an issue |
---|
13 | // |
---|
14 | // 28SEP07 SRK |
---|
15 | // |
---|
16 | ////////////////////////////////////////// |
---|
17 | Proc Show_Plot_Manager() |
---|
18 | A_Init_OneDLoader() |
---|
19 | DoWindow/F Plot_Manager |
---|
20 | if(V_flag==0) |
---|
21 | A_Plot_Manager() |
---|
22 | endif |
---|
23 | A_OneDLoader_GetListButton("") |
---|
24 | End |
---|
25 | |
---|
26 | Window A_Plot_Manager() |
---|
27 | PauseUpdate; Silent 1 // building window... |
---|
28 | NewPanel /W=(658,347,1018,737)/N=Plot_Manager/K=2 as "Plot Manager" |
---|
29 | ModifyPanel cbRGB=(37265,65535,32896) |
---|
30 | ModifyPanel fixedSize=1 |
---|
31 | |
---|
32 | Button button0,pos={165,353},size={50,20},proc=A_PlotManager_Done,title="Done" |
---|
33 | PopupMenu popup0,pos={15,225},size={233,20},title="Data in Memory" |
---|
34 | PopupMenu popup0,mode=1,value= #"A_OneDDataInMemory()" |
---|
35 | Button button2,pos={122,259},size={100,20},proc=A_PlotManager_Append,title="Append Data" |
---|
36 | Button button3,pos={15,259},size={80,20},proc=A_PlotManager_newGraph,title="New Graph" |
---|
37 | Button button4,pos={15,293},size={220,20},proc=A_PlotManager_Kill,title="Remove Selection From Memory" |
---|
38 | Button button5,pos={15,323},size={220,20},proc=A_PlotManager_KillAll,title="Remove All Data From Memory" |
---|
39 | ListBox fileList,pos={13,11},size={206,179} |
---|
40 | ListBox fileList,listWave=root:Packages:NIST:OneDLoader:fileWave |
---|
41 | ListBox fileList,selWave=root:Packages:NIST:OneDLoader:selWave,mode= 4 |
---|
42 | Button button6,pos={238,165},size={100,20},proc=A_OneDLoader_LoadButton,title="Load File(s)" |
---|
43 | Button button6,help={"Loads the selected files into memory and will graph them if that option is checked"} |
---|
44 | Button button7,pos={238,20},size={100,20},proc=A_OneDLoader_NewFolderButton,title="New Folder" |
---|
45 | Button button7,help={"Select a new data folder"} |
---|
46 | Checkbox check0,pos={240,190},title="Plot data on loading?",noproc,value=1 |
---|
47 | GroupBox group0,pos={222,127},size={50,4},title="Shift-click to load" |
---|
48 | GroupBox group0_1,pos={222,143},size={50,4},title="multiple files" |
---|
49 | GroupBox group1,pos={7,207},size={350,4} |
---|
50 | Button button8,pos={238,76},size={100,20},proc=A_OneDLoader_HelpButton,title="Help" |
---|
51 | Button button9,pos={238,48},size={100,20},proc=A_PlotManager_Refresh,title="Refresh List" |
---|
52 | EndMacro |
---|
53 | |
---|
54 | //open the Help file for the Fit Manager |
---|
55 | Function A_OneDLoader_HelpButton(ba) : ButtonControl |
---|
56 | STRUCT WMButtonAction &ba |
---|
57 | |
---|
58 | switch( ba.eventCode ) |
---|
59 | case 2: // mouse up |
---|
60 | // click code here |
---|
61 | DisplayHelpTopic/K=1/Z "Plot Manager" |
---|
62 | if(V_flag !=0) |
---|
63 | DoAlert 0,"The Plot Manager Help file could not be found" |
---|
64 | endif |
---|
65 | break |
---|
66 | endswitch |
---|
67 | |
---|
68 | return 0 |
---|
69 | End |
---|
70 | |
---|
71 | //uses the same data folder listing as the wrapper |
---|
72 | // if it's right there, it's right here |
---|
73 | Function/S A_OneDDataInMemory() |
---|
74 | //AJJ Oct 2008 |
---|
75 | //To make this general for both analysis and reduction this code must be a duplicate |
---|
76 | //W_DataPopupList rather than a call to it as IGOR doesn't like assignment to function |
---|
77 | //that doesn't exists even if you've done a if(exists... to check first. |
---|
78 | //Grrr |
---|
79 | String list = GetAList(4) |
---|
80 | if (strlen(list) == 0) |
---|
81 | list = "No data loaded" |
---|
82 | endif |
---|
83 | list = SortList(list) |
---|
84 | |
---|
85 | return(list) |
---|
86 | end |
---|
87 | |
---|
88 | |
---|
89 | Function A_PlotManager_Done(ctrlName) : ButtonControl |
---|
90 | String ctrlName |
---|
91 | DoWindow/K Plot_Manager |
---|
92 | End |
---|
93 | |
---|
94 | Function A_PlotManager_Append(ctrlName) : ButtonControl |
---|
95 | String ctrlName |
---|
96 | //appends data set from memory |
---|
97 | |
---|
98 | //get the current selection |
---|
99 | ControlInfo popup0 |
---|
100 | if(strlen(S_Value)==0 || cmpstr(S_Value,"No data loaded")==0) |
---|
101 | Abort "You must load data from a file into memory before appending the data" |
---|
102 | Endif |
---|
103 | |
---|
104 | A_PM_doAppend(S_Value) |
---|
105 | |
---|
106 | DoWindow/F Plot_Manager |
---|
107 | End |
---|
108 | |
---|
109 | //actually does the appending |
---|
110 | //pass it the name of the wave, find the q-i-s waves |
---|
111 | Function A_PM_doAppend(DF) |
---|
112 | String DF |
---|
113 | //appends data set from memory |
---|
114 | String qStr,eStr,istr |
---|
115 | Variable rr,gg,bb |
---|
116 | |
---|
117 | if(cmpstr(WinList("*", ";","WIN:1"),"") == 0 ) |
---|
118 | DoAlert 0,"There are no open graphs. Please use the New Graph button" |
---|
119 | return(0) |
---|
120 | endif |
---|
121 | |
---|
122 | SetDataFolder $("root:"+DF) |
---|
123 | //iStr will end in "i" |
---|
124 | qStr = DF+"_q" |
---|
125 | eStr = DF+"_s" |
---|
126 | iStr = DF+"_i" |
---|
127 | |
---|
128 | rr = abs(trunc(enoise(65535))) |
---|
129 | gg = abs(trunc(enoise(65535))) |
---|
130 | bb = abs(trunc(enoise(65535))) |
---|
131 | |
---|
132 | // append to whatever is top-most graph |
---|
133 | AppendToGraph $iStr vs $qStr |
---|
134 | ModifyGraph log=1,mode($istr)=3,marker($iStr)=19,msize($iStr)=2,rgb($iStr)=(rr,gg,bb) |
---|
135 | ErrorBars/T=0 $iStr Y,wave=($eStr,$eStr) |
---|
136 | |
---|
137 | SetDataFolder root: |
---|
138 | End |
---|
139 | |
---|
140 | Proc A_PlotManager_newGraph(ctrlName) : ButtonControl |
---|
141 | String ctrlName |
---|
142 | |
---|
143 | //get the current selection |
---|
144 | ControlInfo popup0 |
---|
145 | if(strlen(S_Value)==0 || cmpstr(S_Value,"No data loaded")==0) |
---|
146 | Abort "You must load data from a file into memory before plotting the data" |
---|
147 | Endif |
---|
148 | |
---|
149 | A_PM_doNewGraph(S_Value) |
---|
150 | DoWindow/F Plot_Manager |
---|
151 | End |
---|
152 | |
---|
153 | Function A_PM_doNewGraph(DF) |
---|
154 | String DF |
---|
155 | |
---|
156 | String qStr,eStr,iStr |
---|
157 | Variable rr,gg,bb |
---|
158 | |
---|
159 | SetDataFolder $("root:"+DF) |
---|
160 | //iStr will end in "i" |
---|
161 | qStr = DF+"_q" |
---|
162 | eStr = DF+"_s" |
---|
163 | iStr = DF+"_i" |
---|
164 | |
---|
165 | rr = abs(trunc(enoise(65535))) |
---|
166 | gg = abs(trunc(enoise(65535))) |
---|
167 | bb = abs(trunc(enoise(65535))) |
---|
168 | |
---|
169 | // always make a new graph |
---|
170 | Display $iStr vs $qStr |
---|
171 | ModifyGraph log=1,mode($istr)=3,marker($iStr)=19,msize($iStr)=2,rgb=(rr,gg,bb) |
---|
172 | ModifyGraph grid=1,mirror=2,standoff=0 |
---|
173 | ErrorBars/T=0 $iStr Y,wave=($eStr,$eStr) |
---|
174 | ModifyGraph tickUnit=1 |
---|
175 | |
---|
176 | Label left "I(q)" |
---|
177 | Label bottom "q (A\\S-1\\M)" |
---|
178 | |
---|
179 | Legend |
---|
180 | |
---|
181 | SetDataFolder root: |
---|
182 | End |
---|
183 | |
---|
184 | //kill the specified wave (if possible) |
---|
185 | Proc A_PlotManager_Kill(ctrlName) : ButtonControl |
---|
186 | String ctrlName |
---|
187 | |
---|
188 | String savDF=GetDataFolder(1) |
---|
189 | String DF |
---|
190 | |
---|
191 | ControlInfo popup0 |
---|
192 | DF=S_Value //this will end in "i" |
---|
193 | |
---|
194 | SetDataFolder DF |
---|
195 | KillVariables/A //removes the dependent variables |
---|
196 | SetDataFolder savDF |
---|
197 | |
---|
198 | //now kill the data folder |
---|
199 | KillDataFolder/Z $DF |
---|
200 | ControlUpdate popup0 //refresh the popup, very important if last item removed |
---|
201 | End |
---|
202 | |
---|
203 | //kill the specified wave (if possible) |
---|
204 | Proc A_PlotManager_KillAll(ctrlName) : ButtonControl |
---|
205 | String ctrlName |
---|
206 | |
---|
207 | String savDF=GetDataFolder(1) |
---|
208 | String DF |
---|
209 | |
---|
210 | String list = A_OneDDataInMemory() |
---|
211 | Variable num=ItemsInList(list),ii |
---|
212 | |
---|
213 | ii=0 |
---|
214 | do |
---|
215 | DF=StringFromList(ii, list ,";") |
---|
216 | |
---|
217 | SetDataFolder DF |
---|
218 | KillVariables/A //removes the dependent variables first |
---|
219 | SetDataFolder savDF |
---|
220 | |
---|
221 | //now kill the data folder |
---|
222 | KillDataFolder/Z $DF |
---|
223 | ii+=1 |
---|
224 | while(ii<num) |
---|
225 | ControlUpdate popup0 //refresh the popup, very important if all items are removed |
---|
226 | End |
---|
227 | |
---|
228 | Proc A_Init_OneDLoader() |
---|
229 | //create the data folder |
---|
230 | NewDataFolder/O/S root:Packages:NIST:OneDLoader |
---|
231 | //create the waves |
---|
232 | Make/O/T/N=1 fileWave="" |
---|
233 | Make/O/N=1 selWave=0 |
---|
234 | Variable/G ind=0 |
---|
235 | SetDataFolder root: |
---|
236 | End |
---|
237 | |
---|
238 | |
---|
239 | //prompt for a new path, and get a new listing |
---|
240 | Function A_OneDLoader_NewFolderButton(ctrlName) : ButtonControl |
---|
241 | String ctrlName |
---|
242 | |
---|
243 | A_PickPath() |
---|
244 | A_OneDLoader_GetListButton("") |
---|
245 | return(0) |
---|
246 | End |
---|
247 | |
---|
248 | //refresh the listing |
---|
249 | Function A_PlotManager_Refresh(ctrlName) : ButtonControl |
---|
250 | String ctrlName |
---|
251 | |
---|
252 | A_OneDLoader_GetListButton("") |
---|
253 | return(0) |
---|
254 | End |
---|
255 | |
---|
256 | //filters to remove only the files that are named like a raw data file, i.e. "*.SAn" |
---|
257 | //does not check to see if they really are RAW files though...(too tedious) |
---|
258 | Function A_OneDLoader_GetListButton(ctrlName) : ButtonControl |
---|
259 | String ctrlName |
---|
260 | |
---|
261 | //make sure that path exists |
---|
262 | PathInfo catPathName |
---|
263 | if (V_flag == 0) |
---|
264 | Abort "Folder path does not exist - use \"New Folder\" button on Main Panel" |
---|
265 | Endif |
---|
266 | |
---|
267 | String newList = A_ReducedDataFileList("") |
---|
268 | Variable num |
---|
269 | |
---|
270 | num=ItemsInList(newlist,";") |
---|
271 | WAVE/T fileWave=$"root:Packages:NIST:OneDLoader:fileWave" |
---|
272 | WAVE selWave=$"root:Packages:NIST:OneDLoader:selWave" |
---|
273 | Redimension/N=(num) fileWave |
---|
274 | Redimension/N=(num) selWave |
---|
275 | fileWave = StringFromList(p,newlist,";") |
---|
276 | Sort filewave,filewave |
---|
277 | End |
---|
278 | |
---|
279 | Function A_OneDLoader_LoadButton(ctrlName) : ButtonControl |
---|
280 | String ctrlName |
---|
281 | |
---|
282 | //loop through the selected files in the list... |
---|
283 | Wave/T fileWave=$"root:Packages:NIST:OneDLoader:fileWave" |
---|
284 | Wave sel=$"root:Packages:NIST:OneDLoader:selWave" |
---|
285 | Variable num=numpnts(sel),ii=0 |
---|
286 | String fname="",pathStr="",fullPath="",newFileName="" |
---|
287 | |
---|
288 | PathInfo catPathName //this is where the files are |
---|
289 | pathStr=S_path |
---|
290 | |
---|
291 | Variable doGraph,cnt |
---|
292 | |
---|
293 | ControlInfo check0 |
---|
294 | doGraph=V_Value |
---|
295 | cnt=0 |
---|
296 | // get the current state |
---|
297 | do |
---|
298 | if(sel[ii] == 1) |
---|
299 | fname=pathStr + fileWave[ii] |
---|
300 | Execute "A_LoadOneDDataWithName(\""+fname+"\","+num2str(doGraph)+")" |
---|
301 | cnt += 1 //a file was loaded |
---|
302 | endif |
---|
303 | ii+=1 |
---|
304 | while(ii<num) |
---|
305 | |
---|
306 | ControlUpdate/W=Plot_Manager popup0 |
---|
307 | |
---|
308 | return(0) |
---|
309 | End |
---|
310 | |
---|
311 | |
---|
312 | //function called by the popups to get a file list of data that can be sorted |
---|
313 | // this procedure simply removes the raw data files from the string - there |
---|
314 | //can be lots of other junk present, but this is very fast... |
---|
315 | // |
---|
316 | // could also use the alternate procedure of keeping only file with the proper extension |
---|
317 | // |
---|
318 | // another possibility is to get a listing of the text files, but is unreliable on |
---|
319 | // Windows, where the data file must be .txt (and possibly OSX) |
---|
320 | // |
---|
321 | Function/S A_ReducedDataFileList(ctrlName) |
---|
322 | String ctrlName |
---|
323 | |
---|
324 | String list="",newList="",item="" |
---|
325 | Variable num,ii |
---|
326 | |
---|
327 | //check for the path |
---|
328 | PathInfo catPathName |
---|
329 | if(V_Flag==0) |
---|
330 | DoAlert 0, "Data path does not exist - pick the data path from the button on the main panel" |
---|
331 | Return("") |
---|
332 | Endif |
---|
333 | |
---|
334 | list = IndexedFile(catpathName,-1,"????") |
---|
335 | |
---|
336 | list = RemoveFromList(ListMatch(list,"*.SA1*",";"), list, ";", 0) |
---|
337 | list = RemoveFromList(ListMatch(list,"*.SA2*",";"), list, ";", 0) |
---|
338 | list = RemoveFromList(ListMatch(list,"*.SA3*",";"), list, ";", 0) |
---|
339 | list = RemoveFromList(ListMatch(list,".*",";"), list, ";", 0) |
---|
340 | list = RemoveFromList(ListMatch(list,"*.pxp",";"), list, ";", 0) |
---|
341 | list = RemoveFromList(ListMatch(list,"*.DIV",";"), list, ";", 0) |
---|
342 | list = RemoveFromList(ListMatch(list,"*.GSP",";"), list, ";", 0) |
---|
343 | list = RemoveFromList(ListMatch(list,"*.MASK",";"), list, ";", 0) |
---|
344 | #if(exists("QUOKKA") == 6) |
---|
345 | list = RemoveFromList(ListMatch(list,"*.nx.hdf",";"), list, ";", 0) |
---|
346 | list = RemoveFromList(ListMatch(list,"*.bin",";"), list, ";", 0) |
---|
347 | #endif |
---|
348 | |
---|
349 | |
---|
350 | //sort |
---|
351 | newList = SortList(List,";",0) |
---|
352 | |
---|
353 | return newlist |
---|
354 | End |
---|