JCAMP Data File Viewers

Macintosh Viewer last updated on: Sunday, 31-Jul-2022 11:30:24 CDT; size: 10M bytes

Download the Macintosh Jcamp Viewer.

Version 3.6.0.

Macintosh Viewer last updated on: Sunday, 31-Jul-2022 11:31:39 CDT; size: 8.7M bytes

Download the Macintosh Jcamp Viewer (cocoa).

Version 3.6.0.

Windows viewer last updated on: Sunday, 31-Jul-2022 11:42:56 CDT; size: 17M bytes

Download the Windows Jcamp Viewer (32 bit).

Version 3.6.0.

Windows viewer last updated on: Sunday, 31-Jul-2022 11:44:06 CDT; size: 19M bytes

Download the Windows Jcamp Viewer (64 bit).

Version 3.6.0.

I have not tested these linux viewers. If you try running it on your linux system, please drop me an email with your results.

Linux viewer last updated on: Sunday, 31-Jul-2022 11:45:47 CDT; size: 18M bytes

Download the Linux Jcamp Viewer.

Linux viewer last updated on: Sunday, 31-Jul-2022 11:46:23 CDT; size: 18M bytes

Download the Linux Jcamp Viewer(64 bit).

Linux viewer last updated on: Sunday, 31-Jul-2022 11:46:57 CDT; size: 18M bytes

Download the Linux Jcamp Viewer(ARM).

This version of the viewer has the capability to directly download and process raw FID data files from the UWSP data server. Some very brief documentation (and dated) on the data processing capabilities is available here.

Here is a screen shot taken on an iMac 3/26/2020.

http://www.jcamp-dx.org Click on a thumbnail on the left to switch spectra. Twenty NMR and twenty IR/MS spectra max.

JCAMP-DX spectral files are best displayed using the JCAMP viewer as the Chime plugin(Windows only) seems unable to display spectra with a large number of data points in an AFFN JCAMP data file.

All jcamp files on this site can be viewed as well as those on the NIST web site. In general, all compounds on this site will have infrared, 1H, 13C, and mass spectra. The viewer reads and saves in AFFN format only. It can read compressed JCAMP formats, but writes only AFFN format. See the official JCAMP specification site for details.

General Viewer Features:

All spectra can be expanded in both X and Y coordinates via commands or buttons on the screen. Click and drag will outline a region which can be expanded or displayed via an inset window. Expansion will automatically rescale the Y dimension to bring the largest peak to full scale. Annotations (simple text labels) can be added via the annotation button (toggles on and off). These annotations will be saved if the file is saved via file:save. Right click on a peak will bring up a contextual menu. One of the options is 'Mark peak' which will produce a label showing the X coordinate of the peak. Labeled peaks will also be saved if file:save is executed. Automatic peak picking results in identification of all all peaks above the threshold which can be adjusted via on screen controls. A peak table can also be displayed.

In general, anything displayed on screen can be printed or copied to the clipboard. If Quicktime is installed, the screen display can be saved in jpeg format suitable for direct display on web pages. All jpeg files on our web site were created using this feature of the viewer. Other picture formats may be available as well depending on your system configuration.

Infrared Spectra:

Infrared spectra in the database were recorded and converted using a Nicolet FT-IR spectrometer. The default display format is % transmittance versus wavenumber (cm-1), but absorbance is also available. This default can be changed via the preferences dialog and may be overridden by preferences within the JCAMP file itself.

Mass Spectra:

Mass spectra in the database were recorded on a Hewlett-Packard GC/MS and converted to peak table format using software delveloped locally. Normal expansion and labeling is available.

1H nmr spectra:

Proton nmr spectra can be displayed in both Hz or ppm assuming the spectrometer observe frequency is available in the file header. The default can be changed via the preferences dialog. In addition, automatic integration can be performed. Raw FID data is available for some compunds in both JCAMP ntuples and MacNMR format. The viewer can read and display the real or imaginary portion of the JCAMP FID. We currently use the Bruker JDX export feature of Topspin 3.6 (400 MHz) to make files available for courses and research at UWSP.

13C nmr spectra:

Carbon nmr spectra can be displayed in both Hz and ppm assuming the spectrometer observe frequency is available in the file header. The default can be changed via the preferences dialog. Raw FID data is available for some compunds in both JCAMP ntuples and MacNMR format. The viewer can read and display the real or imaginary portion of the JCAMP FID.We currently use the Bruker JDX export feature of Topspin 3.6 (100 MHz)to make files available for courses and research at UWSP.

Nifty features:

  1. Save as JPEG has been added to the file menu and works on both platforms if Quicktime 4 is installed. Another way to get files into a word processing document.
  2. Copy spectrum to the clipboard now works on Windows and Mac platforms.
  3. NMR spectra can be displayed in ppm or hz.
  4. An inset button has been implemented which displays the selection in a floating window while maintaining the full spectrum display in the main window. The inset is dynamically updated when a new region is selected in the main window. The inset window can be moved and resized. When the inset window is closed a copy of the inset window is displayed on the spectrum. Multiple insets can be displayed and edited. Insets are copied to the clipboard or printed as displayed.
  5. Buttons to display the integration trace, peak pick and peak list have been added. The preferences can be set to show some of these data upon file open.
  6. Chemical formulas and chemical structures can be pasted into the currently displayed spectrum. They will be saved in the data file (Macintosh only).
  7. The contents of the peak list, structure and inset windows will be copied to the clipboard or printed. High resolution printing on postscript printers has been implemented and functions well. It may fail on inkjet printers. Testing is in progress.
  8. Display of the ##Title line from the data file on the spectrum is now optional.
  9. A simplistic spectrum overlay capability has been implemented to overlay spectra of the same type. An overlay button will appear when two or more comparable spectra are opened. Only the first three will be overlaid.
  10. A Database item has been added to the file menu which allows direct access to the whole database from the viewer over the internet. This is hard coded into the application and points at http://pslc.uwsp.edu/ initially. A preference item is now available to allow pointing at a local web server. In addition to the above URL, the database is also available at http://pslc.ws/spectra. This may be modified at some point to allow direct access to the database stored on a local drive or CD. Search facilities may be added at a later time.
  11. A special JCAMP file format has been contructed to allow students to access problem sets via the viewer. Several features of the viewer are disabled when files of this type are loaded. Try this URL after installing and configuring the viewer.
  12. Multiple editable inset capability has been added. Insets will print to postscript printers.
  13. A new file menu item has been added which brings up a minimal web viewer to access the UWSP spectral data server.

Change log:

6/6/2022|10:31AM Had to clear integrationlist when clearall integrals button is pressed. Might be able to get a better estimate
of integration settings by setting limits a few Hz out from each edge. The integraion labels are now displayed
horizontally and include the chemical shift for proton spectra. At some point I will clean up the JOC_string so
it follows JOC standards.

6/5/2022|02:40PM Inserted the following code in process window so integration panel shows when
it is a proton spectrum where the integration panel is more useful.
if lables(22)="^1H" then
end if
Modified integrationlist labels that is copied to the Clipboard so that it makes a better table when pasted 
into MS word or OneNote. The format of the output strings for δ, compleing constants was modified to
follow ACS specifications as closely as possible.

I displayed the integral number of hydrogen lables  horizontally and it seems as though including the average chemical
shift might be a good addition as well. It was so easy to chemical shift, I added it with the δ symbol for
good measure.

6/4/2022|04:54PM I added a contextual menu item to the proton analysis window to expand on a
seected integration range. This expancion, like all expansions, searches for the highest peak and
scales the spectrum as it is expanded.

6/3/2022|04:53PM I fixed the restore prefs routine so it would also set the number digits for the peaks
in proton, carbon13 and IR spectra. A markpeaks1(range_number) was added so a second pass at
detecting lines in a multiplet could take advantage of calculating a better estimate of thresh to 
find peaks more accuately. 

5/28/2022|04:58PM I have removed the set reference, the default expansion ranges and added
"Show Integration Range" item to contextual menu for the process window. Modified the set
integral routine to perfrom a markpeaks to obtain a more accurated peak count.

5/19/2022|04:37PM The locmouse text was getting cut off after a drag through a region and
the only way to fix it was to open and close the prefs. I found the in the mousemove routine 
and fixed it. I also changed the mark peaks routine to sent the threshold at 0.0143 of the highest
peak in the range instead of 0.01 so it is not quite so sensitive. Need to see if I can use markpeaks
for all integration ranges. Still need to work on trailing edge routine to find integration edges.

5/7/2022|04:18PM The markpeaks and removepeaks routines in process were not adding and
removing peaks in a logical fashion. The peaks_marked array manipulation was changed to fix
the problems. I still need to get the first pass integration process to mark all of the peaks in an
integration range. Is markpeaks not working?

I changed a few default font sizes (axis, mouse, peak labels) to make them more readable on
a projector.

1/16/2022|11:41AM I discovered that the update module was no longer working, apparently because
HTTPSecureSocket is no longer supported. I changed to a URLConnection in the UpdateModule to
fix it. I have added a humpcal button to the process display when the Bruker PROHUMP is run
on chloroform in acetone. I also incorporated the old mark peak routine that will allow for marking
or removing a single peak from/to the peaks_marked array. At some point I need to add the markpeaks 
and remove peaks routines to spectradisplay.

1/14/2022|12:01PM I think I need to change the mark peaks routine to only mark peaks and
add a remove peaks routine. I will start with the process routine. I should also keep the
simple markpeak method to finely add and remove peaks?

1/13/2022|5:35PM I added a preference settings to turn the JOC displays on and off. The default is on.
I have been thinking about increasing some font sizes so it is a little easier to see things at first 
glance. Maybe later.

1/12/2022|02:13PM I figured that I may as well add the peaklist to the spectradisplay plot also. A default
peaklist now shows on all spectra. I should probably add switches to the preferences for these latest 

1/11/2022|02:18PM Over the past few days I have impletmented the integration cleanup and decided to go
ahead and print the standard literature format string on the the plots to show chemical shifts for
carbon-13 spectra and chemical shift/splitting/integration for proton spectra.

12/27/2021|12:43PM Next I will try to cleanup integrals by removing small peaks that have been marked in each range.
I started by finding most intense line in each range ('integrateranges(n,8) = most intense line in region).
Next I want to compare each line in region to most intense line and omit lines less than 1%? It seems like I
can use a modification of the mark peak routine to make the corrections.

12/26/2021|12:03PM An issue in the process:find_local_peak routine that caused an out of bounds was
fixed. Fixed seach_jdxlist so that pressing the download button dounloads all checked files and
then clears the check boxes. Turned off plot peak table by default.

10/23/2021|05:32PM The application update option has been modified to support the modified
folder structure on the server so the proper file will be downloaded for the platform being used
to run the viewer. This is version 3.2.5 and is an extention the 9/6/2021 file.

8/22/2021|11:22AM I got autopeakpick and integrate messages to blink forever, but only works 
with an odd number of windows actively blinking. I can not figure out why?

8/21/2021|05:36PM Iinserted code into the process windows to blink autopeakpick or integrate
text a few times. Maybe it should blink until the appropriate action is taken?

7/13/2021|04:26PM Modified search list boxes so d character downloads all of the checked files in
the list with the focus using the mouse.Focus is set to found_list_listbox after search_list is run. Right
click inside listbox will produce a contextual menu (Download) if any spectra are selected. I decided
to support keydown event d to download selected files.

7/1/2021|12:05PM I have reactivated expandtext lable on all spectrum windows. I am trying to get the
stack routine to support expand properly. I could not figure out a way to expand or contract stacked
windows so I turned stack(overlay) off and executed the plot refresh. Just discovered that drawthumbs
switching from process to spectradisplay does not throw up the spectradisplay spect until the mouse
is moved over the plot area. The window is not activating properly.

6/28/2021|02:50PM An infinite loop occurred in the reset_amp routine for spectradisplay, but not for
process. Strange?! I added code to prevent the infinite loop in both windows.

6/2/2021|01:27PM I decided to add the FileSaveasJPEG routines to the spectradisplay window and
make sure that there is a valid filename value.

6/1/2021 4:50 pm Saving the real vaules only of an nmr file causes a convertion to Hz which needs to 
be converted back to ppm after the save. I have set up the saveasjpeg menu item in the process window
so that it defaults to jpeg, but I lose the ability to save as PDF because I am no longer using the exportpicture
routine. I cannot get ExportPicture to select a default file type (always PNG). I have also changed the
process filesave routine so it will construct an initialpath when a file has been opened directly off
a fileshare. Added UseGDIPlus = True to app.open event so windows apps can save spectrum image
as jpg, png or bmp. I see windows10 at uwsp supports print to pdf file.

I changed the process savefile so that saving just the real data for the data displayed in the window is
the default. You must select jcamp/ntuples format to get all of the data.

Now at version 3.1.8.

5/25/2021|04:08PM Updated prefs to record C13_integration_digits properly. I have not implemented
use of this variable yet. 

3/29/2021|11:30AM I found some saved files could not be opened by Mestrelabs mNova if
the following lines were missing for Bruker files:

'It turns out that mesterlabs mnova canot read Bruker files unless the following two lines are at the beginning of the file.
if lables(48)<>"" then
  o.writeline "##TITLE=JCAMP Viewer"
  o.writeline app.commands(48)+lables(48)
end if

I think this is fixed now. I also added code to the mousemove and mouse drag routines so the
xlocmouse lable does not go off the display on the right.

3/23/2021|12:48PM I have the plot some spectra windows printing the grid format only, but it will be
good enough for now.

3/12/2021|04:22PM I am going to try adding a print routine to the option plot some spectra window.

2/23/2022|10:26AM An email from Michael.Kenney@tri-c.edu describing errors when processing picospin
data stems from my attempt to automate integration of proton NMR and peakpick carbon13 spectra from
our Bruker instruments. I had to insert a test for FID files before executing these commands in the 
readnewfile:readprocess method to fix it. It seems to read the example Michael sent just fine.

I also discovered a crash upon file read when running on MACOS monterey and had to download the
most recent version of xojo to fix it. ARGH!! This is going to get expensive.

2/15/2021|11:55AM Fixed the improper xlocmouse display by running reset_amp upon activation.

2/3/2021|09:23AM Added mythumbs.hide to plot some spectra ok button action to properly show the 
'some' window. The background was changed from default gray to white and the spacing between spectra
on both the all and some windows was adjusted and set the same.

1/24/2021|01:33PM I am working on the overlay(stack) function so that the table display is a little more visible
with formated X,Y and I values and a little more room for the color column. I also decided to turn off all peak,
integration and jvalue labels in stacked spectra. The user will have to turn them back on when needed. It is not perfect, but is
much better.

12/30/2020|11:41AM I have decided to run a prohump on both NMR systems with each LN2 fill. The lineshapecalc
routine has been modified to print the line width analysis, expand about the chloroform peak and increase
the intensity by 10.

12/26/2020|01:24PM I want to improve peak picking during the integration process for proton NMR. This
was accomplished by changing thresh to 0.01 of ymax_peaks in the mark_peaks method.
 It is not perfect, but it is better.

12/22/2020|12:05PM I discovered that MS xlocmouse was being displayed incorrectly. It was fixed by
loading an older version and inserting:

if display=app.fid_spec or display=app.mass_spec then 
End If

 into the mouse move event and mouseup events. xmax and xmin also need to be fixed as xmax should be
on the right instead of on the left as it is for IR and NMR spectra. It is too messy at the moment. Maybe change
xmax.left and xmin.left to swap them? A quick check says that will not work.

12/22/2020|11:07AM app.plot_integral_trace=true will plot the whole integral trace and its first derivative
when proton integraton is requested. I set it false today.

12/8/2020|08:04AM The vertical cursor disappears when an inset window is open and a drag occurs in
the main process window. This problem does not occur in a spectradisplay window. Also an integral
cannot be cleared until the inset window is closed. All vertical_line.visible = false were changed to 
true and the virtical line will turn on after a slight pause. I also need to improve peak picks inside
an integral trace as auto integration frequently misses small peaks in a clean spectrum. I added the
ability to display the whole integral trace. It seems like take the derivative of the integral might be a 
way to find the integral limits if the baseline is fairly flat. I still need to examine the peak picking
algorithum for integrals so it finds all of the peaks.

11/29/2020|12:24PM I added some code to print the humpcalcs on the spectrum and fixed an error with
filename transfers from the Search_jdxlist to thumbsfoundlist. Added humpcals to spectrum along with
the identity of the spectrometer where I changed chemb124nmr400 to CBB422-NMR-01. I probably
need to talk with Sam about replacement computer before this one fails.

11/28/2020|02:14PM The jvalue and integral digits seem to be working ok. I discovered that Mestrelabs Mnova
will not read NMR files saved from the JCAMP Viewer unless the ##TITLE= and ##JCAMPDX= lines are
the first two lines in the file. Mesterlabs Mnova seems to read Nicolet IR files saved by the JCAAMP
Viewer just fine. IR_digits is also working. I need to add some code to remove period when digits is zero.

11/27/2020|06:00PM all of H1 digit items can be fixed except jvalue and integration.

11/27/2020|03:12PM I have begun to implement number of digits to right of decinal point for h1_digits into
prefs, app and process window (only one implemented now). The prefs window already contains place holders for  jvalues,
integral values, mouse values and IR peaks.

11/24/2020|12:13PM I discoverd that plot_firstderivative was in an indetermant state such that it would
randomly be set to true causing the derivatives to be ploted. I forced app.plot_firstderivative to be false
programatically in prefs:OK.  I added version infromation to spectradisplay and process windows.

11/21/2020|02:52PM I created a copy of the found_list_listbox on the MyThumbs window so more files could be downloaded
while examining spectra without going to the Search_jdxlist window. I also fixed some little bugs
with the newthumbs and scrollthumbs interaction so scrolling is a little more sensible. It looks
like we are at version 3.0.20. A definite milestone.

11/20/2020|10:20AM Process actions added to found_list_listbox and fairly complete debugging has been
performed including clearing found_list_listbox when a new search string is entered.

11/19/2020|09:55AM The filelist box spacing is fixed and found_list_listbox is populated. Now I need to 
process actions on the found_list_listbox using the found_list array to get the file(s) requested.

A double-click in the found_list_listbox downloads the correct file. Partial implementation of the rest
of the functions of the found_list_box. No debugging has been performed. Save it for later.

11/18/2020|09:44AM I have displayed the version/build information on the dataserver window. May as well
try to find room on the spectradisplay and process windows as well. Another day for that one. I want to
upgrade the search window so that a listbox shows all of the files found at once on the right. I have also added 
a button to download all files found for a search string. I probably need to fix the problem with multiple
downloads requested tha throws a nilobject exception at about 10 to 12 files. Need to fix issue with
filelist that truncates filenames and leaves white space to the right side of filelist and create another listbox
to hold the files found. There is progress that will make it easier for students to find their files.

11/15/2020|12:07PM I set first startup font to helevetica and font sizes as described in reset_prefs method.

11/14/2020|04:34PM The stack plot for NMR works ok, but for IR none of the offsets are working. I found the error in
calcscales routine where the baseoffsets were not incorporated. However, the stack plot only looks decent in
absorbance mode. Oh well. Better than nothing.

11/14/2020|12:46PM I am attempting to fix the odd problem with MyThumbs plots jumping from top to bottom with
every change in the display. It is fixed now by setting scrollthumbs.maximum in mouse enter event. I also turned
title text red for the active window so it easier to find when scrolling. It works for NMR spectra but not for IR
spectra. I fixed readprocess so that normalizefield is set properly.

11/13/2020|08:40AM I have installed code in the app.initialize routine to check the system for the reecommended
fonts found at https://practicaltypography.com/system-fonts.html and construct font_pointer( ) and 
font_string_pointer() arrays so the prefs can quickly construct font popup menus for each of the displayed items.
Next I want to provide the ability to set the number of digits to right of decimal point where appropriate.

I fixed the MyThumbs window loaction with a little code in the newthumbs paint routine. 

11/10/2020|05:04PM An crash error occurred when I tried to load Kody Burdick's Ir spectrum of the diol reduction
product. Oh goody! Somehow he managed to save the raw interferrogram in JCAMP format which I cannot process.

11/7/2020|02:47PM I think it might be fun to limit the set of fonts to those that look really good on both mac and windows.
I found a site: https://practicaltypography.com/system-fonts.html that has some definite opions on what looks good and
they may be right.

11/6/2020|03:40PM I discovered that saved peaks come in one data point downfield for proton NMR spectra which was
fixed by subtracting one from the peaklocation in readnewfile routine. The peaks output and read for carbon spectra was
fixed. IR also saves and reads peaks_marked and peaks to the file, but they all get read in as marked peaks.

11/4/2020-03:18PM I have implemented font and size selection for all displayitems in the prefs window and tested most of them.
Next I want to give an option to set the number digits displayed. But not today. Partial fix for peak list save for carbon.

11/04/2020 I have begun the process of implementing a font preference tab by moving the font sizes to a fonts tab
and started the process of allowing font selection menus. I have not fixed the save routines for carbon and IR so
that peak picks will be saved. Coming soon. It might make sense to print the integration tabel for proton NMR at some

11/03/2020 While examining ester NMR and ir spectra from my students I discoved that peak picks were not being saved for
carbon-13 and ir data. It was only working for proton. However, the saved data files were not being read correctly as
all peak locations were off by about 10 Hz. I found that moving the peak read/analysis routine a little later in the readprocess
routine fixed the problem, but I still need to figure out why carbon and ir are not saving peak picks. I will save that one for tomorrow.
I want to add a font management panel to the preferences window so that I can select font sizes and offer some font selections
like calibri, ariel etc. and allow some control over the number of digits displayed for numerical data. I think this will leaqve room
a logo on the preferences page.

9/21/2020 Added the average coupling constant to the single line proton specification on the peaklist and integrationlist tables.

9/19/2020 I calculated the average J for integration ranges and changed the chemical shift display on proton to
print ##.00000.

9/17/2020 I decided that the default font sizes were too small and changed them all to 12 point. Version 3.0.16.

 8/29/2020 The stack offset listbox was all messed up on the spectradisplay window and has now been fixed. I think
we are getting closer and closer to a good app.

8/27/2020 Tab separated peak lists have been implemented and fixed a problem with first pass integration failed to
count lines in integrations and calculate chemical shifts correctly.

8/18/2020 Trying to create tab separated peak lists.

8/6/2020 I modified the paste function in process to paste the clipboard(a PDF) full size so molecules will be visible.

8/4/2020 I have fixed the windows update routine so it will work a little bit better.

8/3/2020 I modified the integration routine to make edge selection a little bit better.

8/2/2020 I found that I accidently compiled the version without the color picker and deployed it. Added some more 
colors to the picker and trimed leading/traling spaces from URL so the url will work properly. It seems like I ought to
be able to turn mousewheel on if I scale the change near 1 so it doesn't overshoot and increase the change as
we get further from 1. I also think I can do better selecting integral limits by examining the derivatives and making
the range symetrical around the central peaks.

7/12/2020 It appears that using the built color picking functions do not work very well in catalina. So... I made my own 
color picker from a listbox with cells filled with colors from:


I extracted the hexadecimal representations from that table and stored them in a color array (mycolors). The user
will have to click on an item color to be changed and then click on a color. The color of the item selected should update
immediately and color changes will be implemented on all open spectra. These are global colors for the application.
None of these colors are stored in the JCAMP files only in the app prefs.

7/1/2020 Finally got around to testing the windows version and discovered a craching bug while trying to open the
prefs, previous files and printer setup text. I had to check for file = nil and file.exists. Needed to add PrinterSetup file
to app.initialize. Windows 7 seems to be working ok now. Tried to do some printing from windows 

6/24/2020 The  logo and peaktable location issues appear to have been solved both copying to the clipboard and
priinting. However, the inset location problem still persists as of 10:45 AM. I will work on it a bit more. They seem to
be moving down and to the left. I suspect the moving left error is because of making space for the logo and table. Finally,
I have spectrumcopy and spectrum print working. Time to call it quits and compile this guy as 

6/22/2020 Nagging issues: The show logo option plots the log twice on clipboard captures of both window types if the 
clipboard resolution is large enough. I have set the default clipboard resolution to 1280x960. This means I will have to
prevent the logo plot from the plotit routine.

The printer output of the logo looks good. Insets are copied to the clipboard ok unless a peaklist is requested and 
then they are off to the left. Insets seem to be a little low and to the left without a peaklist and a lot to the left if peaklist is printed. 
Clearly the inset plot routines so take possible peaklist plotting into account durint copy and print. I should change the
color of peaklist to the same as plotted peaks.

6/18/2020 It never ends! I found a problem with the process read/save file routines that were not initializing the showpeaks variable
and anothe one with proper saving of the normalization variables. It would be nice if I could get the auto phasing 
routine to be as efficient as mNova. Well, enough for today. I had hoped I was pretty much done.

6/17/2020 Just for fun I added a UWSP log with Badger CodeWerks on it. When requested it will show up on the plot
windows (upper left corner) and printouts (lower right corner). I can convert it to just the UWSP logo if

6/16/2020 Fixed issue with nmr spectra that wasn't leaving enough room for peaklist when printed.Some issues
with ir spectra disappearing when moving to the tab panel have been mostly resolved and peaklists for IR spectra
are more complete. There is still a problem with printing insets that causes the insets to be larger than they
should be.

6/15/2020 Fixed most of the printing issues. Still need to test insets as they print to low just like annotations. Just
did another check and peaklist table doesn't have enough room on the proton nmr.

6/14/2020 I believe I fixed the errors with 'graph all spectra' close by forcing a redraw of all spectra before closing
the 'all' window. I managed to get the vertical and horizontal lines to disappear by setting .visible=False.

6/12/2020 I am having a lot of trouble getting printing to work as page 1 and page 2 print on top of one another. I
believe that I have it fixed doing a g.clearrectangle(page) on the printer Graphics objects. Now if I could just get
rid of the blank page at the end. There appears to be a problem with the vertical marker after doing a 'graph all spectra'
that may lead to a crash. It is never done, but it is getting closer.

6/11/2020 Fixed xlocmouse.height so lower part text wasn't cut off and added some spaces to xlocmouse.width so
we shouldn't miss yvalues, if desired. Found some errors being caught when reading some Bruker files
and decided to display the errorlog in the integrationlist when first opened. I can't seem to get rid of them and they do not 
appear to be serious

5/27/2020 File save and read routines work ok, but there are some subtle problems that occur because of interconversion
between and Hz and PPM. Sometimes it doesn't matter and sometimes it does.

5/25/2020 It appears that we need the ability to mark/unmark all the marked peaks in a selected range. We now have 
that ability. Now it is time to look at coupling constants which were being stored as array pointers. They have been converted
to chemical shifts, but they are not working correctly yet. the first one displays incorrectly upon selecting the
second one. Some problems were corrected by defineing the beginning and end as doubles. Still need to fix the
display problem and test file save/read routines.

5/24/2020 I accidently disabled peak pick when integrations were being displayed. Now mark_integral_peaks
only runs on firstintegration.

5/23/2020 I have modified the process integrate routine to use the markspeak routine to get a more accurate
peak count for each integral range. I still need to work on edge detection to get more accurate integration
ranges, but it is pretty good for now. Time to compile and post to the web. Version 3.0.4.

5/22/2020 I worked on spectradisply a bit looking at ir spectra where peaks had been marked and cleaned
up the amplitude setting so it would be at 0.8 if showppeaks=true or showxvalue were true . Otherwise set it 
to 1.0. Discovered a hidden/forgotten aspect of the m key that would find all peaks in a selected interval. This works 
in both process and spectradisplay windows. I think I can use it to select(mark) peaks in integral intervals more
accutately. Time will tell.  

5/21/2020 I decided I needed to try storing and reading the peak pick threshold. If it is not there it should 
start at 10. I also changed all threshold.text to threshold.value. I have modified the process window so that
the annotations can be located in the mousemove routine. The next step is to grab them and move them around.
Enough for today. About ready to actually move to 3.0.4

5/20/2020 Tests with windows version showed that it was activating before the yarray was completly
populated. Putting a while loop in the activate routine caused the file decode to slow down a lot. So I put
it in the resize event which cannot occur until all the data has been read. I also managed to fix a minor
problem with the integration being behind the peak counting routine was easy to fix by moving the PeakPick
call in plotit in front of the integrate call. The first pass results in a lot of greyed peaks but we can't be perfect.

5/18/2020 threshold.value got tthreshold.valuead insets, annotations and integrals to work for .dx files by including the
following code in the activate even run once code area:
'Let's try to chanhold.

plot.refresh doublebuffer

5/17/2020 I had to redo the work of 5/9 because I forgot to save it. I also placed 


at line 703 to properly read the normalize_on_this_integral property. Chemical shifts of the intgegration ranges are not
being calculated during the file read, but chemical shifts and number of lines are now calculated during first integration
pass. Now I have to read them from the file properly. Looks like I need to save the whole integrateranges arrary. 

5/9/2020 Found errors in the save and read routines I used to output the insets, annotations and integrations. I changed the
insetxfirst and insetxlast to chemical shift, I think.

5/6/2020 I extended the vertical drag line down to the bottom edge of the plot and some single key functions:

f: will contract to show the full spectrum if a region has been expanded. An FFT if a FID is visible.
e: if an integration has been performed on a proton nmr this key will cause the display to show the default expansion for the integral. An
exponential multiply if an FID is visible.
p: does a peak pick and toggles peak pick on and off.
i: performs an autointegration or toggles intregral on and off.

There are others that I will document later. It might be worthwhile to use the peak threshold to determine integration ranges for first
integration pass.

4/25/2020 The update module works now. It is not very slick as it just downloads the zip and tries to unzip the archive
into ~User/Applications. The user will have to decide if they want to move it into the normal applications folder for
their platform. I also changed the build all script in the File:IDE Scripts:BuildAllDesktop.xojo.script menu item. I only
put the win32, wind64 and OSX64 versions on the PSLC web server.

4/24/2020 The integrateranges array was getting over run occasionaly in process.integrals_calc_ranges and
 process.integrals_first_scan methods which was corrected by rediming it until it was big enough.

4/23/2020 fixed problem with makeinset that closed two windows when tempinsetnum was equal to insetsnum+1. I
discovered that xgrdiplot and ygridplot are being properly stored, but not properly read and implemented. It appears 
that this all started when I decided to stop using vgrid and implemented separate booleans for xgridplot and ygridplot. 
It is now fixed. I hope I have caught most or all of those little problems.

4/19/2020 Inset variables are getting reset again so I decided to define local integer variables to set the makeinset.Top,
makeinset.Left, makeinset.Height, makeinset.Width and tempinsetnum variables in the process.insetpushbutton method.

I will probably have to check the spectradisplay window as well, but for now it is functional.

4/18/2020 It appears I am using the source variable with almost every window to refer to the source spectrum. in
reality the first exercise when a window activates is to set the app.active variable. There is really no need for all of 
these source variables to be established and set in several locations in the code. Just make sure app.active is
correct and I can save a lot of effort. This got rid of the spectrum switching bug. Time to compile and send it

4/16/2020 I have added some code by Thomas Tempelmann to record a trace file on the desktop that folks can
send to me when they encounter a bug. Hopefully it will help me squash bugs and spiders when I encounter them.
Use of the inset function, among others, seem to cause a switch to another window by changing the sorce
value on the iMac but not of my MacBook. Strange?

4/14/2020 Edited process window keydown event to 'e' key to check integral list and expand display from -0.5 to
1 ppm greater than the integral range with greatest chemical shift. 'e' is normally used to perform an exponential
multiply during FID processing. Most folks will not use this very much. 'f key will contract to display whole spectrum.

4/13/2020 Removed markers when makinset window is closed. Removed markers after jvalue calc is performed.
Removed PDF code because it seemed to decrease stability and only works in 32 bit mode. 

4/12/2020 I think I have fied the issue with the first integration that did not calculate chemical shift and number 
of lines in an integral region properly.

4/11/2020 I have begun to experiment with getting chemdraw pictures off the clipboard and into spectrum. This
required setting chemdraw 12 general preference:Add PDF to clipboard and then using code written
by Will S on the xojo forum who provided a zip of his code to get a PDF off the clipboard using coregraphics calls.
It only works in 32 bit version. Compiling for 64bit causes a crash when the page.pictureatwidth call is made. This suggests
that it should be possible to convert it to 64 bit(I hope). I am sure it will not work on windows.

source to get PDF off clipboard off the clipboard which has been downloaded:

4/10/2020 Integration used to show NAN responses in the integration table which was repaired by moving the
call to normalize the integrals down a couple of lines. I have worked on the process window so that, if the print_peak_table
is true, it will be copied onto the clipboard and printed in a colum on the left rather than on the 
spectrum itself. I also worked on the printme window to control printing appropriately. I still need to work on 
the spectradisplay windows but they shouldn't be too bad. I have also
installed two app methods (refresh_prefs and reset_prefs) so preferences changes are cleaner and if you
make a mess of things (colors can get rather screwed up) it is easier to start over. I also found that the prefs
file was being saved in the user ~Library folder  instead of in the ~Library/Preferences folder. I think was caused
by a change to the Nativepath usage.

4/6/2020 Change initial pref for peak list to off? Create space on left for peak list for clipboard and printing. 
This is doable but need to calculate width of peaklist and leave appropriate room in clipboard and print page
for process and spectradisplay windows. started but not done yet.

Also need to add method to prefs window to implement global changes on all windows, then
replot if necessary. Not even started yet.

Update to thumbnail with only one window open causes unnecessary jump from top to botton of
thumbnail window with any change to main window.

Need to examine font scaling when  printing. They seem too large.

4/5/2020 The use of validationmask in makeinset caused issues with the keydown event. So
we will not use validationmask for textfields. Enter key in insetleft or insetright textareas failed,
so I added a check for chr(3) to the keydown routine.

3/30/2020 I had to TextAlignment for xmin, xmax, insetmin and insetsmax to TextAlignments.left
to prevent upsidedown characters during editing. Set appropriate character limits for these items.
Changed normalization textarea to fixed and allowed only integer input using up/down arrows.

3/26/2020 Looks like I had better compile both 32 and 64 bit versions for windows.

3/23/2020 Cleaned up the one comments in problem sets and sized the dataaccess window based on 
number of questions.

3/22/2020 Added ability to display a one short line comment in red to problem set window for each question.

3/20/2020 Still having problems with multiline Annotations being read and displayed properly from a jdx
file. I will try using app.cr to get line feeds properly encoded. I think line feeds are properly encoded 
in annotations now, but annotations are still somewhat problematical.

I have modified the show all spectra call so the window is maximized. The same is true of the plot
selected spectra.

3/19/2020 Putzing around with Annotations, but can not seem to use mouse location to see an annotation
on the spectrum.

3/17/2020 Changed the mouse assignments in plot and xlocmouse to local rather app.MouseCursor designations
which seems to reduce the flip/flop between the plus and arrow pointers. This may also fix the jerky behavior on
the 4K screens in 422. Rats that did not work.

3/16/2020 Changed some of the mousemove code in process and spectradisplay windows for better efficiency.
Experimenting with aggressive optimization build setting to see if I can get better performance with the 4K
display systems in cbb422.

3/15/2020 Changed xlocmouse label to multiline in an effor to get mouse_color and mouse_fontsize on windows.
Moved xlocmouse height and width calculations into mouse move so the label would not overwrite too many lines.

3/14/2020 Fixed error reading ir files saved in absorbance mode. Moved title display to bottom left of plot canvas.
Printing four spectra on one page seems to use fonts that are a bit too large and some annotations are way off
the page for nmr spectra. We are at 3.0.0(beta12)

3/11/2020 Fixed an error that occured when I converted NUMANNOTATIONS to annotationsnum globably. Annotations
in older files would be ignored. This required changing commands(24)="##.NUMANNOTATIONS="
 and the savefile routines in spectradisplay and process windows.

3/8/2020 It appears that I have Annotation positions just about right on both process and spectradisplay windows
and have increased to 3.0.0(beta11) which will be deployed to labs and the pslc web site.

3/7/2020 The only thing that is left is to get the Annotations routine working properly.

3/6/2020 As I implemented the improvements of 2/19 through 3/1 I manged to incorporate the errors that caused 
the rapid screen flicker described on 2/10. I am going to try copying components of the 3/1 build into the 2/10 build
stepwise to get a verion with all of the nice improvements without the screen flicker. 

I have moved the prefs window from 3/1 version and gotten the spectradisplay and process windows to properly use
the new preferences for the mouse cursor. 

I have discovered a read error for the older nmr files in my problem sets that is apparently fixed in 3/1. Ok. It is
fixed now. The screen flicker on windows is gone witn the spectradisplay, but is still there with process windows.
So I am going to compare spectradisply on the 2/23 version that fails with the current  version in this build to 
try to find the changes. Looking at the trace file when I compare spectradisplay to process windows the problem
appears to be related to a resize event. I finally found the problem in the readprocess routine at line 889 where
the routine decides how to size the windows. By making this routine identical to readfilespectradisplay the
screen flicker was removed.

Little gotchas: TextField textcolor fails on windows. I had to use a TextArea to see the color on both platforms.
I have added a space whenever the width of xlocmouse is changed to leave room for all characters.

3/1/2020 The annotation feature is being worked on. As of this date the annotatefield is set up to change height as
the number of lines of text increases. The annotatefield width is not being changed dynamically and the field will
wrap the text when it gets too long. When annotations additions are turned off, but still showing the mousecursor
is changed when the mouse moves over the string (this does not work correctly yet. Ultimately I want to be able to
click on an annotation and drag it to a new location with the text floating a the mouse cursor. Kind of like the current
floating x location of the mouse which is working quite well including fontsize and color changes.

2/27/2020 app.cr set chr(13) for mac by mistake. Changed to chr(10), line feed so the file save routines work properly.

2/22/2020 annotatefield textcolor set default textcolor for annotations. Significant modifications have been made to the
annotate routines for the process window(annotate menus also) to get the text properly stored and placed on the plot canvas. Fine tuning is
still required in order to set the y position of the text (x position looks good). I also added the abillity to change the size and
color of the text that follows the mouse around the spectrum. Most of this only works in the process (nmr) window.

Similar capabilities are coming for IR and Mas Spec displays.

2/20/2020 Fixed spectrum redraw when mouse is between vertical markers. I almost have the annotation feature working
properly. I just need to get the location and text into the correct array positions. I need to set the annotatefield textcolor
and size and clean up the annotation menu items.

2/19/2020 Several verbs have been deprecated (Textsize = fontsize; stringshape = textshape; mylog.append = mylog.addrow; 
.text = .value; ubound =lastrowindex. A file read error for files that contain only the real nmr spectrum from the 200 MHz 
system has been corrected. The mouse movement on the spectrum now displays the xposition in the spectrum.

2/10/2020 One of my students trying to use the windows version discovered rapid window switching making the app
unusable probably caused by the thumbnail windows implementation. I have fixed that problem and modified the floating
x label on the plots so it blanks only the necessary part of the screen and the fontsize changes with the spectrum fontsize.
I still cannot get the scrollwheel to work properly in the windows version.

2/2/2020 The slow peak pick routine for IR spectra was accelerated considerably by creating yabs() and ytrans() arrays when the
file is first opened along with a search for maxyabs, maxyabs, minytrans and minyabs. A subsequent search through the yabs() array
was much faster than doing an AtoTconvert. The number of peaks selected was also reduced to 15-25 at first pass. The Threshold
EditField was also cleaned up so it shows a number that  makes some 'sense'. The search_jdx windows was modifiedso that either
the number found or the number in sequence are opened. The version number has been changed to 3.0.0(beta(7).

1/13/2020 After a lot of experimentation I finally got the insetleft and insetright input fields to work on the inset window. I found
that converting from a textfield (single line) to textarea (multiple line) go things working. A few more experiments to format the
text in these fields to six digits plus a decimal point using format(val,"###.###") commands. Floating the mouse over the textarea
is the only reliable way to select all of the text. The return and tab keys will move from field to field in the inset window. 

1/5/2020 Fixed issue with thumbs out of sync with spectra open by resizing the newthumbs canvas in the drawthumbs method
of the process and spectradisplay windows. Added title display to readnewfile window.  Next I will try to show progress bar
during integration process since it is rather slow. 

1/3/2020 Finally got progressbars to work during decodeing of nmr files. I have not been successful getting floating labels to work on 
spectradisplay windows. At some point I should get a progressbar working for other slow processes like integration and FFT. It is
time to increase the version number.12/27/2019 URLConnection does not support simultaneous file requests. So.... back to HTTPSecureSocket. I found that by setting
the socket to TLSv12 I could get reliable transfers from off campus. The window.Title of the transfer windows wer set to the file name
and the windown was offset by 50 pixels when multiple requests were submitted.

12/16/2019 Problems with access to files from off campus led to the discovery the TCPSockets had been deprecated and URLConnection 
should be used instead. So the conversion from sockets to URLConnection is underway. This approach does make it unneccessary
to write TCPSocket and SSLSocket code to access urls. A problem with decoding some files from the Bruker nmr system led to the 
discovery that the decompress routines were not adhering to the npoints limit. These bugs have been fixed. An ability to download
two or more files in a Search_jdxlist has been implemented to make evaluation of student spectra a bit easier.

6/12/2019 Changing the peak pick threshold may change the integral table if integration has been performed. This was addressed
by calling normalize_integral in the keydown event of the threshold field.

6/10/2019 Fixed spectradisplay window activate event so overlay works properly avoids race condition by commenting plotrefresh code. 
Changed auto peak picking code in spectradisplay window to select between 25 and 35 peaks at first request with appropriate threshold 
value displayed so user can modify it as desired. This probably will not work well for spectra with a sloping baseleing, but
you can't have everythin

6/8/2019 Fixed spectrum display lost upon first opening a file. Fixed race condition in spectradisplay - threshold control due to
thresh is recalculated. New property mythresh was used to store threshold value for process and spectrdisplay windows.
Fixed file save routine for process window to allow saving just the displayed real values for use on the pslc web site. Modified
auto peak pick for IR spectra so users could change the threshold and get more or fewer peaks picked. Will change the initial
auto peak pick so that 30 peaks are selected at first use to avoid way too many or too few peaks being labeled.

5/25/2019 Finally found the problem with the last spectrum loaded was not being plotted in the window resize event
where a self.refresh drew a blank window. Added a preference (app.print_peak_table) to add the peak table to
print outs and jpeg files. It turns out the mac version can create PDF and PNG files also.

5/3/2019 Fixed issues with closing spectradisplay windows becoming out sync with what windows was actually closed.
4/12/2019 After considerable experimentation I believe I have removed all of the race conditions that were causing
stack overflow conditions.

3/30/2019 I finally have problem sets working propperly so spectra display when they are opened by setting spectrum_redraw
true whenever the activate event is fired. A lot more paint events occur as a result, but a redraw does not require a complete
regeneration of the picture - just redraw the current picture in spectrum.

3/21/2019 There were a lot of problems with insets which I believe are fixed with this version for the process windows.
I had to reinstitute the insetspectrum changed variable to only plot it when necessary. They work pretty slick now.
I still need to get them working for spectradisplay windows and deal with the situations that may occur when both
a spectradisplay and process window are editing an inset.

3/19/2019 I tried compiling the mac and windows version to test windows functionality and found that the menus
do not appear at all. Apparently this was caused because I removed the default menubar when I first created the
project. So I created a new project (JCAMP menu) and populated the original menu with my new items and copied all
the windows and modules into JCAMP menu. The menus now work in windows 10 and I have changed the windows build
to use the MDI interface and optimized the initial window and all subsequent windows to maximize screen use. At some
point I will have to change from multiple windows (up to 40) to multiple modules that can contain all the spectral parameters
of a spectrum to be build in a main window, but for now I will stick with multiple windows. 

I have added another mouse cursor that shows 'click to expand' text to the cursor which only works on the mac because
windows cursors are limited to 16x16 pixels(I think). Dragging a textbox around for this purpose cause graphics under
the textbox to be erased and I didn't want to restore it programatically any more.

Working on makeinset which seems to close the makeinset window whenever I click on the active window and then replots
it. Lots of calculations required! So I need to check if reploting the inset window is required.
2/17/2019 Fixed crash when multiple files are loaded at one time. I had to remove window close on the winows with
HTTPSecureSockets were part of the session. I also implemented a search on all URLlinks of open files to prevent
a file being opened more than once. spectradisplay has trouble when trying to use tools on other panels. Something
is causing them to go back to the initial default. Opening all problem set files and then opening an NMR file causes
mythumbs scrolling to be really slow.

1/26/2019 Ran the analyze project feature of the compliler to identify unused variables and deprecated functions.
The deprecation of Nativepath from the FolderItem tools to NativePath just does not work as advertised. For
now I will stick with Nativepath until I figure out what I am doing wrong, if anything. I have added scrollwheel
support to the mythumbs window and it works very nicely. The open folder menu item has been tested and 
seems to work ok with four save files. The special cursor I added (mouseplus in app.readmouse method) only seems
to work in the process windows. No go in the spectradisplay windows for now. Added a separate peak listing in
process window for marked peaks in the proton spectrum.

1/13/2019 Added mythumbs window to the app to act a a selection sidebar so users could scroll through open
spectra and click on the the one they want to view in the main screen. Tools would change to support the type
of spectrum they select.

1/6/2019 Spectradisplay now works properly with makeinset and drawthumbs. Now I need to fix the progressbar for data downloads and the 
scrollbar for the thumbs canvas to support 20 spectra or more?
1/3/2019 Fixed the makeinset problem by seting to inset_spectrum_changed to always true. Probably ought to jsut remove that property

1/1/2019 Integration trace error upon delete was fixed when it was discovered that I forgot clear all of the variables properly.
It appears that some variables do not get passed correctly from the process window to the makeinset window. I suspect that similar
errors will occur for the spectradisplay window. Specifically makeinset.left and makeinst.inset variables do not pass properly. It
was fixed by creating i and i1 to pass these variables to makeinset (really strange?) in the process:insetpushbutton method.
At this point, I still do not know why the inset spectrum does not display when first opened.

12/28/2018 The vertical line marker now appears reliably in the integration routine for normalization and integration marking.

12/27/2018 Upgraded to xojo 2018 release 4 which required considerable changes in programing approach and allowed for
a more simplified user interface. The bug that some times included small integration ranges was removed. The bug that caused
the integration traces to go very negative when an integration range was removed was squashed. Larger thumbs are now displayed along
the left border in a growing canvas that will be scrollable (some day). As before, clicking on a thumb will cause it to be displayed in the
main screen.
11/13/2018 Increased integrateranges arrary to 500 to handle really noisy nmr spectra.
Readprocess has been modified to include filename in process windows title.
10/28/2018 Add fix to process/spectradisplay mouse down event so thumbnails work in the windows app.
Commented out the self.SetFocus in the plot.paint event so makeinset would retain focus to work properly.
Modified the readnewfile process/spectradisplay routines to use the display resolution set in the prefs.
Hide search and web buttons for problem set windows or if they closed.
Insets can be edited in windows app when first created, but it appears that edit inset fails after that.
1/1/2018 Added Copy File URL to edit menu so students can copy the URLs into their notebooks.
12/31/2017 Added normalize_integral to the end of the integral on off routine so the integral traces and table
would be bettered formated. Added a line count and average chemical shift to the integral table to
help with proton nmr analysis. Cleaned up the comma separated peak list line to show proton shifts a
little more clearly(Could probably add a coupling constant estimate to proton analysis).
Changed the default threshold for baseline analysis so some small signals in
carbon nmr would be identified. Changed the size of the integral window so all variables would be
11/19/2017 Adjusted top of integration sliders back to top of plot canvas.
10/10/2017 Added buttons to process and spectradisplay to select web or search windows. Changed
the peaklist table generators to show only peaks marked if peakpick is off.
10/9/2017 Fixed bug in process:savefile that resulted is saving real data only for nmr spectra. For the
moment, only ntuples format will be saved.
8/2/2017 Fixed bugs that display the wrong peak list when switching windows. Turned off Integrationlist
when spectradisplay(ID or MS) is front most window. Added thumbnail displays to the top of
all windows that are actually buttons to allow navigation between windows. Thumbnails are updated
with all window changes. Set default window size to maximum width and height for the system.
5-2-2017 Enabled inset button when range is selected with the mouse. Changed version to 2.8.2.
3-22-2017 I forgot to initialize integrals_font_size when it was declared which apparently
resulted in a 'zero' designation which resulted in very small print text unless it was initialized
via the preferences dialog. This was fixed and version number was increased to 2.8.1.
2-22-2017 A student discovered an app crash in the filesave routine. The default title from
the Bruker contains slashes (/) and this title is used for the default filename in the save
dialog which is not allowed in filenames for windows and a crash results. A ReplaceAll was
used to change all slashes to spaces to prevent the crash. Apparently the save dialog will
check for invalid characters in the filename a user types into the save dialog. Did a replaceall
in the savejpeg routine also.
2-20-2017 The windows version went into a continuous loop when peak pick was selected
because an automatic search for TMS and spectrum refresh occured. The spectrum refresh
was turned off and the apps were recompiled to correct the issue.
2-5-2017 It appears we have a problem accessing spectra from off campus in problem sets.
Apparantly a 301 error is being returned as a result of redirection. This error check was added
to the http requests.
1-23-2017 Fixed bug in spectrum printing caused by wrong textsize setting in process 
and spectradisplay.
1-13-2017 The bug that caused the main display to show the inset display when insets were being
edited with peak picks turned was fixed by turning off peak pick until the inset was deleted or
inset editing was stopped. Changed the overlay command to the more accurate stack command.
Fixed a bug in the stack/overlay command that caused a crash. The integrate button now initiates
an auto-integrate very similar to mNova in capabilities. Clicking the clear all integrals button now
keeps the system in integrate mode so hand integrating can be performed.
12-15-2016 Fixed a bug in the spectradisplay close routine that would cause a crash whenever
a spectradisplay windows was closed.
11-19-2016 Fixed a bug in the inset counting routine that would generate a negative
insetsnum count and cause a crash. Inserted the app.peaks_font_size into the
peakpick routine so spacing would be corrected when large fonts are selected.
A temporary fix in the process:plotinset routine  
that forces a replot of the process:plot canvas during inset generation. There is 
something wrong occuring when peakpicks are on during inset creation that
causes the inset display to be mirrored in process:plot.
7-20-2016 Fixed the wandering normalization peak problem and modified the read
routine so it would properly read and display saved integrations. Now at version 2.7.0.
7-18-2016 Changed version number to 2.6.9 and recompiled to include most recent
improvements for world wide access.
7-15-2016 Removed 200 MHz nmr log menu item. Removed auto-integrate button and 
modified integrate button code so that an auto-integration is performed on the first click.
The integral used for normalization is now marked with an N. The auto reset of amplitude 
when integration is turned on was fixed.
6-21-2016 Added an automactic reference setting routine to the process window 
(assume TMS at zero - auto_set_TMS_ref method) that is run before each peak pick. 
It assumes that TMS located somewhere between 0.1 and -0.1 ppm and then searches 
for the maximum peak in this range after which it sets this peak to zero.
6-20-2016 Modified all URL request code so both http and https requests are supported.
6-16-2016 An algorithm was added to the carbon-13 peak pick to differentiate 
CDCl3 solvent peaks. The peaks list window now generates a comma
separated string that conforms somewhat to standard ACS journal format. 
More deuterated solvents will be added as time allows. Changed integration display
so traces would be plotted above peaks and below peak picks.
6-10-2016 Improved peak and integration discrimination algorithms for proton nmr 
so the auto integration routine works better. Peaks outside integration regions are
marked with the grid color to differentiate them from peaks inside integrals. These 
peaks are omitted from the peak list window. The peaks list window now generates a comma
separated string that conforms somewhat to standard ACS journal format. The S/N 
is used to select the peak picking threshhold. Fixed spectrum offset calculation in 
the auto process button code.
6-4-2016 Copy marked peaks table with spectrum copy implemented. Overlay 
in process Window expansion,contraction and inset plotting fixed. Adjusted mark
peaks to select all peaks within 3% of max in range.
3-2-2016 Added spectrum reversal button to the process window.
2-17-2016 Fixed peak label printing to laser printers so the whole label prints 
properly. Made the vgrid and xgrid default color a bit darker so it shows
up better when printed.
01-13-2016 Extracted $$ D1  from Bruker header which the relaxation delay. 
Important for proton and carbon spectra where T1 is relatively
large for some spins. Increase to 5 x largest T1 if peak is barely visible in 
carbon or accurate proton integration is required.
12-20-2015 Fixed grid line drawing for process and spectradisplay windows. 
Added pref items to turn x and y grids off/on independently and allow
color selection. Grids are now on by default. Added pref item to control 
fontsize for integral text. Fixed convert to Hz on save then convert back to PPM so
proton integrals are properly retained. The mark peak and mark peaks 
ContextualMenu items have been restructured and cleaned up to work with
nmr and ir spectra.
10-2-2015 Fixed horizontal grid to be fixed at 10 divisions with no labels.
9-12-2015 Added horizontal grid as default when grid is turned on. Will 
be default at first use. Fixed J value button so it is enabled  more appropriately. 
Added a Mark Peaks ContextualMenu that will try to mark all peaks in the selected range
based on the current threshold setting. It seems to work fairly well for 
nmr data. Somewhat less effective for IR and MS.
1-7-2015 Fixed window size for 1280x960 pixels.  Added ability to change 
overlay x, y, intensity and color from the overlay table.
10-5-2014 Fixed problems with improper suffix/extention on windows platforms.
8-15-2014 Added the ability to change some font sizes.
6-30-2014 Fixed x,y export in process window when only real values are available.
6-7-2014 The readfile routine was modified to read picospin jcamp files (missing ##END= line).
5-6-2014 The sort bug in the j vlaue calc routine was fixed.  A delete button was 
added to makeinset window so it would be more obvious how to delete an inset.
4-19-2014 Found some serious errors in JDXDecompressor. The DIF/DUP method was 
failing to change the lineindex properly and the dup count routine was increasing 
the dup count one more than requested. There are still some calculation errors 
in the coupling constant calculation routine. It might be nice to try some multiplet analysis.
3-30-2014 Fixed dataaccess and specdata floating window visibility bugs during 
2-24-2014 Fixed integration error when there were zero integrals in 
intregral_calc_ranges. Fixed autoplot on first open in spectradisplay.
1-11-2014 Added mouse wheel preference selection. Default is mouse wheel support off.
Fixed annotate function in process and spectradisplay.
12-13-2013 Added d key detect in Search_jdxlist so we don't have to mouse over 
to the download button.
Fixed spectrum replot on window resize.
Fixed show integrations and marked peaks in file saved by viewer.
Fixed process file save so peaks, coupling constants and integrations would be 
written and read properly.
9-7-2013 Fixed bug in spectradisplay that caused contract button to be displayed, 
but disabled. Version 2.5.0
9-2-2013 Modiefied setref window so chemical shift EditFields can be stretched to 
show more figures. Modified peakmark routine so that peaklist Window appears 
to the right side of the spectrum window.  Annotate still does not function properly.  
Another day on that one. Increased to version 2.4.9.
8-31-2013 Changed the default widths of the columns in overlay listbox and 
turned on column resize for the overlay listbox.
8-25-2013 added trace feature to process and makinset windows which can be 
activated from the prefs windows. Edit sectradisplay to support new makinset
8-24-2013 Added utilities module - convert boolean to string. Changed process.save 
to save in hz mode using hz/point and ouput ##.SHIFT REFERENCE=. 
Also modified readprocess to give ##.SHIFT REFERENCE= preference in ppm reference 
of nmr spectra.  Numerous corrections to makinset and process windows
to support mouse enabled x and y expansion. Edit insets works correctly for nmr.
7-29-2013 Added proper conversion of offset in Bruker FID jcamp files.
7-25-2013 Converted java code from JSPECVIEW sourceforge project to decompress 
JCAMP data files in fixed, packed, squeezed, and dif/dup format as produced
by Bruker Topspin 3.0.  It is implemented for the process (nmr) windows only.

Page delivered on Wednesday, August 17, 2022, 08:18:22 A.M. local web server time.
Mail comments to Dr. Robert Badger