Analysis https://www.wavemetrics.com/ en Spectra Image Profile - Create profiles from, normalize and edit 2D spectral data https://www.wavemetrics.com/node/21549 Spectra Image Profile - Create profiles from, normalize and edit 2D spectral data <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>Mon, 02/15/2021 - 07:44 pm</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/46" hreflang="en">Image Processing</a></span> <span class="entity-reference"><a href="/taxonomy/term/41" hreflang="en">User Interface</a></span> </span> <span class="body"><p>This project provides tools for working on 2D spectral data, and was inspired by the WaveMetrics Image Line Profile procedure (now replaced by the internal Line Profile tool). The basic functionality is similar to the official tool at first glance, but this project has many convenient features tailored for spectroscopic data such as detector images, two-dimensional scans or intensity maps. The main functionality is the horizontal or vertical data integration between two region-of-interest (ROI) lines to create a profile, which can be saved, compared or even used to modify the 2D data itself. Other functions (such as normalization) are applied directly to the 2D data. <strong>The tool works directly on the input data, but a backup is saved upon start.</strong> Several quick-tools to work on 1D-3D data are included as well.</p> <p>I tried my best to test everything thoroughly, but you should verify the correct behavior yourself to be sure. Bug reports and suggestions for new features are always welcome.</p> <h2>User Interface controls</h2> <p>To start, select a 2D wave in the Data Browser and then go to <strong>‘Spectra Tools’ -&gt; ‘Image Profile …’</strong> in the top menu. Or use the command line:</p> <span class="geshifilter"><code class="igor geshifilter-igor">SpectraProfile<span style="color: #000000;">&#40;</span>inputWave<span style="color: #000000;">&#41;</span></code></span> <p>A quick overview of all controls can be found below:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="64bf0287-1fca-4748-9f1c-6b8ad10b46fd" height="432" src="/sites/www.wavemetrics.com/files/users/user1029/ImagePr_manual_ver3.7.png" width="922" /></p> <ul><li>The profile can be calculated in <strong>horizontal (h key) or vertical (v key) direction</strong>. Diagonal or free-form modes (like in the Line Profile tool) are not available.</li> <li>The Region-of-Interest (ROI) lines can be modified via the control variables, by dragging the lines directly with the mouse on the image or by using the cursor keys on the keyboard (holding the shift key speeds up movements by 4x and the ctrl / command key slows down movement by 1/2).</li> <li>To instantly go to the <strong>full (minimal) ROI </strong>width use the respective check boxes or use the page up / page down key.</li> <li><strong>Normalize Profile:</strong> The profile (not the image) will be normalized to fall between 0 and 1.</li> <li><strong>Mouse Csr Profile:</strong> An additional profile appears for comparison, which shows the current row or column under the mouse cursor<strong> </strong>(toggle with the m key). This profile is not saved.</li> <li><strong>Snap Lines to Grid:</strong> The ROI line positions are constrained to include only full rows / columns.</li> <li><strong>Keep average Int.:</strong> This will preserve the average intensity when normalizing the 2D data. Normalization involves division by some normalization term, which reduces the intensity. This checkbox will rescale the data back to the intensity level before normalization.</li> <li><strong>Undo All Changes:</strong> Resets all changes made to the 2D data.</li> <li><strong>Undo Last Change:</strong> Undoes the last change made to the 2D data (will not undo multiple steps).</li> </ul><h3>Normalization buttons</h3> <p>Currently, three normalization functions are implemented:</p> <ul><li><strong>Div. by Profile:</strong> This divides the 2D image by the current profile (each column in horizontal mode and each row in vertical mode, respectively). The profile is slightly smoothed before the division to avoid amplifying noise. Holding the <strong>ctrl / command</strong> key while pressing the button prevents this smoothing step. See further below how to modify the smoothing parameter.</li> <li><strong>Each Maximum:</strong> Finds the maximum of each row (horizontal mode) or each column (vertical mode) and divides the row / column by this value. This is useful, for example, to equalize the data in one direction (use the Keep avg. Int. checkbox to prevent downscaling of the data to 1)</li> <li><strong>A user-defined button (here labeled ‘Ring Currrent’):</strong> Normalize by user provided information. This can be any data parameter or wave saved in the current experiment. Examples are normalization by a secondary readout, time, concentration etc. See the last section on how to define your own functionality here.</li> </ul><h3>The Save Profile and Snapshot buttons</h3> <p>The Save profile button saves the current profile next to the input data using a name ending which depends on the selected range. The ending is of the format “_H(xxx-xxx)” (horizontal mode) or “_V(xxx-xxx)” (vertical mode), where xxx give the start and end of the current range, e.g., “mydata_H(16.7-19.3)”. If the full image is selected the ending will be just “_prH” or “_prV”, respectively. Holding the shift key while pressing the button will lock the ending to “_prH” / “_prV” regardless of the selected range. The range and width is always saved inside the output wave’s note.</p> <p>The Snapshot button will instead create and display a backup of the current profile for comparison. Each button press updates this snapshot to the current one. This profile will not be saved.</p> <h3>The Delete ROI Section button</h3> <p>This button removes the columns (horizontal) or rows (vertical) inside the Region Of Interest. If the data at the beginning of the wave is removed, the scaling is adjusted to account for the deleted points. However, if data in the center is removed the scaling cannot be adjusted, since a waves scaling must be always linear and continuous. Be aware that this may lead to a mismatch between the image data and the scaling. If the scaling is important (e.g., a continuous energy scale), either refrain from using this feature or take care to only remove sections at the edges.</p> <h3>The Subtract Profile button</h3> <p>The current profile will be subtracted from each column (horizontal mode) or row (vertical mode). This can be used, for example, to remove constant features from a measurement which appear undisturbed in part of the data and thus can be selected with the ROI lines.</p> <p>This button has an additional functionality <em>only in horizontal mode</em>: The spectrum can be shifted each column step according to the Y-axis delta. In other words, each increasing column the Y-scale delta value is added to (or subtracted from) the profile’s x scaling, which subtracts the profile in <em>diagonal</em> direction. This is useful to subtract features which change with the parameter on the Y scale like, for example, spectral features moving with increasing photon energy.</p> <ul><li>Hold <strong>ctrl / command</strong> to subtract the profile along <strong>increasing Y delta values</strong>.</li> <li>Hold <strong>alt / option</strong> to subtract the profile along <strong>decreasing Y delta values</strong>.</li> </ul><p>Below example shows the diagonal subtraction result:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="102b1734-043e-4c42-b537-5790251a2352" height="282" src="/sites/www.wavemetrics.com/files/users/user1029/ImagePr_diagonal%20example.jpg" width="578" /></p> <h3>The Shift +/- buttons</h3> <p>These two buttons only work horizontally (regardless of the selected mode) and are used to add or subtract the Y-axis scale from the X-axis. In other words, the X-scaling of each column is adjusted by its respective Y-scaling value; the data is recalculated into a parallelogram. This will straighten features in the data which were changing with increasing Y values. An example would be a photon-energy (Y) scan of a spectrum where certain spectral features increase in their (X) emission energy. Subtracting the photon energy scale from a photoelectron spectrum in a kinetic energy scale would give binding energy, while adding the photon energy scale reverts back to kinetic energy. The effect is illustrated again with above example data:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="232e657b-94d0-475a-86b8-fe40301c1291" height="280" src="/sites/www.wavemetrics.com/files/users/user1029/ImagePr_shift%20example.jpg" width="500" /></p> <p>Hold <strong>ctrl / command</strong> to cut partial data after the shift has been applied (the parallelogram is cut back into a rectangle). Note that this might fail if there is not even one complete row of data left (the skew of the parallelogram is too large to fit a rectangle inside).</p> <h3>Align Features functionality</h3> <p>This algorithm looks for similar features of each column (horizontal mode) or row (vertical mode) and tries to align these features for maximum overlap by shifting each column / row by a certain amount. The algorithm uses wave correlation and shifts the data in whole point steps (no interpolation). This can be used, for example, to correct slight shifts of peaks in a spectrum or to estimate the shift of a peak versus some other parameter like time or position:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="f96bb5b8-6b97-4ff5-986b-7dff870bd4b5" height="273" src="/sites/www.wavemetrics.com/files/users/user1029/ImagePr_align%20example.jpg" width="571" /></p> <p>The algorithm uses the first column (bottom to top in horizontal mode) or row (left to right in vertical mode) of the data as reference and tries to align all other columns / rows to this reference. Hold <strong>shift</strong> to use the last row / column instead (top to bottom in horizontal mode and right to left in vertical mode).</p> <p>Often, it is not desired to align to the full data with lots of different features. Setting the A and/or B cursors onto the image will limit the range from which the reference is selected to maximize overlap with only one selected feature. This might still fail if many similar features are present.</p> <p>Activate <strong>Smooth </strong>to smooth the data before aligning. This can improve the results for noisy data.</p> <p>Activate <strong>Output Shift Result</strong> to write the shift values into a wave with the name ending "_shft". The output is scaled by the 2D data’s wave scaling.</p> <p>Note that the algorithm is ‘dumb’ in a sense that it only looks for the maximum correlation and not if peak features really match etc. In the worst case this just aligns artifacts such as noise.</p> <h2>Quick access functions in the menu</h2> <p>Some useful functions are available in the Spectra Tools menu:</p> <ul><li><strong>Append 1D,2D Datasets into 2D Data:</strong> Combines the columns (Y dimension) of multiple datasets (e.g., multiple measurements) into one consecutive 2D data wave. The X dimension is extended to cover the full X range of all datasets if needed.</li> <li><strong>Stack 2D Datasets into 3D Data:</strong> Stacks multiple 2D spectra (e.g., MCP images) on top of each other to produce a 3D array.</li> <li><strong>Profile of 2D\3D Data:</strong> Same as creating a profile over the full data in horizontal or vertical mode using the profile panel. This will give 1D data for a 2D input, or 2D data or a 3D input.</li> <li><strong>2D Image from 3D Data:</strong> Sums 3D data in the layer (array) direction to give a 2D image (e.g., gives a sum of all MCP images of a 3D array).</li> <li><strong>Split Up 2D\3D Data:</strong> Separates 2D / 3D data into individual waves holding columns, rows or layers. The individual waves are saved in a folder with the name of the input.</li> </ul><h2>Procedure settings and user button code</h2> <p>The procedure header has two global constants which control the smoothing factor of …</p> <ul><li><strong>kNormProfileSmooth:</strong> Sets the smoothing factor as an integer for profile normalization. The profile is smoothed by this factor before used for division with the 2D data.</li> <li><strong>kAlignSmooth:</strong> The initial smoothing factor applied to each row / column before the correlation is calculated. Useful to suppress noise. The factor can be adjusted at any time inside the panel.</li> </ul><h3>The user-defined (normalization) button</h3> <p>Two functions and one global variable are used to provide the functionality for the user button:</p> <ul><li><strong>kUserInfoBtnName:</strong> Defines the button’s label and can be changed to reflect the purpose of the button. This name should be short to fit inside the button.</li> <li><strong>Profile_ActivateUserInfoButton(inputWave):</strong> A function for checking whether the conditions for using the button are fulfilled. A return value of 1 activates, any other value disables the button. One could for example check here if the required information is contained in the 2D data or loaded in the current experiment.</li> <li><strong>Profile_ExecuteUserInfoButton(inputWave)</strong>: This function is called to do the normalization (or whatever you like to do here). Return a scaling factor for scaling the intensity to its average after the normalization step should the Keep average Int. checkbox be activated (returning 0 skips this step).</li> </ul><p>You can modify the constant and the two functions directly at the beginning of the procedure file, but it is more convenient to provide your own code in a separate file or inside the experiment environment. Use the <strong>Override</strong> keyword in front of the Function / StrConstant statement to override the standard definitions inside the package. Have a look at the example implementation inside the project’s procedure, which is used to normalize the ring current of synchrotron experiments saved inside the 2D data itself.</p> <p>While the user button is intended for normalization, it is really a free-for-all button for any modification to the 2D data you may want. You could instead write a function which, for example, splits the image in half or applies an interpolation or does something completely different in each experiment file.</p> <p>The following code shows the current implementation of the user-definable normalization button:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">Static</span> <span style="color: #0000ff;">StrConstant</span> kUserInfoBtnName = <span style="color: #009c00;">&quot;Ring Current&quot;</span>&nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// the title of the user button</span><br /> <br /> <span style="color: #0000ff;">Static</span> <span style="color: #0000ff;">Function</span> Profile_ActivateUserInfoButton<span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Wave</span> inwave<br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> activate = <span style="color: #000000;">0</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// +++ conditions for activation +++</span><br /> &nbsp; &nbsp; activate = <span style="color: #c34e00;">StringMatch</span><span style="color: #000000;">&#40;</span><span style="color: #c34e00;">GetDimLabel</span><span style="color: #000000;">&#40;</span>inwave,<span style="color: #000000;">1</span>,<span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span>,<span style="color: #009c00;">&quot;*mA*&quot;</span><span style="color: #000000;">&#41;</span>&nbsp; <span style="color: #ff0000; font-style: italic;">// check if dim-labels contain &quot;mA&quot; values</span><br /> &nbsp; &nbsp; activate = <span style="color: #c34e00;">StringMatch</span><span style="color: #000000;">&#40;</span><span style="color: #c34e00;">note</span><span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span>,<span style="color: #009c00;">&quot;*ring current normalized*&quot;</span><span style="color: #000000;">&#41;</span>? <span style="color: #000000;">0</span> : activate&nbsp; <span style="color: #ff0000; font-style: italic;">// already normalized?</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// +++</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> activate <span style="color: #ff0000; font-style: italic;">// return 1 to activate button</span><br /> <span style="color: #0000ff;">End</span><br /> <br /> <span style="color: #0000ff;">Static</span> <span style="color: #0000ff;">Function</span> Profile_ExecuteUserInfoButton<span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Wave</span> inwave<br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> valAvg = <span style="color: #000000;">0</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// +++ ring current normalization procedure +++</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> <span style="color: #c34e00;">i</span>, value<br /> &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">i</span> = <span style="color: #000000;">0</span>; <span style="color: #c34e00;">i</span> <span style="color: #000000;">&lt;</span> <span style="color: #c34e00;">DimSize</span><span style="color: #000000;">&#40;</span>inwave,<span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span>; <span style="color: #c34e00;">i</span> += <span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">String</span> Currlabel = <span style="color: #c34e00;">GetDimLabel</span><span style="color: #000000;">&#40;</span>inwave,<span style="color: #000000;">1</span>,<span style="color: #c34e00;">i</span><span style="color: #000000;">&#41;</span>&nbsp; <span style="color: #ff0000; font-style: italic;">// get the information from the column label</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007575;">sscanf</span> Currlabel, <span style="color: #009c00;">&quot;%s (%f mA)&quot;</span>, Currlabel, value&nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// search for ring current info in the form &quot;time (XXX mA)&quot;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span>value <span style="color: #000000;">!</span>= <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inwave<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span><span style="color: #c34e00;">i</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">/</span>= value<br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">endif</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; valAvg += value <span style="color: #ff0000; font-style: italic;">// add the values for intensity re-normalization later</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">endfor</span><br /> &nbsp; &nbsp; valAvg <span style="color: #000000;">/</span>= <span style="color: #c34e00;">i</span>+<span style="color: #000000;">1</span><br /> &nbsp; &nbsp; <span style="color: #c34e00;">Note</span> inwave, <span style="color: #009c00;">&quot;ring current normalized&quot;</span>&nbsp; <span style="color: #ff0000; font-style: italic;">// write into note that the normalization has been done</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// +++</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> valAvg &nbsp; <span style="color: #ff0000; font-style: italic;">// return the intensity normalization factor</span><br /> <span style="color: #0000ff;">End</span></div></div> <p> </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 class="entity-reference">7.00.x</span> <span class="entity-reference">6.30.x</span> </span> <section class="comment-section"> <article data-comment-user-id="15087" id="comment-21200" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/15087"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/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">Rob</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1613643573"></mark> <span class="comment-body"><p>Wow. That single handily replaces 90% of the scripts I use every day with one convenient panel!</p> <p>Thank you for sharing 😊</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21200&amp;1=default&amp;2=en&amp;3=" token="iDtWkgu4FFxLGU4Pw4omGPiVkLyH1VC2tS-FVC8EKaU"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 18, 2021 at 02:19 am - <a href="/comment/21200#comment-21200" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21216" 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/2020-07/WM%20Logo2.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="1613698229"></mark> <span class="comment-body"><p>Great to hear. Thank you for your comment! I think this tool saves me the most time as well (others are graph-related tools which I haven't put up here yet ;). I guess the other 10 % are specialized scripts only related to your field? Please let me know if there is a feature which would make your (and others) life easier.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21216&amp;1=default&amp;2=en&amp;3=" token="WI7FVmYKRcLuj-w7HHTD5icdHNHWFNF7mM4Wd5TWi10"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 18, 2021 at 05:30 pm - <a href="/comment/21216#comment-21216" hreflang="en">Permalink</a></p> </article> </section> Tue, 16 Feb 2021 03:44:27 +0000 chozo 21549 at https://www.wavemetrics.com Spectra Difference Generator - Subtract, add, divide or multiply two spectra with precise control https://www.wavemetrics.com/node/21539 Spectra Difference Generator - Subtract, add, divide or multiply two spectra with precise control <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, 02/04/2021 - 04:48 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/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"><p>This is a tool for quickly aligning and comparing two (1D) data waves and calculate the difference, sum, product or quotient between the two on the fly. The first input data is modified via controls while second input data acts as the reference to compare against. The former can be shifted, offset and scaled manually with respect to the reference to find the optimal overlap or to extract certain spectral features from the difference etc. The the original purpose was to calculate the difference (hence the name Difference Generator), but support for addition, multiplication and division has been added.</p> <p><strong>The underlying original data of both the edited wave and reference wave is never modified in any way.</strong> The comparison is handled with temporary data, and modifications (default wave ending "_mod") as well as the arithmetic result are always saved as new output waves. The default wave ending for the output is "_dif" for subtraction, "_sum" for addition, "_mul" for multiplication and "_div" for division. All settings are saved in the output wave's notes and will be reloaded automatically upon restarting the tool with the same input. The program is fully folder aware.</p> <p>I tried my best to test everything thoroughly, but you should verify the correct behavior yourself to be sure. Bug reports and suggestions for new features are always welcome.</p> <h3>Graphical User Interface (GUI) controls</h3> <p>To start the user interface, select one or two (1D) waves in the Data Browser and then go to 'Spectra Tools' -&gt; 'Difference between Spectra ...' in the top menu. Or use the command line:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;">SpectraDifferenceGenerator<span style="color: #000000;">&#40;</span>EditWave<span style="color: #000000;">&#41;</span><br /> or<br /> SpectraDifferenceGenerator<span style="color: #000000;">&#40;</span>EditWave,refwave=ReferenceWave<span style="color: #000000;">&#41;</span></div></div> <p>The second wave selected in the Data Browser (or the wave provided by the optional 'refwave' parameter) comes preselected as reference when starting the GUI. A quick overview of all controls can be found below:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="024cddf1-bd8d-4713-90fb-0fd24cacd33e" height="434" src="/sites/www.wavemetrics.com/files/users/user1029/DiffGen_manual_ver4.4.png" width="1024" /></p> <ul><li>The wave to modify and the reference wave are selected from the current folder. The current folder can be changed in the Data Browser during operation (while the GUI is open) to use waves from a different folder. The list of waves in the drop-down menu will reflect always the available 1D waves in the currently active folder.</li> <li>Both waves can be smoothed (Gaussian broadened). The smoothing is saved in the modified output (ending '_mod'). The smoothing of the reference wave is only for display and to calculate the result, but is, of course, not actually applied to the original reference data. However, the smoothing setting is saved with the output and will be reapplied upon reloading.</li> <li>Chose the mode of operation in the drop-down menu: <strong>A-B subtraction (- keyboard key), A+B addition (+ key), A*B multiplication (* key) or A/B division (/ key)</strong>.</li> <li>The result can be inverted (flipped in Y direction) with the <strong>Invert</strong> checkbox. The state of all checkboxes is saved with the output and will be reapplied upon reloading.</li> <li>The wave to modify can be moved in X / horizontal and Y /vertical movement using the <strong>arrow buttons</strong> (<strong>cursor keys</strong> on the keyboard).</li> <li>Scaling is done with the <strong>stretch (page up key)</strong> and <strong>shrink (page down key)</strong> controls.</li> <li>The delta step of each modification can be set using the nearby variable controls.</li> <li>Or use the controls for <strong>absolute changes</strong> to dial in the desired shift and scaling directly.</li> <li>Next to the controls for absolute changes are <strong>reset buttons</strong> for all modifications or individual changes of the X/Y shift or scaling.</li> <li><strong>Discard &amp; Quit</strong> will just close the interface without saving anything.</li> <li><strong>Save &amp; Quit</strong> will save the current state as output waves (edited wave name + "_mod" and "_dif" etc.) and then closes the interface. Optionally, the result is displayed in a new graph afterwards if the relevant checkbox is active. At the same time, all previous graphs with the same data set displayed are updated as well to reflect the new modification settings.</li> </ul><h4><strong>Additional keyboard shortcuts:</strong> </h4> <ul><li>Hold <strong>Command (Mac) / Ctrl (Win)</strong> for changes in steps of <strong>0.5</strong> times the current delta value.</li> <li>Hold <strong>Shift</strong> for changes in steps of <strong>10</strong> times the current delta value.</li> <li>Hold <strong>both Shift + Command / Ctrl</strong> for changes in steps of <strong>0.1</strong> times the current delta value.</li> <li><strong>r key</strong> to ‘Reset All'</li> <li><strong>i key</strong> to toggle ‘Invert’ mode</li> <li><strong>p key</strong> to toggle ‘Pin Background’</li> <li>Hold <strong>Command (Mac)/ Ctrl (Win) while pressing ‘Reset All’</strong> and the reference wave will be set to none.</li> <li>Hold <strong>Command (Mac)/ Ctrl (Win) while pressing ‘Save &amp; Quit’</strong> to override quitting (save only, and the windows stays open). This can be used to compare many waves in quick succession, e.g., by selecting the next wave from the drop-down menu.</li> <li>Hold <strong>Option (Mac) / Alt (Win) while pressing ‘Save &amp; Quit’</strong> to force 'Use Ref. Name' for saving (this has the same function as the respective checkbox).</li> </ul><h3>How the result is saved</h3> <p>The result is saved next to the input wave (the data to edit) as 'wavename +  "_mod"' for the modified data and  'wavename +  "_dif"' (or "_sum", "_mul", "_div" depending on the mode) for the (inverted) result. All modification settings are saved inside the wave note of both of these output waves. Here is an example where 'first spectrum' was edited and 'second spectrum' was the reference:</p> <p><img alt="" data-entity-type="file" data-entity-uuid="619be378-1e96-4ef1-8d3b-457bb783c7d2" height="535" src="/sites/www.wavemetrics.com/files/users/user1029/DiffGen_save_example.png" width="318" /></p> <p>Loading the tool with the same initial data ('first spectrum' in this case) will reload the last session from the '_mod' or '_dif' wave (if '_mod' does not exist). Note that loading a '_dif' or '_mod' wave directly will just start a new session with this data (this makes it possible to create differences of differences etc.).The wave to edit and the reference wave can be in different folders. If neither a 'dif' (or 'sum', 'mul', 'div') or 'mod' wave with the same name is found in the input wave's folder, then the default settings are loaded. It is thus recommended to move the result and modified waves together with the original wave to a new folder to be able to reload the settings later. Then what will be reloaded if you have mixed result waves from summing, multiplying etc.? The loading hierarchy is 'mod' &gt; 'dif' &gt; 'sum' &gt; 'mul' &gt; 'div', and thus deleting the 'mod' and 'dif' waves will load the settings from the 'sum' wave if present. </p> <h4>What is the purpose of the 'Use Ref. Name' setting?</h4> <p>Imagine the following scenario: A 'baseline' data and then several spectra have been measured in succession like this:</p> <ol><li>baseline</li> <li>spectrum1</li> <li>spectrum2</li> <li>spectrum3</li> <li>...</li> </ol><p>Lets assume you want to remove the baseline wave from all the spectra, but the spectra should not be modified (for example, to preserve their relative shift or intensity). This is achieved by modifying (shifting, scaling etc.) the baseline for each spectrum individually and then saving the calculation result next to each spectrum. Load the baseline as wave to modify and one spectrum as reference, then do the modification (since the roles of edited wave and reference are reversed here, this usually means 'Invert' needs to be activated). Before saving check 'Use Ref. Name' to save the result next to each spectrum. This will give:</p> <ol><li>baseline</li> <li>baseline_mod</li> <li>spectrum1</li> <li>spectrum1_dif</li> <li>spectrum2</li> <li>spectrum2_dif</li> <li>spectrum3</li> <li>spectrum3_dif</li> <li>...</li> </ol><p>What if you reload spectrum1 but have conflicting settings in waves spectrum1_mod <em>and </em>spectrum1_dif? In this case spectrum1_mod is loaded according to the hierarchy 'mod' &gt; 'dif' &gt; 'sum' &gt; 'mul' &gt; 'div'.</p> <h3>Settings inside the procedure header</h3> <p>The procedure header contains several settings as static constants, which can be edited to your liking:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">Constant</span> kSaveAux = <span style="color: #000000;">0</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">Constant</span> kAuxMode = <span style="color: #000000;">0</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kModEnd&nbsp; = <span style="color: #009c00;">&quot;_mod&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kOutEnd&nbsp; = <span style="color: #009c00;">&quot;_dif;_sum;_mul;_div;&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kAuxEnd&nbsp; = <span style="color: #009c00;">&quot;_smt;_int;&quot;</span><br /> <span style="color: #ff0000; font-style: italic;">// the following constants define the string keys for saving and loading parameters from wave notes</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kScaleKey&nbsp; &nbsp; = <span style="color: #009c00;">&quot;Mod Scale&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kShiftKey&nbsp; &nbsp; = <span style="color: #009c00;">&quot;Mod Shift&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kOffsetKey &nbsp; = <span style="color: #009c00;">&quot;Mod Offset&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kModSmthKey&nbsp; = <span style="color: #009c00;">&quot;Mod Smooth&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kRefSmthKey&nbsp; = <span style="color: #009c00;">&quot;Ref Smooth&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kXCsrSetKey&nbsp; = <span style="color: #009c00;">&quot;Cursor Set&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kSetModeKey&nbsp; = <span style="color: #009c00;">&quot;Data difference;Data summed;Data multiplied;Data divided;&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kModeInvKey&nbsp; = <span style="color: #009c00;">&quot;Result inverted&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kPinBaseKey&nbsp; = <span style="color: #009c00;">&quot;Baseline scaled&quot;</span><br /> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">StrConstant</span> kRefNameKey&nbsp; = <span style="color: #009c00;">&quot;Reference name used&quot;</span></div></div> <ul><li>The name endings ("_dif", "_mod" etc.) for saving the result waves can be modified here, should there be a conflict with other names in your experiment (in fact, Igor's own Differentiate function will also use 'dif' as name ending).</li> <li>The string keys for saving the settings into the result wave's note are editable as well, but altering these keys might make saved results incompatible for reloading later (if these keys are changed again).</li> <li>The GUI shows additional data derived from the calculation result, which is however normally not saved. Set kSaveAux to 1 to save this auxiliary data as well. The kAuxMode constant selects the type of data displayed (and saved). Currently two types of data exists: A smoothed version of the result (value = 0) and the integral of the result (value = 1). The respective ending of this additional data can be set via the kAuxEnd constant list.</li> </ul></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 class="entity-reference">7.00.x</span> <span class="entity-reference">6.30.x</span> </span> <section class="comment-section"> <article data-comment-user-id="8" id="comment-21150" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/8"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> <img class="employee-badge" src="/profiles/wavemetrics/themes/wavemetrics/images/icons/employee-icon.png" /> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">johnweeks</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1612461523"></mark> <span class="comment-body"><p>Nice looking, chozo! It has a lot of features that aren't in the Wave Arithmetic panel.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21150&amp;1=default&amp;2=en&amp;3=" token="WJBezdbLiP0PN3FDyUpabqgj4GQjZB4QOA7hP2JcrMw"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 4, 2021 at 09:58 am - <a href="/comment/21150#comment-21150" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21153" 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/2020-07/WM%20Logo2.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="1612506259"></mark> <span class="comment-body"><p>Thank you John! As the name suggests, this project started to make it possible to create differences with manual control and instant feedback for extracting even minute differences between measurements. But now that you mention it, it has indeed some things in common with the Wave Arithmetic package. This actually gives me the idea to add division and multiplication to the package for completeness.</p> <p>EDIT: I have now updated the project to include four modes: Difference, sum, multiplication, and division.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21153&amp;1=default&amp;2=en&amp;3=" token="MAc9wLL3BofO9TppYCNwiPBdrzC-G2JJ1wHU6wXHsdM"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 4, 2021 at 06:14 pm - <a href="/comment/21153#comment-21153" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21394" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1616053165"></mark> <span class="comment-body"><p>I am seeing a pattern here: it seems that spectroscopists keep toolbags of useful packages that do similar things. I have a procedure ("wave scale and subtract") that does some of the things your panel can do, but as usual your panel is more sophisticated and does a lot more.</p> <p>I will attach my little procedure here, just in case you are curious, but it doesn't do anything other than a small subset of what you do here.</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-zip file--package-x-generic"><a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/2021-03/ScaleSub106.zip" type="application/zip; length=4220">ScaleSub106.zip</a></span> </span> </span> </div> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21394&amp;1=default&amp;2=en&amp;3=" token="9XWk9f2DhDI9L_8yu-WUQc4glrklLpii2gG-V5HKV9I"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 17, 2021 at 05:17 am - <a href="/comment/21394#comment-21394" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="25" id="comment-21395" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/25"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/jjweimer/profile-images/2018-12/meimage.jpg" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">jjweimer</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1615986486"></mark> <span class="comment-body"><p>At one point in the mid- to late 90's (Igor 3 to 4), the toolbox was collected under the package <a href="https://www.wavemetrics.com/project/SpXZeigR">SpXZeigR</a>. I had an entire suite of features, help files, and tutorials. You won't find the original anymore (I have it somewhere on an archived CD). You will find a scattering of references to it, including a doi article that I did not even know about until just now.</p> <p>I always wished to have had the time (and/or co-developers) to sustain the package.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21395&amp;1=default&amp;2=en&amp;3=" token="XsgDvTdDRu1BUZXVTVjgFOkjk8SqyVrf82Gz7fy5np0"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 17, 2021 at 06:08 am - <a href="/comment/21395#comment-21395" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21396" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1615987546"></mark> <span class="comment-body"><p>Yes, I remember SpXZeigR, and I had that and other packages in mind when I wrote the comment. I had already developed a set of tools more specific to the techniques I was using at that time, so SpXZeigR never really entered my workflow.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21396&amp;1=default&amp;2=en&amp;3=" token="QgVzjOn-4e42j8viRyUXQ4tTu6oeQuLpZ76u5d7Dwgc"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 17, 2021 at 06:25 am - <a href="/comment/21396#comment-21396" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="25" id="comment-21397" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/25"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/jjweimer/profile-images/2018-12/meimage.jpg" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">jjweimer</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1615988324"></mark> <span class="comment-body"><p>RE SpXZeigR ... Sad as I am to see the package fade into the historical records, I am also glad to see a plethora of well-designed packages being provided to take its place.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21397&amp;1=default&amp;2=en&amp;3=" token="zrbP07NDWPoqJgshURDjPpu6CC77qIv1KugT1EwVK8Q"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 17, 2021 at 06:38 am - <a href="/comment/21397#comment-21397" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="8" id="comment-21401" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/8"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> <img class="employee-badge" src="/profiles/wavemetrics/themes/wavemetrics/images/icons/employee-icon.png" /> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">johnweeks</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1616002989"></mark> <span class="comment-body"><p>I remember SpXZeigR. If tech support queries reflects popularity, it was fairly popular :)</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21401&amp;1=default&amp;2=en&amp;3=" token="tWZ-PX5TCIbltyXzvjqlw-Oy7j1c8E0wIUSOjDsOMZA"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 17, 2021 at 10:43 am - <a href="/comment/21401#comment-21401" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="25" id="comment-21402" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/25"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/jjweimer/profile-images/2018-12/meimage.jpg" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">jjweimer</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1616008115"></mark> <span class="comment-body"><p>John: The support that WaveMetrics provided to sustain SpXZeigR was greatly appreciated.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21402&amp;1=default&amp;2=en&amp;3=" token="yG0aCOtHpUxvFZ1Ik99v2vmZKyWwFNONXGVrE-1LiJc"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 17, 2021 at 12:08 pm - <a href="/comment/21402#comment-21402" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="8" id="comment-21403" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/8"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> <img class="employee-badge" src="/profiles/wavemetrics/themes/wavemetrics/images/icons/employee-icon.png" /> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">johnweeks</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1616022726"></mark> <span class="comment-body"><p>I didn't mean that it had lots of problems! No matter how well designed your package is, people will get into trouble. So any package that gets used a lot will generate some number of queries, regardless of its quality.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21403&amp;1=default&amp;2=en&amp;3=" token="YpXcuIS69I70fEVY8rQhT_d8GLiiRq_EnY8zZ5ZfE6A"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 17, 2021 at 04:12 pm - <a href="/comment/21403#comment-21403" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21404" 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/2020-07/WM%20Logo2.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="1616036918"></mark> <span class="comment-body"><p>Tony, thank you for sharing your solution for this problem. It looks very nice and sufficient for the task (I would miss the shift in x, though). I hope the DiffGen project will be of use for you (and others) then. Yes, the problems and solutions of people in the community seem to be similar. Good thing, that there is a place to share. I am happy that I didn't have to come up with the ~10 projects I am using from the site (mostly your stuff, Tony). :)</p> <p>By the way, I didn't know or use SpXZeigR. Must have been before my time. ;)</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21404&amp;1=default&amp;2=en&amp;3=" token="d-WVmc8tu7o7bnTBp-8AUImTvpKeh6PgQBlok6wALsQ"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 17, 2021 at 08:08 pm - <a href="/comment/21404#comment-21404" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21406" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1616052882"></mark> <span class="comment-body"><p>And before SpXZeigR there was technical note 020...</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21406&amp;1=default&amp;2=en&amp;3=" token="uF0I3dWHxNerQ6OdWYdNQmxfm-6u8Z1iBHRz1X-hAmQ"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 18, 2021 at 12:34 am - <a href="/comment/21406#comment-21406" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="8" id="comment-21408" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/8"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/Artboard%201_1.png" width="100" height="100" alt="" typeof="foaf:Image" class="thumbnail" /> </span> <img class="employee-badge" src="/profiles/wavemetrics/themes/wavemetrics/images/icons/employee-icon.png" /> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">johnweeks</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1616088764"></mark> <span class="comment-body"><p>Tech Note 20 still exists in all its variants. And it still works!!! But the tools you folks have been making available are far superior.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21408&amp;1=default&amp;2=en&amp;3=" token="lVMFo4o8gb38bkvB0G9nNkyy2RlWCkDAPV8h3xzZKYA"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">March 18, 2021 at 10:32 am - <a href="/comment/21408#comment-21408" hreflang="en">Permalink</a></p> </article> </section> Thu, 04 Feb 2021 12:48:06 +0000 chozo 21539 at https://www.wavemetrics.com Spectra Background Remover - Subtract common spectroscopic background functions https://www.wavemetrics.com/node/21532 Spectra Background Remover - Subtract common spectroscopic background functions <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>Fri, 01/22/2021 - 08:49 pm</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/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"><p>This project provides functionality for calculating and removing (subtracting) backgrounds from (1D) data. The main purpose is to correct inelastic scattering backgrounds from photoemission spectra, but some general background types for other purposes are included as well. Both an user interface for interactively subtracting backgrounds as well as a function for calculating backgrounds from input data is provided.</p> <p>Note that it is always better to directly include the correct background function during curve fitting for analysis instead of subtracting data 'by hand'. Most of the background types provided here are also found as fit functions in the Multipeak-fit package for Igor 9.</p> <p>I tried my best to test everything thoroughly, but you should verify the correct behavior yourself for critical applications. Bug reports and suggestions for new features are welcome.</p> <p><img alt="" data-entity-type="file" data-entity-uuid="b22e01a9-d68c-453f-b49e-3c7826739009" height="535" src="/sites/www.wavemetrics.com/files/users/user1029/BackRem_screenshot_ver1.31.png" width="796" /></p> <h3>Included background types:</h3> <ul><li><strong>Constant:</strong> Subtract a constant value.</li> <li><strong>Step:</strong> Smooth step function which connects the two endpoints (using tanh()).</li> <li><strong>Linear:</strong> Linear function through the two endpoints.</li> <li><strong>Exponential:</strong> Normalized exponential function connecting the two endpoints.</li> <li><strong>Polynomial:</strong> Polynomial function fitted within the selected range.</li> <li><strong>Total Sum:</strong> The total sum inelastic scattering background after X. Li et al., J.Electron Spectrosc. Relat. Phenom. 63 (1993) 253-265</li> <li><strong>Shirley:</strong> The iterative Shirley inelastic scattering background after A. Proctor and P. A. Sherwood, Anal. Chem. 54, 13-19 (1982)</li> <li><strong>Tougaard:</strong> Three- and four-parameter universal scattering background after S. Tougaard, Surf. Interface Anal. 25: 137-154 (1997)</li> <li><strong>Tougaard Data:</strong> Scattering background using scattering cross-section data after S. Tougaard, Surf. Interface Anal. 25: 137-154 (1997).<br /> This data should ideally have a positive X scale starting from zero and at least the same total X width as the current spectrum (data not starting from x = 0 will be padded with zero values, and data which is too short may give the wrong result), like this one:<br /><br /><img alt="" data-entity-type="file" data-entity-uuid="368c1f8d-88ce-4d2c-938c-943f27f4db4c" height="208" src="/sites/www.wavemetrics.com/files/users/user1029/BackRem_CSdata_example.png" width="334" /></li> </ul><h3>Basic controls in the user interface:</h3> <p>To start, select a (1D) wave in the Data Browser and then select  'Spectra Tools' -&gt; 'Background Subtraction ...' in the top menu. Or use the command line:</p> <span class="geshifilter"><code class="igor geshifilter-igor">BackgroundSubtractGUI<span style="color: #000000;">&#40;</span>mydata<span style="color: #000000;">&#41;</span></code></span> <ul><li><strong>Subtract:</strong> Subtracts the current background (blue trace) from the data and then works with the subtracted data. This can be used to successively subtract multiple types of backgrounds one after another.</li> <li><strong>Undo:</strong> Reverts to the initial data.</li> <li><strong>Save Background:</strong> Saves the current background (blue trace) and current preview of the subtracted data (green trace) into the currently active data folder.</li> <li><strong>Overwrite &amp; Quit:</strong> Overwrites the original data with the current spectrum (red trace). This will not have any effect on the original data if no background was subtracted in the first place.</li> <li><strong>Left &amp; Right:</strong> Shows and modifies the cursor positions, which mark the effective range for the background calculation. The cursors can be dragged directly in the graph as well.</li> <li><strong>Fuzzy Range:</strong> The range is marked with the cursors and the Y height of the current data is used as start- and endpoints. The data is averaged over a certain range to smooth out noise. Set to zero if the range should end at the exact cursor location</li> <li>Background specific controls will appear, which are explained in tooltips.</li> </ul><h3>Running your own code:</h3> <p>You can generate backgrounds using the function:</p> <span class="geshifilter"><code class="igor geshifilter-igor">GenerateBackground<span style="color: #000000;">&#40;</span>backstruct, datawave, backwave, <span style="color: #000000;">&#91;</span>from, to<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span></code></span> <p>Populate the BackRemoveStruct structure with the desired parameters and provide both the original data (datawave) and a wave which the background will be written to (backwave). Both datawave and backwave need to have the same size and scaling. The 'from' and 'to' optional parameters are for setting the start and end positions of the background calculation. If these parameters are omitted then the first and last points of the input data are used (this does not work with polynomial background). Here is an example (for data with an x-scaling from 0 to 40):</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">Function</span> backgroundtest<span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Wave</span> inwave<br /> &nbsp; &nbsp; <span style="color: #0000ff;">STRUCT</span> BackRemoveStruct <span style="color: #c34e00;">s</span><br /> &nbsp; &nbsp; <span style="color: #007575;">StructFill</span> <span style="color: #c34e00;">s</span><br /> &nbsp; &nbsp; <span style="color: #c34e00;">s</span>.Functype=<span style="color: #009c00;">&quot;Shirley&quot;</span><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #007575;">Duplicate</span><span style="color: #000000;">/</span>O inwave, $<span style="color: #000000;">&#40;</span><span style="color: #c34e00;">NameOfWave</span><span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span>+<span style="color: #009c00;">&quot;_bk&quot;</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Wave</span> backwave = $<span style="color: #000000;">&#40;</span><span style="color: #c34e00;">NameOfWave</span><span style="color: #000000;">&#40;</span>inwave<span style="color: #000000;">&#41;</span>+<span style="color: #009c00;">&quot;_bk&quot;</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">String</span> statusmsg = GenerateBackground<span style="color: #000000;">&#40;</span><span style="color: #c34e00;">s</span>, inwave, backwave, from=<span style="color: #000000;">10.5</span>,to=<span style="color: #000000;">37.7</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #007575;">print</span> statusmsg<br /> <span style="color: #0000ff;">End</span></div></div> <p>The BackRemoveStruct structure looks like this:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">Structure</span> BackRemoveStruct<br /> &nbsp; &nbsp; <span style="color: #0000ff;">String</span> FuncType &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// Constant, Step, Linear, Exponential, Polynomial, Total Sum, Shirley, Tougaard, Tougaard Data</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> avgPercent <span style="color: #ff0000; font-style: italic;">// y Values around range ends positions get averaged</span><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> expScale &nbsp; <span style="color: #ff0000; font-style: italic;">// Exponential</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> polyDegree <span style="color: #ff0000; font-style: italic;">// Poly</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> fullLinear <span style="color: #ff0000; font-style: italic;">// Line</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// for Step</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> stepPos&nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// x center position</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> stepSmooth <span style="color: #ff0000; font-style: italic;">// smoothing value</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// for Tougaard (universal CS parameters)</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> TouB<br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> TouC<br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> TouD<br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> TouT<br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// Tougaard Data</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> CSscale&nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// scaling (default 1)</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">String</span> CSdata &nbsp; &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// name of CS wave in current folder</span><br /> &nbsp; &nbsp; <span style="color: #ff0000; font-style: italic;">// Shirley and Total Sum</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> followData <span style="color: #ff0000; font-style: italic;">// follow data outside range</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> smoothData <span style="color: #ff0000; font-style: italic;">// integer between 3 and 20</span><br /> <span style="color: #0000ff;">EndStructure</span></div></div> <p> </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 class="entity-reference">7.00.x</span> <span class="entity-reference">6.30.x</span> </span> <section class="comment-section"> <article data-comment-user-id="69" id="comment-21105" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1611397141"></mark> <span class="comment-body"><p>Very nice, Stephan. For years I have been meaning to add Shirley and Tougaard to the baselines package, but the only inelastic scattering stuff I do is Raman, no XPS or anything like that, so I never got around to it. This is great.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21105&amp;1=default&amp;2=en&amp;3=" token="8JKn6b2ceCfv7qYJzfxZ_Z_u_rkkydOFMbpaZwHV3tI"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">January 23, 2021 at 02:19 am - <a href="/comment/21105#comment-21105" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21106" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1611398396"></mark> <span class="comment-body"><p>This would make a more graceful exit if the data browser window is closed:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">Menu</span> <span style="color: #009c00;">&quot;Spectra Tools&quot;</span><br /> &nbsp; &nbsp; <span style="color: #009c00;">&quot;Background Subtraction ...&quot;</span>,<span style="color: #000000;">/</span><span style="color: #c34e00;">Q</span>, <span style="color: #007575;">CreateBrowser</span>;BackgroundSubtractGUI<span style="color: #000000;">&#40;</span><span style="color: #000000;">$GetBrowserSelection</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br /> <span style="color: #0000ff;">End</span></div></div> <p> </p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21106&amp;1=default&amp;2=en&amp;3=" token="PcS_n9rqIGJw5L2hJGshPV54K8q6uAF2wuCQvLIIDU8"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">January 23, 2021 at 02:39 am - <a href="/comment/21106#comment-21106" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21107" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1611487250"></mark> <span class="comment-body"><p>For the buttons in the top left corner of the window to display properly on a mac, without text clipping, the minimum widths are about 63 and 114. Mac uses a larger font than windows for buttons (and doesn't allow you any say in the matter).</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21107&amp;1=default&amp;2=en&amp;3=" token="T3ChXywPvdp2JAC8qNFzOPFiDv0XjmV0bm5hbhuoxwA"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">January 24, 2021 at 03:20 am - <a href="/comment/21107#comment-21107" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21110" 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/2020-07/WM%20Logo2.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="1611540912"></mark> <span class="comment-body"><p>Tony, thank you very much for your kind comments. Getting useful comments like this is one of the reasons to finally release this tool here! In fact, I did not realize the problem with the data browser, since I cannot imagine running Igor without. ;) Also, thanks for the size check on Mac. I know about the size mismatch between the two OSs too well, but unfortunately don't have easy access to a Mac. I can 'lend' one from time to time, and will try to test my GUI design. I uploaded a small patch to address these points.</p> <p>I was using your baseline package in the past and found it very useful. Feel free to take any code from here if you find it useful to add to your package.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21110&amp;1=default&amp;2=en&amp;3=" token="ak0ElQt1u9nBZtC1uZ6Lgs1xB0xTjjUXroO4vXAl2SA"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">January 24, 2021 at 06:15 pm - <a href="/comment/21110#comment-21110" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="15087" id="comment-21162" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/15087"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/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">Rob</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1612880738"></mark> <span class="comment-body"><p>Hi Chozo</p> <p>I just thought I would say that this, along with your spectra difference script, will be extremely useful for so many people using Igor in the spectroscopy community. The work you have done on the multipeak package is equally awesome. It is all much appreciated, and it makes it much easier to recommend Igor as a solution that just works "out the box" for this type of analysis.</p> <p>All the best,</p> <p>Rob</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21162&amp;1=default&amp;2=en&amp;3=" token="rAB-5kH-dyDKbnmMXLeMEeP_b_NLQPwbu71fzmgwYfw"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 9, 2021 at 06:25 am - <a href="/comment/21162#comment-21162" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21168" 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/2020-07/WM%20Logo2.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="1612954233"></mark> <span class="comment-body"><p>Hi Robert,</p> <p>Thank you very much for your kind comment! I am super happy that these tools are of use for others. Did you already had the chance to test the new Multipeak Fit package? Just let me know if you find any bugs or have suggestions for improvements. I am currently polishing up a third project for release, which is inspired by the Image Profile code to work on 2D images (ARPES data, MCP images, energy scans etc.). I hope to get it out next week.</p> <p>Best wishes,</p> <p>Stephan</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21168&amp;1=default&amp;2=en&amp;3=" token="wrZMH9w_VIvvNtCr8thOZ-tlA1Labyme_dFfQp3CAYg"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 10, 2021 at 02:50 am - <a href="/comment/21168#comment-21168" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="15087" id="comment-21198" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/15087"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/default_images/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">Rob</span> </div> <div class="clearit"></div> </a></span> <p class="visually-hidden">In reply to <a href="/comment/21168#comment-21168" class="permalink" rel="bookmark" hreflang="en">Hi Robert, Thank you very…</a> by <a title="View user profile." href="/user/chozo" lang="" about="/user/chozo" typeof="schema:Person" property="schema:name" datatype="">chozo</a></p> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1613644403"></mark> <span class="comment-body"><p>No problem. I have been using the new multipeak fit package. It is great and has already found it's way into my workflow and replacing my notably worse scripts for fitting voigt profiles. An easy way of fitting multiple Voigt functions with the two widths defined (rather than a shape parameter) is critical for so many of us and has really been lacking in Igor until now.</p> <p>I have not come across any bugs yet... but I will let you know! My only long-term comment would be setting advanced constraints is still somewhat unintuitive. Even adding some more check boxes to quikcly allow coefficients above K1 to all be set the same would be a time saver.</p> <p>Sorry for taking this thread off-topic! To bring it back on-topic, in case you didn't know, there is a problem installing the background remover project using the Project Updater. You get the error message: "Could not find packages at <a href="https://www.wavemetrics.com/project-releases/21532">https://www.wavemetrics.com/project-releases/21532</a>."</p> <p>Thanks again</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21198&amp;1=default&amp;2=en&amp;3=" token="gZHDMMPf1J_EyfnpHL4wr1QN1bxJwp7HOlts3Cf14v0"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 18, 2021 at 02:13 am - <a href="/comment/21198#comment-21198" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21215" 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/2020-07/WM%20Logo2.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="1613697854"></mark> <span class="comment-body"><p>Thank you for the report. I have fixed the project page now and the Updater should happily accept the package.</p> <p>OK, I will go a bit off-topic as well: If you have ideas or requests for the new Multipeak Fit then you should definitely write an email to the support. The WaveMetrics staff can otherwise not imagine what people want exactly, and I too have often just proposed / implemented what I need or what was on the request-list anyway. I think it would be a matter of half an hour to implement a checkbox for the height / area coefficient K2. For higher coefficients it may be a bit trickier, since not all peaks have them. Anyway, just let your wish-list be heard. :)</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21215&amp;1=default&amp;2=en&amp;3=" token="K7oD97pxILEQw_BBfYOGZydSxHnW0juyzai_TTXJej8"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 18, 2021 at 05:24 pm - <a href="/comment/21215#comment-21215" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21219" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1613721074"></mark> <span class="comment-body"><p>What was it that prevented updater from installing the file? I worry that the code that parses the 'all releases' web page is a bit fragile. In fact, I'm tempted to change the installer and updater to use the latest release info from the main project page and ignore the all-releases page.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21219&amp;1=default&amp;2=en&amp;3=" token="sLebwCMRXfOs0UWdHHOD-nPM-_A0ldDxG5cxacC9cnc"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 18, 2021 at 11:51 pm - <a href="/comment/21219#comment-21219" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21221" 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/2020-07/WM%20Logo2.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="1613724776"></mark> <span class="comment-body"><p>Tony, I forgot to set the 'Version' field, which apparently makes the Updater think there is no release. I also found a small bug with the right-click menu, but I post that below the Updater project.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21221&amp;1=default&amp;2=en&amp;3=" token="tGWH-tvYr5iCzfrtpKMqn66yJQjo8s4XG8RV660FL3Q"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 19, 2021 at 12:52 am - <a href="/comment/21221#comment-21221" hreflang="en">Permalink</a></p> </article> </section> Sat, 23 Jan 2021 04:49:56 +0000 chozo 21532 at https://www.wavemetrics.com Marquee Peaks https://www.wavemetrics.com/node/21526 Marquee Peaks <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>Sun, 01/17/2021 - 08: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/39" hreflang="en">Curve Fitting</a></span> <span class="entity-reference"><a href="/taxonomy/term/41" hreflang="en">User Interface</a></span> </span> <span class="body"><p>A user interface that uses the graph marquee as an efficient way to select an x-range in order to make quick estimates of peak parameters.</p> <p><img alt="" data-entity-type="file" data-entity-uuid="96c00e85-e167-45d9-9043-f8891f78e359" src="/sites/www.wavemetrics.com/files/users/user69/Marquee%20Peaks%20Screenshot.png" width="400" /></p> <p>This is based on code that I've used for many years before cleaning up and posting here. Most of these parameters could be equally well determined by positioning cursors and using command line or quick fit menus, but I find the graph marquee to provide an especially efficient interface for selecting regions of interest. For more advanced decomposition of overlapping peaks Igor's multipeak fitting package works well, and global fitting is useful for fitting with linked coefficients. But, when you have many spectra plotted in a graph and want to produce just a quick list of peak heights for all of the traces, you may find Marquee Peaks to be helpful.</p> <p>Most of the Marquee Peak functions use the graph marquee to select a subrange of a plotted trace. They're used to determine peak heights, areas, centroids (centres of mass), and full-width at half-maximum (FWHM). Right click within the graph marquee to select which of these you want to calculate. When a trace is selected from the list of traces that pass though the marquee, the results of the calculation are written to history and shown in a tag on the graph. Select the 'clear' submenu to remove tags from the plot.</p> <p>Spectra must be baseline-free for these functions to be useful! Fit-derived uncertainties are not really meaningful.</p> <p>Peak height: fits a third order polynomial through the selected range, and then tries to find the peak by looking for the first zero-gradient within that selected range. For this to work nicely you should select a narrow region around the peak. I used a polynomial so that it should work with asymmetric peaks. Also gives peak position.</p> <p>Area: simply calculates the area within the selected x-range.</p> <p>Centroid: integrates the data over the selected range and looks for the position of area/2 in the integral wave. Also gives area.</p> <p>Peak fit: Selects the best fit from Gaussian, Lorentzian and Voigt over the selected x-range. Gives peak height, FWHM, and position for the best fit.</p> <p>Doublet Peak: Attempts to fit a pair of peaks to a doublet and derives peak position, height and FWHM parameters. Works best if the peaks are positioned at 1/4 and 3/4 of the selected x-range. Selects the best fit from attempts to fit a pair of Lorentzian, Gaussian and Voigt peaks.</p> <p>Includes options to do all-in-one determinations for all of the traces on the plot. The results of all-in-one calculation are presented in a table. The waves displayed in the table are located in the package folder. It's up to the user to copy data into a more useful location.</p> <p>This package also has some functions for normalizing spectra by peak height, peak area or total area. To normalize by total area or wavemax, use the trace and all traces menus (right click or shift-right click on a trace). The normalizing value can be changed in the settings window.</p> <p>'Print Waves in Marquee' prints the names of marquee traces in the history.</p> <p>Settings can be configured thorough the Analysis - Packages - Marquee Peaks Settings... menu. The traces and tags that Marquee Peaks adds to a graph window are removed either on the next mouseup, or when another Marquee Peak operation is selected, depending on the option selected.</p> <p>Note: for Voigt fits, the approximate peak FWHM is used as a fit coefficient. The fit function uses the accurate VoigtPeak function. This method allows some kind of uncertainty for peak FWHM to be derived from curve fitting.</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-21242" 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/2020-07/WM%20Logo2.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="1613805676"></mark> <span class="comment-body"><p>I found one bug: The "Normalize By Total Area" and "Normalize By Wave Maximum" calls in the TracePopup menu are broken, since the called functions want at least a name as input. I guess the original intention was to use a wrapper function here. Also, it seems the TracePopup menu entries appear even for image plots, which may lead to problems if calls are not handled separately for images and traces (easy to do in a wrapper function).</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21242&amp;1=default&amp;2=en&amp;3=" token="JwItqddubIOka8aXwN_D37Igcf792lTelwlNalbyIvE"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 19, 2021 at 11:21 pm - <a href="/comment/21242#comment-21242" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21246" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1613814607"></mark> <span class="comment-body"><p>Thanks for letting me know! Hopefully fixed for version 1.5.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21246&amp;1=default&amp;2=en&amp;3=" token="eHwsDY1GZibYQlCBMB_I-SeUNdpEm3DMg0_lI14-kOo"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 20, 2021 at 01:50 am - <a href="/comment/21246#comment-21246" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21248" 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/2020-07/WM%20Logo2.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="1613818606"></mark> <span class="comment-body"><p>Tony, unfortunately this version already summons the debugger upon start because TraceInfo is called for building the menus without a graph open yet. This works better:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> <span style="color: #000000;">/</span><span style="color: #c34e00;">S</span> filterByTraceType<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">string</span> str, int type<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #007575;">GetLastUserMenuInfo</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">string</span> out = <span style="color: #009c00;">&quot;&quot;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">ItemsInList</span><span style="color: #000000;">&#40;</span><span style="color: #c34e00;">WinList</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;*&quot;</span>, <span style="color: #009c00;">&quot;;&quot;</span>,<span style="color: #009c00;">&quot;WIN:1&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&gt;</span> <span style="color: #000000;">0</span> &nbsp;<span style="color: #000000;">&amp;&amp;</span> <span style="color: #c34e00;">strlen</span><span style="color: #000000;">&#40;</span>S_graphName<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #c34e00;">strlen</span><span style="color: #000000;">&#40;</span>S_traceName<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; out = <span style="color: #c34e00;">SelectString</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">NumberByKey</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;TYPE&quot;</span>, <span style="color: #c34e00;">TraceInfo</span><span style="color: #000000;">&#40;</span>S_graphName, S_traceName,<span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>==type, <span style="color: #009c00;">&quot;&quot;</span>, str<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">endif</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> out<br /> <span style="color: #0000ff;">end</span></div></div> <p>But I would think the two items could also be useful for images. Instead of blocking the menu here it might be an useful option to branch into ImageToWaveRef and TraceToWaveRef inside the normalization functions to handle both (and just quit for box/violin plots).</p> <p>EDIT: The code also needed checks for strlen.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21248&amp;1=default&amp;2=en&amp;3=" token="Odr3HVTIGfvHABj1-xPhRpK8Ny1iQ8H9ToWfd7fx1As"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 20, 2021 at 02:47 am - <a href="/comment/21248#comment-21248" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21249" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1613822690"></mark> <span class="comment-body"><p>Oops! Dynamic menus can be treacherous.</p> <p>Thanks for the fix!</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21249&amp;1=default&amp;2=en&amp;3=" token="IryvqwYt3-p-cyLRLjUNuWXhsXxqIRhcZ-yHK6p122o"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 20, 2021 at 04:04 am - <a href="/comment/21249#comment-21249" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21251" 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/2020-07/WM%20Logo2.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="1613993070"></mark> <span class="comment-body"><p>Tony, I am sorry, but it still didn't work out. This function is called (twice) on <em>every</em> menu command after all, and the info from GetLastUserMenuInfo gets stale real quick (e.g., by closing the graph and then opening some other menu). Here is the (hopefully ultimate) solution to just build the menu when a trace on the top graph is selected:</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> <span style="color: #000000;">/</span><span style="color: #c34e00;">S</span> filterByTraceType<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">string</span> str, int type<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">string</span> out = <span style="color: #009c00;">&quot;&quot;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">string</span> topgraph = <span style="color: #c34e00;">StringFromList</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">0</span>,<span style="color: #c34e00;">WinList</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;*&quot;</span>, <span style="color: #009c00;">&quot;;&quot;</span>,<span style="color: #009c00;">&quot;WIN:1&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">string</span> traces = <span style="color: #c34e00;">TraceNameList</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;&quot;</span>,<span style="color: #009c00;">&quot;;&quot;</span>,<span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #007575;">GetLastUserMenuInfo</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">string</span> selgraph = S_graphName, seltrace = S_traceName<br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> validTrace = <span style="color: #c34e00;">FindListItem</span><span style="color: #000000;">&#40;</span>seltrace, traces<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&gt;</span> -<span style="color: #000000;">1</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">Variable</span> validGraph = <span style="color: #c34e00;">StringMatch</span><span style="color: #000000;">&#40;</span>selgraph, topgraph<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #c34e00;">strlen</span><span style="color: #000000;">&#40;</span>topgraph<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&gt;</span> <span style="color: #000000;">0</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span>validGraph <span style="color: #000000;">&amp;&amp;</span> validTrace<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; out = <span style="color: #c34e00;">SelectString</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">NumberByKey</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;TYPE&quot;</span>, <span style="color: #c34e00;">TraceInfo</span><span style="color: #000000;">&#40;</span>S_graphName, S_traceName,<span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>==type, <span style="color: #009c00;">&quot;&quot;</span>, str<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">endif</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> out<br /> <span style="color: #0000ff;">end</span></div></div> <p>At this point I'd probably have given up on dynamic menus and instead handled the different types of plots inside the normalization functions. ;)</p> <p>By the way, some other details to note:</p> <ul><li>How about saving the output wave inside the same folder as the initial wave? This would keep things closer together.</li> <li>Repeatedly calling the normalize function creates another wave and appends yet another "_n". How about saving the original waves location (e.g., in the wave notes) and then refer back to the original for the next normalization call.</li> <li>I would anyway add some note somewhere that the data has been modified, e.g., adding something like "quick normalized by area" to the waves note.</li> </ul></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21251&amp;1=default&amp;2=en&amp;3=" token="3KjNZSFpa1L6pNamC1drxAOPLk-27yiRhVvB5o7qGlc"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 22, 2021 at 03:09 am - <a href="/comment/21251#comment-21251" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21252" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1613993213"></mark> <span class="comment-body"><p>Thanks for these good suggestions.</p> <p>For the dynamic menus, I have used code like this before. Is there a way that this fails?</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> <span style="color: #000000;">/</span><span style="color: #c34e00;">S</span> filterByTraceType<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">string</span> str, int type<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">WinType</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">!</span>=<span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #009c00;">&quot;&quot;</span> <span style="color: #ff0000; font-style: italic;">// don't do anything if Igor is just rebuilding the menu</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">endif</span> &nbsp; &nbsp;<br /> &nbsp; &nbsp; <span style="color: #007575;">GetLastUserMenuInfo</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #c34e00;">SelectString</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">NumberByKey</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;TYPE&quot;</span>, <span style="color: #c34e00;">TraceInfo</span><span style="color: #000000;">&#40;</span>S_graphName, S_traceName,<span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>==type, <span style="color: #009c00;">&quot;&quot;</span>, str<span style="color: #000000;">&#41;</span><br /> <span style="color: #0000ff;">end</span></div></div> <p> </p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21252&amp;1=default&amp;2=en&amp;3=" token="CZan1Vv7EDlLI6r-6fVg6mEq5XTGoZhcNzL1WXz7S6w"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 22, 2021 at 03:26 am - <a href="/comment/21252#comment-21252" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21253" 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/2020-07/WM%20Logo2.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="1613994531"></mark> <span class="comment-body"><p>Yes, you can crash this easily, unfortunately:</p> <ol><li>Have two graphs open and invoke the trace menu on the first graph</li> <li>Now close this graph and invoke some other menu while the other graph is on top</li> </ol><p>The result is that GetLastUserMenuInfo still refers to the now-closed old graph and the function drops the ball.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21253&amp;1=default&amp;2=en&amp;3=" token="PSF5lmYqlVbLz4LnL36C6nzt1Vtx6YxLcWSU5UDtZwo"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 22, 2021 at 03:48 am - <a href="/comment/21253#comment-21253" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21256" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <p class="visually-hidden">In reply to <a href="/comment/21253#comment-21253" class="permalink" rel="bookmark" hreflang="en">Yes, you can crash this…</a> by <a title="View user profile." href="/user/chozo" lang="" about="/user/chozo" typeof="schema:Person" property="schema:name" datatype="">chozo</a></p> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1614002475"></mark> <span class="comment-body"><p>Hmm, that doesn't throw a run-time error for me. If I set a breakpoint I see the graph-does-not-exist error, but would never have noticed without Igor complaining about a run-time error. I've used code like this for a long time without noticing any problem. Do you definitely see a run-time error?</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21256&amp;1=default&amp;2=en&amp;3=" token="rqNsaG5ESEShLFVHiu9UDEAYxv3zXYW8WofNFDg9evw"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 22, 2021 at 06:01 am - <a href="/comment/21256#comment-21256" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21257" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <p class="visually-hidden">In reply to <a href="/comment/21256#comment-21256" class="permalink" rel="bookmark" hreflang="en">Hmm, that doesn&#039;t throw a…</a> by <a title="View user profile." href="/user/tony" lang="" about="/user/tony" typeof="schema:Person" property="schema:name" datatype="">tony</a></p> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1614003272"></mark> <span class="comment-body"><p>OK, I see the problem, TraceInfo is unhappy about nonexistent graph.</p> <p>This should do it.</p> <div class="geshifilter"><div class="igor geshifilter-igor" style="font-family:monospace;"><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> <span style="color: #000000;">/</span><span style="color: #c34e00;">S</span> filterByTraceType<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">string</span> str, int type<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">WinType</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">!</span>=<span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #009c00;">&quot;&quot;</span> <span style="color: #ff0000; font-style: italic;">// don't do anything if Igor is just rebuilding the menu</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">endif</span> &nbsp; &nbsp;<br /> &nbsp; &nbsp; <span style="color: #007575;">GetLastUserMenuInfo</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">winType</span><span style="color: #000000;">&#40;</span>S_graphName<span style="color: #000000;">&#41;</span> == <span style="color: #000000;">1</span><span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #c34e00;">SelectString</span> <span style="color: #000000;">&#40;</span><span style="color: #c34e00;">NumberByKey</span><span style="color: #000000;">&#40;</span><span style="color: #009c00;">&quot;TYPE&quot;</span>, <span style="color: #c34e00;">TraceInfo</span><span style="color: #000000;">&#40;</span>S_graphName, S_traceName,<span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>==type, <span style="color: #009c00;">&quot;&quot;</span>, str<span style="color: #000000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">endif</span><br /> &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #009c00;">&quot;&quot;</span><br /> <span style="color: #0000ff;">end</span></div></div> <p> </p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21257&amp;1=default&amp;2=en&amp;3=" token="r0NHplIDGBsQQ1ellkNzM0JDt45Vqzy1mbXDyprCU7M"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 22, 2021 at 06:14 am - <a href="/comment/21257#comment-21257" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="1029" id="comment-21258" 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/2020-07/WM%20Logo2.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="1614004080"></mark> <span class="comment-body"><p>Hi Tony, nice! This will work. Apparently, TraceInfo() does not complain when getting fed a non-existing trace in an existing graph (this can happen, for example when a trace is removed from a graph). But be aware that this builds on some sketchy behavior of several functions: If the trace does not exist then NumberByKey will give NaN which makes SelectString spit out an empty string regardless of the options. In this case, that is what you want. ;) </p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21258&amp;1=default&amp;2=en&amp;3=" token="Z4Z_okW88zyswSGxug7EVcRR3Qrta1XeLi3-qpO9Onw"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 22, 2021 at 06:28 am - <a href="/comment/21258#comment-21258" hreflang="en">Permalink</a></p> </article> <article data-comment-user-id="69" id="comment-21259" class="js-comment"> <span class="teaser-flag"><a class="user-profile-compact-wrapper" href="/user/69"> <div class="user-compact-image-wrapper"> <span class="field-profile-picture"> <img src="/sites/www.wavemetrics.com/files/styles/thumbnail/public/tony/profile-images/2018-12/tpic.jpeg" width="100" height="94" alt="" typeof="foaf:Image" class="thumbnail" /> </span> </div> <div class="user-compact-info-wrapper"> <span class="username-wrapper">tony</span> </div> <div class="clearit"></div> </a></span> <p class="visually-hidden">In reply to <a href="/comment/21258#comment-21258" class="permalink" rel="bookmark" hreflang="en">Hi Tony, nice! This will…</a> by <a title="View user profile." href="/user/chozo" lang="" about="/user/chozo" typeof="schema:Person" property="schema:name" datatype="">chozo</a></p> <div class="comment-body-wrapper"> <mark class="hidden" data-comment-timestamp="1614004686"></mark> <span class="comment-body"><p>Yeah, I had checked what NumberByString does. It doesn't matter matter what string the function returns unless it is the menu of interest that is being built, and in that case both s_graphname and s_tracename will be valid.</p></span> <div class="clearit"></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=21259&amp;1=default&amp;2=en&amp;3=" token="vilSXqYL29Wm_NFlXzKa3l4fzLpdidqQlIJGdW6dMac"></drupal-render-placeholder> </div> <div class="clearit"></div> <p class="comment-post-date">February 22, 2021 at 06:38 am - <a href="/comment/21259#comment-21259" hreflang="en">Permalink</a></p> </article> </section> Sun, 17 Jan 2021 16:20:44 +0000 tony 21526 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 Quick Scatter Plot https://www.wavemetrics.com/node/21391 Quick Scatter Plot <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>Mon, 08/31/2020 - 09:32 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/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>For efficiently exploring relationships among 1D waves.</p> <ul><li>Provides an interface to generate and preview Y vs X scatter plots.</li> <li>Allows rapid selection of different pairs of waves to look for correlations.</li> </ul><p>This code does not help to produce beautiful scatter plots. Igor has built-in and extensively customizable ways to create 2D and 3D scatter plots, as well as scatter plot matrices. Rather, this is a tool for quickly and visually exploring the degree of correlation between different quantities.</p> <p><img alt="" data-entity-type="file" data-entity-uuid="0f4ece76-4d02-4748-a19f-fc5f3b377d88" height="300" src="/sites/www.wavemetrics.com/files/users/user69/QuickScatterPlot%20preview.png" /></p> <p>Look for Quick Scatter Plot in the Packages submenu of the Data and Windows menus.</p> <p>I use this to quickly create "Harker diagrams", which are used in Earth science to trace the evolution of a suite of rocks.</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> Mon, 31 Aug 2020 16:32:06 +0000 tony 21391 at https://www.wavemetrics.com Reduction of 2D scattering patterns to 1D I-q profile https://www.wavemetrics.com/node/20952 Reduction of 2D scattering patterns to 1D I-q profile <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/maru" lang="" about="/user/maru" typeof="schema:Person" property="schema:name" datatype="">maru</a></span> <span>Tue, 06/25/2019 - 09:07 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> </span> <span class="body"><p>Red2D is a small data reduction package to convert 2D elastic scattering patterns to 1D I-q profile, working on a scientific data analysis software Igor Pro.</p> <p>This package can</p> <ul><li>Load 2D scattering patterns (32bit signed integer tiff)</li> <li>Display 2D images and 1D I-q profiles</li> <li>Get beam center and SDD by fitting standard sample (AgBh)</li> <li>Make and apply mask on images</li> <li>Perform circular average or sector average with proper mask</li> <li>Normalize 1D I-q profiles with exposure time, transmittance, sample thickness, absolute intensity correction, and also support cell and solvent subtraction.</li> </ul></span> <a href="https://www.wavemetrics.com/sites/www.wavemetrics.com/files/projects/Red2D_Image.png"><img src="/sites/www.wavemetrics.com/files/styles/content_body/public/projects/Red2D_Image.png" width="667" height="300" alt="Reduction of AgBh scattering patterns into 1D profile" typeof="foaf:Image" class="content_body" /> </a> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">8.00.x</span> <span class="entity-reference">7.00.x</span> </span> <a href="https://github.com/hurxl/Red2D/blob/master/README.md" target="_blank">View Homepage</a> https://b4b4r07.mit-license.org/ <section class="comment-section"> </section> Wed, 26 Jun 2019 04:07:41 +0000 maru 20952 at https://www.wavemetrics.com NeuroTools: an interface for flexible data organization and analysis https://www.wavemetrics.com/node/20949 NeuroTools: an interface for flexible data organization and 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/ben-murphy-baum" lang="" about="/user/ben-murphy-baum" typeof="schema:Person" property="schema:name" datatype="">Ben Murphy-Baum</a></span> <span>Tue, 06/18/2019 - 07:50 pm</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/41" hreflang="en">User Interface</a></span> </span> <span class="body"><p>NeuroTools provides an interface for efficiently navigating, organizing, and performing analysis routines on large data sets.</p> <p>At its core, NeuroTools is an alternative data browser that allows users to define, save, and recall 'Data Sets' using powerful wave matching tools. 'Data Sets' are filtered lists of wave paths that can be recalled at will for arbitrary analysis routines. Data Sets can be organized and divided in various ways, so as to run batches of waves through a function separately.</p> <p>While NeuroTools provides a suite of built in basic functions, an 'External Functions' module allows the user to easily import their own functions into NeuroTools, allowing them to use Data Sets with their own functions. </p> <p>NeuroTools was originally written with electrophysiological and functional imaging data in mind, but is now developed as a fairly general purpose analysis suite. Many of the data organization concepts in NeuroTools were inspired by previous work by Dr. W. Rowland Taylor and Dr. Rob Smith.</p> <p>TO INSTALL:<br /> Put the .ipf files in the 'User Procedures' folder, and put the NT_Loader.ipf in the 'Igor Procedures' folder. To open NeuroTools, navigate to the 'Analysis:Packages' menu, and select Load_NeuroTools. </p> <p>*To access available functions, click the vertical bar in the center of the GUI to collapse and expand the Parameters 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> Wed, 19 Jun 2019 02:50:30 +0000 Ben Murphy-Baum 20949 at https://www.wavemetrics.com SVM https://www.wavemetrics.com/project/SVM SVM <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/morten" lang="" about="/user/morten" typeof="schema:Person" property="schema:name" datatype="">morten</a></span> <span>Mon, 01/15/2018 - 10:43 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> </span> <span class="body"><p>This XOP wraps libSVM to provide Support Vector Machine-based classification, regression, and novelty detection in IgorPro.<br /> For a detailed desccription of the algorithm, see <a href="https://github.com/cjlin1/libsvm">https://github.com/cjlin1/libsvm</a><br /><br /> To install, simply copy the applicable XOP (macOS or windows, 32 or 64 bit) and SVM Help.ihf to the respective Igor Extension folder. SVM has been tested (and should work) on Igor7 on macOS and Igor 6.37 and Igor7 on Windows7.<br /> The XOP adds two operations, SVMTrain and SVM classify, to IgorPro. For a detailed explanation if the syntax, see the included help file.<br /><br /> SVM_Example.pxp provides an example file to illustrate common usage of the SVM package.<br /> For a detailed description of each parameter and how to chose model parameters, see the libSVM documentation and FAQ at <a href="https://github.com/cjlin1/libsvm">https://github.com/cjlin1/libsvm</a>. And stressed in the documentation, normalizing your data (eg. [0...1]) is crucial for successful training and classification.<br /><br /> Issues &amp; Comments:<br /> -custom kernels are currently not implemented.<br /> -the cache size is fixed at 100 MB.<br /> -the trained model file is saved separately. While the SVM model format is documented, so far I have not felt it is worth the effort to serialize / deserialize the model into Igor. One advantage is that the model files are cross-platform compatible and can be used with libSVM from the command line etc.<br /> -not all features have been thoroughly tested, I am mainly interested in classification / novelty detection.<br /> -SVM_Example.pxp contains a function to export Igor waves for training / classification with the command line tools of libSVM.<br /> -the XOPs were compiled using Xcode10 / Visual Studio 2017 Community Edition using the XOP 7.03 toolkit using libSVM v322.<br />  </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, 16 Jan 2018 06:43:29 +0000 morten 8130 at https://www.wavemetrics.com Loomis-Wood Add-In https://www.wavemetrics.com/project/LoomisWood Loomis-Wood Add-In <span class="field-os-compatibility"> <span class="entity-reference"><a href="/taxonomy/term/26" hreflang="en">Mac-Intel</a></span> <span class="entity-reference"><a href="/taxonomy/term/27" hreflang="en">Windows</a></span> </span> <span><a title="View user profile." href="/user/cfneese" lang="" about="/user/cfneese" typeof="schema:Person" property="schema:name" datatype="">cfneese</a></span> <span>Sat, 10/21/2017 - 03:03 pm</span> <span class="field-project-type"> <span class="entity-reference"><a href="/taxonomy/term/49" hreflang="en">Analysis</a></span> </span> <span class="body">The Loomis-Wood Add-In is a package for Igor Pro that allows the creation of interactive Loomis-Wood plots for the analysis of high resolution molecular spectra.</span> <span class="field-supported-version"> <label>Supported Igor Version</label> <span class="entity-reference">6.30.x</span> </span> <a href="https://github.com/cfneese/LoomisWood" target="_blank">View Homepage</a> https://github.com/cfneese/LoomisWood/blob/Version_2/LICENSE <section class="comment-section"> </section> Sat, 21 Oct 2017 22:03:55 +0000 cfneese 8006 at https://www.wavemetrics.com