PEARL Procedures rev-distro-3.1.0-0-gea838b3-dirty
Igor procedures for the analysis of PEARL data
Loading...
Searching...
No Matches
pearl-pmsco-import.ipf
Go to the documentation of this file.
1#pragma TextEncoding = "UTF-8"
2#pragma rtGlobals=3 // Use modern global access method and strict wave access.
3#pragma IgorVersion = 6.2
4#pragma ModuleName = PearlPmscoImport
5
6// copyright (c) 2018-25 Paul Scherrer Institut
7//
8// Licensed under the Apache License, Version 2.0 (the "License");
9// you may not use this file except in compliance with the License.
10// You may obtain a copy of the License at
11// http:///www.apache.org/licenses/LICENSE-2.0
12//
13// Please acknowledge the use of this code.
14
29
34
35
89function /s pmsco_save_scan(pathname, filename, energy, theta, phi, alpha, intensity, sigma, [sdfr])
90 string pathname
91 string filename
92 string energy
93 string theta
94 string phi
95 string alpha
96 string intensity
97 string sigma
98 dfref sdfr
99
100 //string fileext
101 //fileext = StringFromList(ItemsInList(filename, ".") - 1, filename, ".")
102
103 dfref savedf = GetDataFolderDFR()
104 dfref tempdf = NewFreeDataFolder()
105
106 if (ParamIsDefault(sdfr))
107 dfref sdfr = savedf
108 endif
109 SetDataFolder sdfr
110 wave w_intensity = $intensity
111 string wavenames = ""
112
113 wavenames = save_scan_helper("w_energy", energy, w_intensity, tempdf, wavenames)
114 wavenames = save_scan_helper("w_theta", theta, w_intensity, tempdf, wavenames)
115 wavenames = save_scan_helper("w_phi", phi, w_intensity, tempdf, wavenames)
116 wavenames = save_scan_helper("w_alpha", alpha, w_intensity, tempdf, wavenames)
117 wavenames = save_scan_helper("w_intensity", intensity, w_intensity, tempdf, wavenames)
118 wavenames = save_scan_helper("w_sigma", sigma, w_intensity, tempdf, wavenames)
119
120 setdatafolder tempdf
121 save /b /g /m="\n" /p=$pathname wavenames as filename
122 setdatafolder savedf
123end
124
127static function /s save_scan_helper(destname, value, template, destdfr, wavenames)
128 string destname
129 string value
130 wave template
131 dfref destdfr
132 string wavenames
133
134 variable err = 0
135 if (strlen(value) > 0)
136 if (exists(value) == 1)
137 duplicate $value, destdfr:$destname
138 wave /sdfr=destdfr w=$destname
139 else
140 duplicate template, destdfr:$destname
141 wave /sdfr=destdfr w=$destname
142 variable numval = str2num(value)
143 string msg
144 if (numtype(numval) == 0)
145 w = numval
146 //elseif (cmpstr(value[0,0], "%") == 0)
147 else
148 strswitch(value)
149 case "x":
150 w = DimOffset(template, 0) + DimDelta(template, 0) * p
151 break
152 case "y":
153 w = DimOffset(template, 1) + DimDelta(template, 1) * q
154 break
155 case "z":
156 w = DimOffset(template, 2) + DimDelta(template, 2) * r
157 break
158 case "t":
159 w = DimOffset(template, 3) + DimDelta(template, 3) * s
160 break
161 default:
162 err = 1
163 sprintf msg, "invalid %s argument", StringFromList(1, destname, "_")
164 endswitch
165 endif
166 endif
167 if (err == 0)
168 wavenames = AddListItem(destname, wavenames, ";", inf)
169 variable npts = DimSize(w, 0) * max(DimSize(w, 1), 1) * max(DimSize(w, 2), 1) * max(DimSize(w, 3), 1)
170 Redimension /n=(npts) w
171 else
172 abort msg
173 endif
174 endif
175 return wavenames
176end
177
207function /s load_pmsco_scan(pathname, filename, [is_modulation, quiet])
208 string pathname // name of a symbolic path
209 string filename
210 variable is_modulation
211 variable quiet
212
213 if (ParamIsDefault(quiet))
214 quiet = 0
215 endif
216
217 loadwave /p=$pathname /a /g /o /q filename
218
219 if (ParamIsDefault(is_modulation))
220 is_modulation = StringMatch(s_filename, "*.modf.*")
221 else
222 is_modulation = is_modulation > 0
223 endif
224
225 string fileext
226 string waves = ""
227 if (v_flag > 0)
228 fileext = StringFromList(ItemsInList(s_filename, ".") - 1, s_filename, ".")
229 variable nw = ItemsInList(s_wavenames)
230 variable iw
231 string sw1, sw2
232 for (iw = 0; iw < nw; iw += 1)
233 sw1 = StringFromlist(iw, s_wavenames)
234 strswitch(fileext[iw])
235 case "e":
236 sw2 = "en"
237 break
238 case "t":
239 sw2 = "th"
240 break
241 case "p":
242 sw2 = "ph"
243 break
244 case "a":
245 sw2 = "al"
246 break
247 case "i":
248 if (is_modulation)
249 sw2 = "mo"
250 else
251 sw2 = "in"
252 endif
253 break
254 case "s":
255 sw2 = "si"
256 break
257 endswitch
258 duplicate /o $sw1, $sw2
259 killwaves /z $sw1
260 waves = AddListItem(sw2, waves, ",", inf)
261 endfor
262
263 // Sort {en,th,ph, al} en,th,ph,al,int,sig
264
265 if (!quiet)
266 print "load_pmsco_scan ", s_filename, ": ", waves
267 endif
268
269 return s_filename
270 else
271 return ""
272 endif
273end
274
286function /s load_pmsco_result(pathname, filename, [quiet])
287 string pathname // name of a symbolic path
288 string filename
289 variable quiet
290
291 if (ParamIsDefault(quiet))
292 quiet = 0
293 endif
294
295 if (quiet)
296 loadwave /p=$pathname /a /w /g /o /q filename
297 else
298 loadwave /p=$pathname /a /w /g /o filename
299 endif
300
301 if (v_flag > 0)
302 return s_filename
303 else
304 return ""
305 endif
306end
307
308
320function /s pmsco_load_xyz(pathname, filename)
321 string pathname
322 string filename
323
324 string cis = "N=at;N=xx;N=yy;N=zz;"
325 LoadWave /A /B=cis /J /K=0 /L={0, 2, 0, 0, 0} /V={" ", " ", 0, 0} /O /P=$pathname filename
326 wave /t at
327 at = unpadstring(at, 32)
328end
329
330function pmsco_load_alm(pathname, filename, wname)
331 string pathname
332 string filename
333 string wname
334
335 variable fid
336 if (strlen(pathname) > 0)
337 HDF5OpenFile /P=pathname /R /Z fid as filename
338 else
339 HDF5OpenFile /R /Z fid as filename
340 endif
341
342 if (v_flag == 0)
343 HDF5LoadData /N=$wname /O /Q /Z fid, "alm"
344 HDF5CloseFile fid
345
346 wave alm_r = $(wname + "_r")
347 wave alm_i = $(wname + "_i")
348 make /c /n=(dimsize(alm_r, 0), dimsize(alm_r, 1)) /o $wname
349 wave /c alm = $wname
350 alm = cmplx(alm_r, alm_i)
351 variable lmax = (dimsize(alm, 0) - 1) * 2
352 setscale /i x 0, lmax, "l", alm, alm_r, alm_i
353 setscale /i y -lmax, lmax, "m", alm, alm_r, alm_i
354 endif
355end
static string save_scan_helper(string destname, string value, wave template, dfref destdfr, string wavenames)
helper function for save_pmsco_scan()
variable pmsco_load_alm(string pathname, string filename, string wname)
string load_pmsco_scan(string pathname, string filename, variable is_modulation=defaultValue, variable quiet=defaultValue)
load a PMSCO scan file into the current data folder.
string pmsco_save_scan(string pathname, string filename, string energy, string theta, string phi, string alpha, string intensity, string sigma, dfref sdfr=defaultValue)
save waves in a PMSCO scan data file.
string pmsco_load_xyz(string pathname, string filename)
load an xyz cluster file
string load_pmsco_result(string pathname, string filename, variable quiet=defaultValue)
load a PMSCO result file into the current data folder.