File Input/Output https://www.wavemetrics.com/ en Making videos with FFmpeg https://www.wavemetrics.com/node/22223 Making videos with FFmpeg <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/kzarzana" lang="" about="/user/kzarzana" typeof="schema:Person" property="schema:name" datatype="">KZarzana</a></span> <span>Thu, 09/28/2023 - 04:15 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/45" hreflang="en">Graphing</a></span> <span class="entity-reference"><a href="/taxonomy/term/48" hreflang="en">Visualization/Gizmo</a></span> </span> <span class="body"><p>The videos I've made with the built in Igor commands never turned out great, but I've had good luck using Igor to make the frames and then calling a second program called FFmpeg to convert the frames into a movie.  This ipf creates a user interface for calling FFmpeg through Igor.  It only gives the user access to a few of the many features of FFmpeg, but it has worked great for the types of videos that I have made (a few minutes long and embedded in Powerpoint or uploaded to Youtube).  The zip file contains the ipf, an example ipf for making frames, as well as the read me pdf.</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">9.00.x</span> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> </section> Thu, 28 Sep 2023 23:15:21 +0000 KZarzana 22223 at https://www.wavemetrics.com Spectra WatchDog - On-the-fly and interactive data logger https://www.wavemetrics.com/node/22182 Spectra WatchDog - On-the-fly and interactive data logger <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/chozo" lang="" about="/user/chozo" typeof="schema:Person" property="schema:name" datatype="">chozo</a></span> <span>Thu, 07/27/2023 - 11:36 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/42" hreflang="en">Data Acquisition</a></span> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/40" hreflang="en">Utilities</a></span> </span> <span class="body"><p>If you want to create data logs while (or after) measuring data with the ability to edit entries on the fly, then this package is for you.</p> <p>Spectra WatchDog watches a specified folder for new data files of a specified extension, and then records specified metadata in a log entry. This is most useful if your measurement software dumps finished files in a single folder, which will then be automatically processed. Alternatively, a log can be created from a folder of prerecorded data to generate an annotated summary. The log can be edited (e.g., adding notes or changing entries) in an user interface within Igor Pro. The parsing function is provided by the user (see below). <strong>Currently, a function for loading Scienta-Omicron SES files (*.ibw format) is provided with the package.</strong> Support for zipped data is provided as well (the data will be temporarily unzipped in this case). Log files are simple tab-delimited text files with the ending *.log (the ending can be changed in desired).</p> <p>I tried my best to test everything thoroughly, but sometimes bugs slip through. Bug reports and suggestions for new features are always welcome. I am happy to add definitions for popular data formats and open to feature requests.</p> <p> </p> <h3>The User Interface</h3> <p>After installing the package two new options appear under the menu entry Spectra Tools: Folder Watchdog and Folder Quick-log; the latter will be explained later. After selecting Folder Watchdog the user interface appears:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="d024e363-e98e-4071-afcd-22835b8a1191" height="210" src="/sites/www.wavemetrics.com/files/users/user1029/WatchDog_screenshot_v1.02.png" width="1000" /></p> <p>First, there are a few things to set up:</p> <ul> <li><strong>Folder to Watch:</strong> Specify the folder to be watched for new data files or to read data from.</li> <li><strong>Save Log File to:</strong> Specify where the log is written to. This file can be saved anywhere you have write permission. <ul> <li>Press <strong>Read Log Entries</strong> if you want to read the entries from the specified (existing) log into the table below. This is useful if you continue working with an existing log file.</li> </ul> </li> <li><strong>File Type(s):</strong> Specify the file ending(s) to watch for. You need to provide at least one loading function for the specified file ending (see below). Multiple file types can be specified as a semicolon separated list. <ul> <li>Set <strong>Ignore Existing Files</strong>: This will ignore all currently available files in the folder and only checks for newly added files.</li> </ul> </li> </ul> <p>Now you can press either:</p> <ul> <li><strong>Start Watchdog:</strong> The program logs all currently available files with the correct ending and then keeps watching for new files. If you want to stop the process, press Stop Watchdog.</li> <li><strong>Read Folder Once:</strong> The program just logs all currently available files.</li> </ul> <p>The remaining buttons are:</p> <ul> <li><strong>Reset All:</strong> Clears the table and resets the list of already processed files in the folder. Use this to start anew. You might want to specify a new log as well. If you don't specify a new log file, then files already logged in the file will not be reprocessed, since you cannot have the same data entry in the log twice.</li> <li><strong>Clear Display List:</strong> Clears all entries in the table below (NOT in the log file). Use this if the table got very long and you want to concentrate only on new entries.</li> </ul> <p>NOTE: Any setting you make will be saved in a file named 'Spectra WatchDog settings.dat' next to the procedure file. This is a simple text file, which can also be edited with a text editor.</p> <p>Here is how above log file looks in Excel:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="454d291c-9c7e-4282-91db-44a9f4706978" height="143" src="/sites/www.wavemetrics.com/files/users/user1029/WatchDog_Excel_v1.02.png" width="1024" /></p> <p><strong>CAUTION:</strong> Do not open the log file in Excel (or any other program that locks write access to the file) <em>at the same time</em> while you are still working with it in the Watchdog. Igor cannot update the log in that case.</p> <p> </p> <h3>Working with the Table</h3> <p>Logged entries can be directly edited in the table. Simply click a cell to edit it's contents. Editing any cell with also update the log file on the fly. In other words, <strong>the contents of the log and the table are synced.</strong> The cell in the first column is highlighted for each selected row. The first column is meant to serve as a data tag for identifying the data entry.</p> <p><strong>Cell selection:</strong><br /> Select single cell with the mouse. Holding shift or cmd / ctrl will select multiple consecutive or disjointed cells respectively. ctrl/cmd+a will select everything (be careful not to delete everything in this case).</p> <p><strong>Column width and color:</strong><br /> Drag the divider lines in the column header to adjust the cell width of this column. Right-clicking on the cell header allows you to select a color for the column. Both settings will be remembered.</p> <p><strong>Column options:</strong><br /> In the same, right-click menu of the cell header are additional options:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="74e2dbc8-57b1-4292-beb9-a6f90cb92268" height="445" src="/sites/www.wavemetrics.com/files/users/user1029/WatchDog_columnmenu_v1.02.png" width="240" /></p> <p>Widths:</p> <ul> <li>Default: The default width of the package (optimized for the included file logger).</li> <li>Optimal: Tries to adjust the columns to allow for optimal spacing depending on the <em>current contents</em> in each column.</li> <li>Equal: All widths will be the same.</li> </ul> <p><strong>Repeat Values option:</strong><br /> If a new entry is written, the content of the previous entry will be prefilled for this column. Use this setting for columns which contain mostly the same information which you do not want to insert repeatedly.</p> <p><strong>Cell options:</strong><br /> Right-clicking on a cell <em>when not in edit mode</em>, reveals some common options:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="1bb3a696-e0fd-4a52-8af5-38bcddd5bfe8" height="280" src="/sites/www.wavemetrics.com/files/users/user1029/WatchDog_cellmenu_v1.02.png" width="245" /></p> <p><strong>Keyboard shortcuts:</strong></p> <ul> <li>cmd/ctrl + a = select all</li> <li>cmd/ctrl + x = cut</li> <li>cmd/ctrl + c = copy</li> <li>cmd/ctrl + v = paste</li> <li>cmd/ctrl + z = undo/redo</li> <li>del key = delete</li> <li>cursor keys = move selection</li> </ul> <p> </p> <h3>Writing a Parsing Function</h3> <p>The most important part for using this package with your own data is to write a function with parses the meta data from a file. You can parse as few contents as you like, but the more information is automatically gathered from the files the easier is the logging process on the user.</p> <p><strong>The parsing function need to have the following format:</strong></p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">function</span><span style="color: #000000;">/</span><span style="color: #0000ff;">wave</span> WDfunc_EXT_myFunc<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">string</span> filePath<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; ...<br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> textWave <span style="color: #ff0000; font-style: italic;">// two columns required: [][0] = entry name, [][1] = value</span><br /> <span style="color: #0000ff;">end</span></div></div> <p>Thus, the function name needs to start with 'WDfunc_' to be recognized by the tool, followed by some EXTension: This must be the file extension, such as 'txt', 'ibw', 'tiff', 'dat' etc. you are going to support with this function. You can have multiple functions for the same extension, if you have different types of files which share the same extension or you can process all these different types in a single function. Finally, the function ends with a freely choosable name.</p> <p>The filePath string is the full path to one file on disk which should be parsed. The task of this function is to give back a two-column text wave with the desired metadata parsed from the file (and some extra rows for manual information if desired). This can be a free wave. The first column of this wave is the title of the information, which will provide the table's column titles. The second column is the information itself. If your parser encounters the wrong file return an invalid wave ($"") to indicate that this file is not suitable and should be ignored. The logger will then attempt to use another function for this extension (if available) until the file could either successfully be parsed or the file is ignored for good.</p> <p>As an example, here is a parser which will read text files (*.txt) and 'logs' the first line in the file as well as the number of 'e' in the first line:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">function</span><span style="color: #000000;">/</span><span style="color: #0000ff;">wave</span> WDfunc_txt_myTextParser<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">string</span> filePath<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">string</span> fileName=<span style="color: #c34e00;">ParseFilePath</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">3</span>, filePath, <span style="color: #009c00;">&quot;:&quot;</span>, <span style="color: #000000;">0</span>, <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// ----- parse something -----</span><br /> &nbsp; &nbsp; int fileID, eCount=<span style="color: #000000;">0</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">string</span> read=<span style="color: #009c00;">&quot;&quot;</span><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #007575;">Open</span><span style="color: #000000;">/</span><span style="color: #c34e00;">Z</span><span style="color: #000000;">/</span><span style="color: #c34e00;">R</span> fileID as filePath<br /> &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span>V_flag<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> $<span style="color: #009c00;">&quot;&quot;</span>&nbsp; <span style="color: #ff0000; font-style: italic;">// failed to open =&gt; return nothing</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">endif</span><br /> &nbsp; &nbsp; <span style="color: #007575;">FReadLine</span> fileID, read&nbsp; <span style="color: #ff0000; font-style: italic;">// read the first line</span><br /> &nbsp; &nbsp; <span style="color: #007575;">Close</span> fileID<br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #0000ff;">string</span> parse = read, e_Str<br /> &nbsp; &nbsp; <span style="color: #0000ff;">do</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// count the number of 'e' in first line</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007575;">SplitString</span><span style="color: #000000;">/</span><span style="color: #c34e00;">E</span>=<span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;([eE]+)(.*)&quot;</span><span style="color: #000000;">&#41;</span> parse, e_Str, parse<br /> &nbsp; &nbsp; &nbsp; &nbsp; eCount += <span style="color: #c34e00;">strlen</span><span style="color: #000000;">&#40;</span>e_Str<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #000000;">&#40;</span><span style="color: #c34e00;">strlen</span><span style="color: #000000;">&#40;</span>read<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; e_Str = <span style="color: #c34e00;">num2str</span><span style="color: #000000;">&#40;</span>eCount<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// ----- write output -----</span><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #007575;">Make</span><span style="color: #000000;">/</span>Free<span style="color: #000000;">/</span><span style="color: #c34e00;">T</span><span style="color: #000000;">/</span>N=<span style="color: #000000;">&#40;</span><span style="color: #000000;">4</span>,<span style="color: #000000;">2</span><span style="color: #000000;">&#41;</span> info&nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// 2-col text wave</span><br /> &nbsp; &nbsp; info<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">&#93;</span> &nbsp;= <span style="color: #000000;">&#123;</span><span style="color: #009c00;">&quot;tag&quot;</span>, <span style="color: #009c00;">&quot;first line&quot;</span>, <span style="color: #009c00;">&quot;no. of 'e'&quot;</span>, <span style="color: #009c00;">&quot;comments&quot;</span><span style="color: #000000;">&#125;</span> <span style="color: #ff0000; font-style: italic;">// column titles</span><br /> &nbsp; &nbsp; info<span style="color: #000000;">&#91;</span><span style="color: #000000;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span> = fileName &nbsp; &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// tag identifying the data (could be anything)</span><br /> &nbsp; &nbsp; info<span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span> = read &nbsp; &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// content of the first line</span><br /> &nbsp; &nbsp; info<span style="color: #000000;">&#91;</span><span style="color: #000000;">2</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span> = e_Str&nbsp; &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// no of 'e' in first line</span><br /> &nbsp; &nbsp; info<span style="color: #000000;">&#91;</span><span style="color: #000000;">3</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span> = <span style="color: #009c00;">&quot;&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// always empty =&gt; entered by the user later</span><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> info<br /> <span style="color: #0000ff;">end</span></div></div> <p>Note that you could potentially do other things in this function as well, since your function is called every time a file appears in the folder as long as the watchdog is running. For example, this function could at the same time provide post-processing functionality for your data.</p> <p> </p> <h3>Zip Support</h3> <p>The logger also supports zipped data (with Igor versions 9 and above only). For this, add 'zip' under File Types. The logger will then unpack any zip file and checks the contents for the right extension. Note that the default extension is *.ibw if you do not specify any additional extension. If instead you want the logger to look for 'dat' files within a zip file, enter 'zip;dat;' under File Types.</p> <p><strong>NOTES:</strong></p> <ul> <li>Any folder structure within the zip file is currently not supported. While the full zip file is unpacked each time only data at the top level will be processed.</li> <li>Unzipping may take a while depending on the file size. Thus, the logger may seem to 'hang' during this process.</li> <li>Zip files are unpacked into the temporary folder of the OS. However, only logged files are deleted afterwards. If the zip file contains a lot of unrelated files, this may inflate the size of your temporary folder over time.</li> </ul> <p> </p> <h3>Quick-logging</h3> <p>If you have already folders of data and just want to quickly generate a data log from that folder without opening up the user interface you can use the Folder Quick-log function from the Spectra Tools menu. After invoking the menu a file selection dialog will open up. Navigate to the desired data folder and select one of the files of the type you would like to log. This selection automatically decides the file extension to be logged. The quick logger will then create a log file in the same folder. If you want to further edit such a log file, open up the user interface and select the log under 'Save Log File to'. Then press 'Read Log Entries' and start editing right away.</p> <p> </p> <h3>Important Note</h3> <p>Note that this package writes log files to your hard drive, may unpack data to and delete files from the temporary folder of the OS, so here is the obvious disclaimer. Use this software at your own risk. No warranty is offered against error, data loss or any other damage.</p> <p>THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">9.00.x</span> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> <article data-comment-user-id="1029" id="comment-24318" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/1029"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/chozo/profile-images/2022-03/WM%20Logo3.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">chozo</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1690526736"></mark> <span class="comment-body"><p>I'll attach the example text parser here for reference. I am also happy to help with writing a parser for your specific data. Please also let me know about any bug or feature requests.</p></span> <div class="comment-file-wrapper"> <label>Attachments</label> <span class="field-comment-file"> <label>Attachment</label> <span class="file"><span class="file file--mime-application-octet-stream file--general"><a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/2023-07/Text%20Parser.ipf" type="application/octet-stream; length=952">Text Parser.ipf</a></span> </span> </span> </div> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=24318&amp;1=default&amp;2=en&amp;3=" token="T33QwX0Qxwu-8jvdLnpOVUvrZd2dgfAmPbXm3icr8Rs"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">July 27, 2023 at 11:45 pm - <a href="/comment/24318#comment-24318" hreflang="en">Permalink</a></p> </article> </section> Fri, 28 Jul 2023 06:36:12 +0000 chozo 22182 at https://www.wavemetrics.com VASP Loader https://www.wavemetrics.com/node/21795 VASP Loader <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/yuan-fang" lang="" about="/user/yuan-fang" typeof="schema:Person" property="schema:name" datatype="">Yuan Fang</a></span> <span>Sat, 01/08/2022 - 08:20 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> </span> <span class="body"><p>Read bands generated by VASP, and can create projected bulk bands to compare with ARPES bulk measurements. Also, it can show orbital weight contained in PROCAR. DOS can also be read and plotted through the panel.</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> </section> Sun, 09 Jan 2022 04:20:49 +0000 Yuan Fang 21795 at https://www.wavemetrics.com ExifTools https://www.wavemetrics.com/node/21740 ExifTools <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/kzarzana" lang="" about="/user/kzarzana" typeof="schema:Person" property="schema:name" datatype="">KZarzana</a></span> <span>Fri, 10/22/2021 - 01:48 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/45" hreflang="en">Graphing</a></span> </span> <span class="body"><p>A short set of functions to read and write exif data on image files.  Used to keep track of information related to when and where the image was generated.  Stores the path and name of the experiment, the date and time the image was created, and the graph name and title.  Requires the installation of the free ExifTool utility (<a href="https://exiftool.org/">https://exiftool.org/</a>).</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> </section> Fri, 22 Oct 2021 20:48:01 +0000 KZarzana 21740 at https://www.wavemetrics.com netCDF utilities https://www.wavemetrics.com/node/21590 netCDF utilities <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/cpr" lang="" about="/user/cpr" typeof="schema:Person" property="schema:name" datatype="">cpr</a></span> <span>Thu, 04/01/2021 - 06:40 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/40" hreflang="en">Utilities</a></span> </span> <span class="body"><p>New features in Igor 9 now allow the correct reading and writing of netCDF-4 files directly from within Igor. Igor 8 already added native netCDF-3 loading ability and Igor 7 added support for the extended data-types of netCDF-4 e.g. uint64 etc. Here are two sets of utilities to do both reading and writing using all in-built operations and user defined functions.</p> <h4>QLA netCDF reader</h4> <ul> <li>Loads netCDF-3 and netCDF-4 files such that the original type is transparent to the user </li> <li>Parse all netCDF metadata nicely into CDL syntax attached to the WaveNote (c.f. ncdump or Panoply) or text dump</li> <li>Set the units and dimension names of the dataset</li> <li>Optionally apply scale factor, offset, fill value, valid range to data</li> <li>Functions to list, get, or set the attributes of a dataset</li> <li>Function to determine the type of netCDF file</li> <li>Menu is provided for convenience, inline is also perfectly fine </li> </ul> <h4>QLA netCDF4 library</h4> <ul> <li>Functions to create netCDF-4 or netCDF-4 'classic model' files directly from Igor</li> <li>Switch between types easily without changing any code</li> <li>Keeps track of dimension information</li> <li>Keeps track of _Netcdf4Dimid and _Netcdf4Coordinates required hidden attributes</li> <li>Keeps track of unlimited dimensions, layout, and chunking</li> <li>Keeps track of the hierarchy, duplicate names, dimensions size matching etc.</li> <li>Provides some basic help for keeping CF compliance</li> <li>Provides some hopefully helpful error/information messages in the history area</li> <li>Compression and shuffling is available</li> <li>Functions follow similar syntax to netCDF C library functions</li> <li>Functions vaguely named after netCDF functions e.g. NC_def_var becomes QLA_def_var</li> </ul> <p>A sample .ipf is included which uses almost all the functions available that you can use to make your own netCDF-4 / netCDF-4 classic and figure out how it all works, test the files using ncdump, nccopy, or the included loader etc.</p> <h5>Limitations:</h5> <ul> <li>Only HDF5 based netCDF-4 files can be created directly. To create a netCDF-3 use the netCDF API nccopy.exe to  convert your netCDF-4 classic model into a netCDF-3 i.e.</li> </ul> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">// convert a netCDF-4 classic into a netCDF-3</span><br /> <span style="color: #007575;">ExecuteScriptText</span> <span style="color: #000000;">/</span>B <span style="color: #000000;">/</span><span style="color: #c34e00;">Z</span> <span style="color: #009c00;">&quot;cmd.exe /C nccopy -3 myNC4classic.nc myNC3.nc</span></div></div> <ul> <li>More exotic datatypes like ENUM are probably possible but aren't currently included in the library </li> </ul> <p>All credit goes to Howard Rodstein for all his effort with changes and additions to the HDF5 operations within Igor. These include but are probably not limited to:</p> <ol> <li>New HDF5DimensionScale operation - this is what makes creating netCDF-4 dimensions possible</li> <li>HDF5 attribute creation order tracking and indexing</li> <li>Fixed length HDF5 string attributes</li> <li>Loading of VLEN type data needed for reading netCDF-4 dimensions </li> <li>HDF5SaveData /STRF flag for explicit control of text formatting</li> <li>HDF5SaveData /OPTS flag for controlling the type of dataspace; required for scalar variables</li> </ol></span> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/global_attributes.png"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/global_attributes.png" width="397" height="300" alt="Global attributesinformation" typeof="foaf:Image" class="content_body" /> </a> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/variable_attributes.png"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/variable_attributes.png" width="306" height="300" alt="Variable attribute information" typeof="foaf:Image" class="content_body" /> </a> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/dimension_attributes_0.png"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/dimension_attributes_0.png" width="349" height="300" alt="Dimension information" typeof="foaf:Image" class="content_body" /> </a> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/dump.png"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/dump.png" width="326" height="300" alt="Header dump" typeof="foaf:Image" class="content_body" /> </a> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">9.00.x</span> </span> <section class="comment-section"> </section> Thu, 01 Apr 2021 13:40:55 +0000 cpr 21590 at https://www.wavemetrics.com LEEM-PEEM Analysis https://www.wavemetrics.com/node/21490 LEEM-PEEM Analysis <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/f-cheynis" lang="" about="/user/f-cheynis" typeof="schema:Person" property="schema:name" datatype="">F. Cheynis</a></span> <span>Fri, 12/11/2020 - 01:20 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/45" hreflang="en">Graphing</a></span> <span class="entity-reference"><a href="/taxonomy/term/46" hreflang="en">Image Processing</a></span> <span class="entity-reference"><a href="/taxonomy/term/41" hreflang="en">User Interface</a></span> <span class="entity-reference"><a href="/taxonomy/term/40" hreflang="en">Utilities</a></span> </span> <span class="body"><h3>About</h3> <p>LEEM-PEEM Analysis a program package to extend the image analysis tools provided by Elmitec GmbH acquisition software Uview2000 for the Low-Energy Electron Microscopy (LEEM) and Photo-Emission Electron Microscopy (PEEM) techniques. This package is freely available to the LEEM-PEEM user community considering that the authors will be pleased that the following reference be cited: <a href="https://doi.org/10.1063/1.4871437">Rev. Sci. Instru. 85 (2014) 043705</a>.</p> <h3>Features</h3> <ul> <li>The Graphical User Inferface (GUI) is divided into three parts. The most outfitted component concerns Elmitec GmbH Uview2000 movies (<em>.dav</em>) or image sequences (<em>.dat</em> sequence). These files are opened with a dedicated button. Vizualisation of the sequence is then possible. The built-in "Image Contrast" panel developed by Wavemetrics can be used to adjust the image rendering.</li> </ul> <ul> <li>Standard file-handling procedures are implemented such as <strong>Extract</strong> (<em>e.g.</em> to select certain images of the original data and create a new movie) and <strong>Convert</strong> (to generate a <em>.mov</em> or a <em>.avi</em> movie for presentations).</li> </ul> <ul> <li>Image processing includes polynomial background removal (<strong>Backgrnd</strong>) using Igor Pro built-in procedure.</li> </ul> <ul> <li>Two approaches are implemented for image drift correction (<strong>Drift. Corr.</strong>). The first is based on an automated image-to-image intercorrelation. The second approach requires that the user marks/locates a given detail on the surface under consideration in different images of the sequence. The drift is then linearly interpolated between these positions and a new movie is created.</li> </ul> <ul> <li>A particle analysis procedure (<strong>Part. Anal.</strong>) is also available. An arbitrary number of particles (<em>i.e.</em> black, resp. white, areas on a white, resp. black, background) are characterized (area and<em> x, y</em> position) as a function of the movie image number. Manual and Iterated built-in thresholding methods are implemented to detect automatically the current position of a given particle. A procedure to measure the intensity of a given region-of-interest along the image sequence is implemented (<strong>I<sub>ROI</sub></strong>). This is particularly useful for <strong>reflectivity I(V)</strong> curves.</li> </ul> <ul> <li>The second and third components of the GUI enable to display in Igor Pro <em>.mov</em> movies and various types of individual images obtained from Elmitec acquisition software (<em>.dat</em>) or in standard formats (<em>.tiff</em>, <em>.png</em>, and <em>.jpeg</em>).</li> </ul> <h3>Install</h3> <ul> <li> You need Igor Pro 6.3 or higher.</li> </ul> <ul> <li>Unpack the .zip file.</li> </ul> <ul> <li><strong>LEEM_Analysis2009.ipf</strong> and <strong>LEEM_Analysis2015.ipf</strong> files are global procedures. So simply move them to the 'Igor Procedures' folder or in a folder with an alias pointing to it in the 'Igor Procedures' folder.</li> </ul> <ul> <li>All other '<strong>.ipf</strong>' files are shared procedures. Move these '<strong>.ipf</strong>' files in the 'User Procedures' folder or in a folder with an alias pointing to in in the 'User Procedures' folder.</li> </ul> <ul> <li>Start Igor Pro. 'LEEM analysis 2009' and 'LEEM analysis 2015' items should be available in the 'Macros' menu. Choose the item according to the year release of your Uview2000 software. This creates the main panel. Enjoy !!</li> </ul> <h3>Limitations</h3> <ul> <li>So far only 1024x1024 images and image sequences are supported.</li> <li>This package is provided as-is without any warranty.</li> </ul></span> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/LEEM-PEEM%20analysis%20GUI.PNG"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/LEEM-PEEM%20analysis%20GUI.PNG" width="340" height="300" alt="User interface of the LEEM-PEEM analysis package" typeof="foaf:Image" class="content_body" /> </a> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/LEEM-PEEM%20analysis.PNG"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/LEEM-PEEM%20analysis.PNG" width="590" height="300" alt="Typical configuration of the LEEM-PEEM analysis package interface" typeof="foaf:Image" class="content_body" /> </a> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">6.30.x</span> </span> <section class="comment-section"> </section> Fri, 11 Dec 2020 09:20:43 +0000 F. Cheynis 21490 at https://www.wavemetrics.com X-Y Browser https://www.wavemetrics.com/node/21303 X-Y Browser <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/tony" lang="" about="/user/tony" typeof="schema:Person" property="schema:name" datatype="">tony</a></span> <span>Thu, 06/04/2020 - 08:48 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/45" hreflang="en">Graphing</a></span> <span class="entity-reference"><a href="/taxonomy/term/41" hreflang="en">User Interface</a></span> </span> <span class="body"><p>X-Y Browser is a user interface for previewing Y vs X plots of paired waves. Waves are paired by specifying the required X wave in the wavenote of the Y wave as a key pair. The GUI can also be used to preview X-Y plots of specified columns of 2D waves.</p> <p><img alt="" data-entity-type="file" data-entity-uuid="3e97512f-5adb-4f73-a131-29c5142a0541" height="335" src="/sites/www.wavemetrics.com/files/users/user69/X-Y%20Browser_0.png" width="512" /></p> <p>The project adds menu items to the Data and Windows menus. The Paired Wave Browser panel allows the user to select wave pairs or 2D waves and to preview them in a Y vs X plot.</p> <p>The browser is useful for building Y vs X plots of many pairs of waves, where the waves cover different spectral ranges. One reason to use X-Y wave pairs rather than 2D waves is to maintain compatibility with various tools for spectroscopy that will not work with 2D waves.</p> <p>This is designed to be combined with a custom file loader that sets the wavenote. An example is the <a href="https:www.wavemetrics.com/node/21301">WiRE loader for Renishaw Raman files</a>. It should not be used for spectra that have constant spacing of points! Using the SetScale operation to set the x-scaling for constantly-spaced data will unleash a world of functionality, and is one of the things that helps make Igor Pro such an indispensible tool for spectroscopy. If, however, you are forced to work with X-Y data, X-Y Browser may make your life a little easier.</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">9.00.x</span> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> </section> Thu, 04 Jun 2020 15:48:19 +0000 tony 21303 at https://www.wavemetrics.com WiRE file loader for wdf files https://www.wavemetrics.com/node/21301 WiRE file loader for wdf files <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/tony" lang="" about="/user/tony" typeof="schema:Person" property="schema:name" datatype="">tony</a></span> <span>Tue, 06/02/2020 - 08:56 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/45" hreflang="en">Graphing</a></span> </span> <span class="body"><p>A file loader for wdf files created by Renishaw's WiRE software for Raman spectroscopy.</p> <p><img alt="" data-entity-type="" data-entity-uuid="" height="263" src="/sites/www.wavemetrics.com/files/users/user69/WireLoader.png" width="512" /></p> <p>Line scans and map grids are imported as multiple 1D waves. The corresponding Raman shifts are saved in an accompanying wave. The name of the wave containing the Raman shift is recorded in the wavenote for each data wave. This allows pairs of waves to be browsed and plotted efficiently using a custom X-Y browser (I will make a separate project release for something like that). Embedded images are extracted from the wdf file and can be plotted with an overlay of map grid points. Mouseover grid points in the map browser GUI to display spectra and click to select spectra for plotting.</p> <p>The project adds an item to the Load Waves menu, and the map browser can be found in the Packages submenu of the Data menu.</p> <p>Note that this loader is based on some guesswork about the file structure, and I haven't tested it extensively.</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">8.00.x</span> </span> <section class="comment-section"> </section> Tue, 02 Jun 2020 15:56:10 +0000 tony 21301 at https://www.wavemetrics.com JSON XOP https://www.wavemetrics.com/node/20976 JSON XOP <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> </span> <span><a title="View user profile." href="/user/thomasbraun" lang="" about="/user/thomasbraun" typeof="schema:Person" property="schema:name" datatype="">thomas_braun</a></span> <span>Mon, 07/15/2019 - 11:45 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/38" hreflang="en">Packages</a></span> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> <span class="entity-reference"><a href="/taxonomy/term/43" hreflang="en">Programming</a></span> <span class="entity-reference"><a href="/taxonomy/term/40" hreflang="en">Utilities</a></span> </span> <span class="body"><p><a href="https://www.json.org">JSON</a> is a format for exchanging data between applications. This XOP implements a 100% standards compliant interface for reading and writing arbitrary JSON files.</p> <p>Documentation and Downloads: <a href="https://docs.byte-physics.de/json-xop/">https://docs.byte-physics.de/json-xop/</a></p> <p>The XOP is available for Igor Pro 8 free of charge.</p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">8.00.x</span> </span> <a href="https://docs.byte-physics.de/json-xop/" target="_blank">View Homepage</a> <section class="comment-section"> <article data-comment-user-id="9954" id="comment-18669" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/9954"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/ukos/profile-images/2019-06/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">ukos</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1563227303"></mark> <span class="comment-body"><p>I was looking for something like this. This is really helpful. Thank you.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=18669&amp;1=default&amp;2=en&amp;3=" token="OcD8MxriWWlFc9nDOg-nq0Jt25IcTntTDTBR1CJvNGA"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">July 15, 2019 at 02:48 pm - <a href="/comment/18669#comment-18669" hreflang="en">Permalink</a></p> </article> </section> Mon, 15 Jul 2019 18:45:14 +0000 thomas_braun 20976 at https://www.wavemetrics.com SPEC Loader https://www.wavemetrics.com/node/20935 SPEC Loader<span><a title="View user profile." href="/user/hrodstein" lang="" about="/user/hrodstein" typeof="schema:Person" property="schema:name" datatype="">hrodstein</a></span> <span>Tue, 06/04/2019 - 09:48 am</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/44" hreflang="en">File Input/Output</a></span> </span> <span class="body"><p>This code loads the data from a SPEC file. It requires Igor Pro 7.00 or later.</p> <p>From <a href="http://www.certif.com/content/spec/">http://www.certif.com/content/spec/</a></p> <blockquote> <p>spec is a UNIX-based software package for instrument control and data acquisition widely used for X-ray diffraction at synchrotrons around the world and in university, national and industrial laboratories.</p> </blockquote> <p>See also <a href="http://www.esrf.eu/UsersAndScience/Experiments/MX/About_our_beamlines/Beamline_Components">http://www.esrf.eu/UsersAndScience/Experiments/MX/About_our_beamlines/B…</a></p> <p>The code adds a "Load SPEC File" item to the Data-&gt;Load Waves menu.</p> <p>See the comments at the top of the "SPEC Loader.ipf" file for further information.</p> <p> </p></span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">7.00.x</span> </span> <section class="comment-section"> </section> Tue, 04 Jun 2019 16:48:09 +0000 hrodstein 20935 at https://www.wavemetrics.com