PEARL Procedures  rev-distro-3.0.0-0-gfa24916-dirty
Igor procedures for the analysis of PEARL data
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 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 
89 function /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
123 end
124 
127 static 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
176 end
177 
207 function /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
273 end
274 
286 function /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
306 end
307 
308 
320 function /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)
328 end
save_scan_helper
static string save_scan_helper(string destname, string value, wave template, dfref destdfr, string wavenames)
helper function for save_pmsco_scan()
Definition: pearl-pmsco-import.ipf:127
load_pmsco_result
string load_pmsco_result(string pathname, string filename, variable quiet=defaultValue)
load a PMSCO result file into the current data folder.
Definition: pearl-pmsco-import.ipf:286
pmsco_save_scan
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.
Definition: pearl-pmsco-import.ipf:89
load_pmsco_scan
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.
Definition: pearl-pmsco-import.ipf:207
pmsco_load_xyz
string pmsco_load_xyz(string pathname, string filename)
load an xyz cluster file
Definition: pearl-pmsco-import.ipf:320