starting from 20 august 1998 20-08-'98: when stopping the contour routine (other matNMR windows still open) 'Qaswaarden' was cleared and therefore no longer global. When restarting the contour routine the parameter was not made global again. Then this parameter is not updated when using the zoom function which in turn makes the fast-link to the mesh function fail: the axis values are not taken through then. 20-08-'98: the axes in the contour plot weren't passed through properly when going to the mesh routine. Combined with this the spectrum itself wasn't passed through correctly. 20-08-'98: Some things related to peak picking: - the peak list wasn't cleared when making a new absolute contour plot. - saving a peak list into a data structure when the variable is not yet a structure was not implemented yet. - restoring a peak list did not work for absolute contours - saving text labels did not work properly 20-08-'98: the programming structure of the contour routines was improved slightly. 20-08-'98: if an apodization function has been chosen for a 2D matrix it is not possible to do FT before 'apodize' has been performed. Also setsize has been blocked in this way. 20-08-'98: removing a color bar from a mesh plot did not work properly. 20-08-'98: saving a peak list as an ASCII did not print the text labels. 21-08-'98: starting nmr when cont or mesher was already running gave problems because matNMRinitvars.m was started again, thereby reinitializing variables 21-08-'98: the frequency axis for a gamma>0 nucleus was not done properly for 1D spectra. The plot was not updated after the axis had been calculated. 21-08-'98: changing the marker in the matNMR main window did not work very well as the default size was set too small. 21-08-'98: larger line widths and marker size made possible in the cont, mesher and stack3D routines. 21-08-'98: line widths and marker sizes can be entered in the line properties menu too. 21-08-'98: deleting a single line from a peak list did not clear the entry in the peak list. 24-08-'98: the fast-link from the contour to the mesh routine sometimes gave errors when the increment in the axis was too small. The num2str then did not give enough precision. In stead now a temporary axis is created which is used by the mesh routine. 24-08-'98: 2D integration from the contour window is now possible. The spectrum is saved in a user defined variable in the workspace. If the variable already is a structure the history is appended with the integration information. 24-08-'98: symmetrization was not written in the processing history. 24-08-'98: the function of the "zero phases" button was changed: now it sets the phase values back to zero and restores the spectrum for these values. 25-08-'98: An extra option was added such that users can define whether they want a "are you sure" before quitting each matNMR window. 25-08-'98: changing an axis in the contour menu did not change the Peak list thereby not putting the text labels in a new position. 25-08-'98: whenever an axis is saved in a structure (with a peak list) it will be drawn the next time the spectrum is reloaded 25-08-'98: restorepeaklist.m gave an error NOTICE whenever a spectrum was loaded of the shape "r+r" where r is a structure! 25-08-'98: using a user-defined axis did not work with the peak list yet ... 26-08-'98: all matNMR variables start with a capital Q now ! 27-08-'98: the last 10 names of 2D spectra that have been loaded are in memory, like for 1D spectra. 27-08-'98: when loading a binary FID the name that is given to the variable is put in the list of last 10 spectra. That way they can more easily be loaded without having to type in the whole name. 28-08-'98: A refresh button was added to the Legend window for the following reason : Whenever the Legend-menu is started it determines all handles in the current plot and it saves this in the userdata of the figure. When lines are added or deleted this list is no longer complete and this can give error NOTICEs. So whevener you want to make a legend for the altered plot, press "refresh" and the legend windoiw is updated properly 28-08-'98: Some errors had occured because of making all variables start with a capital Q 28-08-'98: redefining the axis ruler of a 1D plot interfered with the legend in that figure. 28-08-'98: setting the text properties did not respond immediately because the changes were performed in the wrong axis. Only redrawing the figure made the changes apparent. 28-08-'98: the phasing buttons are now enabled when doing a baseline correction because else the backup variable which is used to restore the spectrum is not updated. 28-08-'98: loadfid gave an error whenever a structure was loaded with the form : var(x1:x2, y1:y2) and (x1:x2, y1:y2) did not fall in the size of the hypercomplex part. 28-08-'98: the same problem as occured with contzoom (see 20-08-'98) also occured in the 1D menu. also there the userdata in the zlabel of the current axis is cleared after the new axis is plotted under the plot. 31-08-'98: a "get position" was added to the mesh routine (the same as for the contour routine!). 01-09-'98: when an axis in the contour or mesh routine is selected it is highlighted. However when printing the plot this highlight was not removed and showed up in the plot. 02-09-'98: when entering a user-defined spectral frequency in the "Axis Rulers" menu's the edit button did not appear over the original popup button, making the menu's useless. 08-09-'98: reading the axis from a spectrum structure was not implemented yet for the mesh routine and the main routine. 22-09-'98: simpelplot.m was altered slightly as the resetting of the X-limits was taken out. If this is needed now then use resetXaxis.m after simpelplot! 22-09-'98: defstates.m was not updated yet to use the variable Qtempvec1 for the TD2 domain. Therefore errors occured when reloading a row when coming from TD1. 24-09-'98: updating the text properties in a contour or mesh window did not work for windows with multiple axes (subplots) 24-09-'98: a multiplier was added to the relative contours. When the multiplier is 1 the contours scale is linear, when it is bigger then 1 the scale follows an exponential. By playing around with this multiplier one can emphasize either the lower (take > 1) or the upper contours (take < 1) 25-09-'98: when printing a contour or mesh plot the "select axis" property was switched off (to prevent it from being printed!) but not switched on again ... 25-09-'98: when changing the screen settings for the contour, mesher and stack3D windows the window is closed and redrawn. Until now however some button handles were not given through to the MATLAB workspace which gives errors when matNMR tries to acces handles that are connected to buttons. 25-09-'98: A menu item was added to the options menubar for restoring all defaults as they were saved in the matnmroptions.mat file. 26-09-'98: it is now possible to have 5x5 and 6x6 subplots in the contour and mesher windows 28-09-'98: until now after stopping the main routine or contour, mesher or stack3D routine all globals were cleared. This was not a good idea and has been changed. 28-09-'98: regelintegrate.m did not check whether the variable name (that is given by the user) really exists. If it doesn't now a new variable is made. 28-09-'98: the Qtempvec1/2 axes were not reset when changing the size of a 2D spectrum 29-09-'98: a pcolor plot can now be made from the 3D mesh window. Furthermore the uimenus have checkboxes now that denote the state of the zoom and/or rotate3d functions. 29-09-'98: the color mapping can be chnaged for contour and mesh plots now from the "manipulations" menu. 30-09-'98: color bars were not updated immediately when changing the colormap. Now they are. 06-10-'98: When processing phase modulated spectra one needs to do a complex FT in TD 1 of QFT1. QFT2 is not used in principal. However the phasing routines are based on Hypercomplex processing so for selecting columns QFT2 is always used. And so in four2d.m after the FT of QFT1, QFT2 is set to sqrt(-1)*QFT1. This seems to be all that is needed to implement phase modulated processing in matNMR (Phew!). 06-10-'98: The machine format is important when reading binary FID's. Sofar always the native format was used but from now Bruker and Chemagnetics data are big-endian and WinNMR little-endian format. Should there be a need I can always add a menu item with various machine formats however. 06-10-'98: Arno wanted to be able to save a spectrum directly to disk. This can now be done from the menubars 06-10-'98: The windows devices in the printing menu were placed in a silly position such that it was not very obvious were to find them. Now they are under the other devices. Much better ... 12-10-'98: A refresh button was added to the T1 and peak fitting routines with which one can upload the current FID or spectrum into the routines. 13-10-'98: An extraction routine now exists for the contour routine and the main window. ==================================================================================================== Bug fixes / Improvements for matNMR 2.0 for MATLAB v5.2 and above: starting from 13 october 1998 13-10-'98: whole echo processing should now be possible. 13-10-'98: the dwell calculated in the shearing routine and shifting gaussian apodization was based on TPPI experiments. Now this has been corrected. 15-10-'98: when making an axis in a 2D contour or 3D mesh plot it was difficult to see where the full crosshair was positioned when selecting the reference point. Now the crsshair2d routine is used to show the current position when moving the cursor. 16-10-'98: in the peakfit window when selecting a radio button, the one that was previously selected did not turn off. 16-10-'98: saving spectra to disk did not allow to give multiple variables and a separate file name 27-10-'98: the getdiag.m made the diagonal a real function, now it also has the imaginary part. 29-10-'98: when giving a variable name for an integration value (in 2D integration) then the correct value is taken but it is not plotted properly in the processing history. 29-10-'98: when extracting part of a contour plot, the axes were not saved in the structure whenever the user had made axes in ppm/hz. 29-10-'98: axes that were saved in a structure were not plotted when asking for a absolute contours. 30-10-'98: whenever a spectrum is saved (either to the workspace or to disk) it will be put in the list of 10 last used names 30-10-'98: dual display did not filter the given name properly. Therefore spectra in structures were not recongnized at all. 06-11-'98: when doing 1D baseline correction the red lines connected with the defined peaks weren't removed afterwards and when working with relative y-scale, the baseline was not also scaled in the same fashion. 06-11-'98: A shearing factor option was added to the shifting gaussian apodization function for echo's as the echo in a MQMAS will be shifted with the same factor. 06-11-'98: The static part in the shifting gaussian apodization functions was removed as this was complete nonsens anyway 06-11-'98: For doing a "copyfig" command it is needed to stop the rotate3d or zoom-function. Else MATLAB would give errors. 06-11-'98: A "CopyFig" command was added to the menubar of the stack3D window. 06-11-'98: Sofar the view was not preserved when doing a CopyFig command. 12-11-'98: The definition of the shearing factor was inverse to what it should be. So it is actually defined as the point where the echo comes in the 2D FID. So t2=ShFac*t1 12-11-'98: the fourier mode taken when switching dimensions was always the default fourier mode as saved in the options. Now when you change it, the next time you'll see the change without having to change it each time. 13-11-'98: before now the frequency axes for gamma>0 nuclei did not work properly. Now the plotting of a spectrum is independent of how the vector is stored in matNMR. So the axis for the plot determines how the spectrum will be plotted. Works both for 1D and 2D !! 13-11-'98: stats2d.m: the last chosen type for the axis was not remembered and so each time the buttons were set to ppm and gamma>0. 13-11-'98: the plotting routines have been slightly improved in the sense that the apodization is implemented more naturally. 16-11-'98: now the stack3D routine automatically takes the current axes in both dimensions when making a plot. Before the second dimension was always taken in points ... 17-11-'98: Defining peaks during baseline correction on a spectrum with an axis other than points does not yield proper results because of the new plotting (see 13-11-'98). 20-11-'98: Some of the variables in the contour routine were reinitialized each time the routine got started. This was not very good and now these variables are globals again. They also aren't deleted anymore when stopping the contour routine. 20-11-'98: The axes offsets and increments are now global variables. This menas they don't have to be calculated each time over. 24-11-'98: There was a difference between the formats of 1D and 2D structures. This could give errors whenevr the user would save a 2D structure in a 1D structure. Now they always have the same elements, but for a 1D they are empty variables. 24-11-'98: A 1D TPPI was added to be able to process old Bruker qseq data. 27-11-'98: Several small errors connected to changing the plotting routine (13-11-'98) have been repaired now. 27-11-'98: Qlinedata.m works more consistent now. Before not all lines were plotted with new settings when doing a dualdisp. And also asaanpas.m did not take into account the settings for the linewidth and Markersize. 01-12-'98: In the axis rulers menu for the contours, the input window for a user-defined spectrometer frequency was positioned over the input window for the name of the vector. 01-12-'98: The definition of the shearing factor was still not good. The echo in t2 is found at shearingfactor*t1 and this shearing factor should also be used for the shearing routine. 01-12-'98: When cancelling an apodization the button still remained at its last chosen type of apodization function. 01-12-'98: A warning NOTICE is printed to the screen when the user want to do a shearing transformation from a dimension other than TD1 (Qdimensie = 2) to alert the user that the default FT mode in TD1 will be assumed. 03-12-'98: The FID-status variable denoting whether the plot is an FID or a spectrum (difference in plot- direction) did not handle the descending axes very well (connected to frequency axes changes of 13-11-'98) 03-12-'98: When changing the axis tuler in a 1D plot with multiple spectra, a distinction has been made between whether the plot direction has been changed because of the new axis. If so, the plot will be reset and all multiple spectra will be lost. 03-12-'98: The dual display did not function for descending axis yet (connected to the frequency axis implementation of 13-11-'98) 03-12-'98: The restorepeaklist.m gave an error NOTICE when the user tried to display a structure with certain coordinates. So the string "StructName(s:t, x:v)" was not rechecked such that only the variable name "StructName" remained. This gave an error. 05-12-'98: The help function has been slightly improved (but really only slightly!) 07-12-'98: A time axis was added to the 1D menu 07-12-'98: The simpel_restrict.m which is used in the prefitting of T1-fits did not use its own restriction file and this can give erros 11-12-'98: After extracting a part of a contour plot now the spectrum can be redrawn automatically afterwards. 11-12-'98: Both the contour and mesh routine now keep track of the processing history of the spectrum currently shown in that window. 15-12-'98: Some axis properties can be changed from the matNMR main window now, like xlim and xscale (and the corresponding y and z properties) 19-12-'98: A Start was made to create a super title function in the contour and mesh window. First the askedittext.m was improved such that also font properties can be changed. Then the peak picking routne was tested to see whether this works with the new routine. 19-12-'98: Super title now works 04-01-'99: 2D linear prediction in TD1 did not work properly for backward prediction. The vectors were not transposed which creates a matrxi problem. 05-01-'99: The ContZoom.m (adapted MATLAB zoom routine for the contour routine) did not work properly with the SuperTitleAxis. This was because of a very silly way to activate the current axis by the zoom.m. 06-01-'99: When extracting an area from a contour plot it is possible to choose to redraw the extracted spectrum, but it was not checked whether the current contour plot is a plot with relative or absolute contours. Not it is ... 07-01-'99: When extracting an area from a contour plot it is possible to choose to redraw the extracted spectrum, but the original title and axis labels were not preserved. 08-01-'99: The size of the help/History window has been enlarged by 50% (WOW!) 14-01-'99: when saving a peak list in a structure it was possible to make the QFT1 variable into a stucture, making matNMR to create errors. 27-01-'99: when selecting an axis in points for a 1D spectrum from the menubar, the Qstatuspar was set to the value for time and not for points, which would give the wrong initial setting when starting the stats1d.m function. 01-02-'99: in all windows there is now a menubar option "Plot Manipulations". This item takes care of all plot manipulations, like axis properties, titles, boxes etc, etc. 09-02-'99: When pressing the reset figure button the title was not preserved in the resulting plot which is annoying. 10-02-'99: Some more subplots have been added to the list (3x4 and 4x3) and the RestoreSubplots.m was updated (some older subplot types were not yet incorporated). 10-02-'99: QuiInputFig was not a global variable and this could give error NOTICEs when trying to start up a matNMR routine. 10-02-'99: the setfourmode routine was changed such that it now sets the Fourier mode to what it is for the current dimension. Previously it reacted negatively (Qdimensie=1 so the value has to become the value of Qdimensie=2). 17-02-'99: detsovern.m did not function properly anymore with the current version of matNMR and has been improved. 18-02-'99: sofar the colorbar function was not upgraded to function with subplots. 20-02-'99: the zoom routines in cont.m and mesher.m did not work properly with the subplots as only the current axis was set to 'view([0 90])' and not all. 22-02-'99: Before plotting a mesh of contour plot the proper window is first made the current figure. 02-03-'99: It is now possible to give search specifications when doing peak picking. That way certain peaks can be excluded by the algorithm without the user having to play tricks or be very careful when selecting the area. 02-03-'99: The shearing transformation routine was still not correct as the following concept was still not clear: for whole echo acquisition, complex (T1) and States processing shearing transformation in the time domain is possible. However for TPPI data this can only be done in the frequency domain as no complex data exists in T1. Therefore in the main window a distinction has been made between shearing in time and in frequency domain. 02-03-'99: The matprint.m has to check whether a figure window contains patches because they will be printed using the colormap, even on black- and white printers. Sofar the "-P" option was not included in this check but from now it is. It is much more likely that a user will print the figure on a b/w printer. For color plots the user first has to make a regular postscript first and then send the file to the printer manually. 03-03-'99: The type of dual display last used is now remembered by matNMR (WOW!) 03-03-'99: The shearing transformation still wasn't clear and the entry of 02-03-'99 is bullshit! 04-03-'99: An anti-diagonal has been added to the list of various views in the 2D mode. 04-03-'99: The History was not passed on to the cont and mesher routines when giving 'QFT1' as the variable name. Also when using 'Qcontspec' in the mesher routine the History will be passed on now. 08-03-'99: The changing of the axis types and limits can now be done for all subplots at once in the contour and mesher windows. 09-03-'99: The integration value is now remembered for the "set integral" routine in cont.m 12-03-'99: The axis in the matNMR main window now has tag = '1' to conform to the Subplots. Eventually maybe also subplots will be introduced to the main window. 12-03-'99: When going into the peak fitting routine with a spectrum on a frequency axis the spectrum wasn't taken properly. The routine to indentify from where to where to take the spectrum did not respond well to 18-03-'99: When doing a phase correction in TD1, then the values are not zerod on the screen because when the user wants to change them a little this will not give a new line in the history. However when doing a baseline correction or anything else on the FID/ spectrum the repair function must be called to zero the values. All 1D functions have been checked for this now. 18-03-'99: A "reload last binary FID" function was added to the file menu in the main window. This functions skips the searching for the file (uigetfile) and opens the matNMR input window for the details. 22-03-'99: When doing a "reload last binary FID" the new name wasn't stored. 24-03-'99: Finally the reprocessing from the history has been implemented, together with limited macro capabilities. ==================================================================================================== Bug fixes / Improvements for matNMR 2.1 for MATLAB v5.2 and above: starting from 24 march 1999 24-03-'99: The font size that is used by Quiinput.m was static. Therefore when the user defines its own ui fontsizes in the "screen settings" menu they were not changed accordingly. Now these sizes are set to be the defaultUIfontsize + some value. 24-03-'99: The shearing in frequency domain is now done using interpolation. 26-03-'99: The setting of tick positions and labels is now possible from the plotmanipulations menu 26-03-'99: A routine for setting the integral of a 2D spectrum has been added to the matNMR main window menu bar. This was necessary because the same option already existed in the contour window and also this action needs to be added to the HistoryMacro and so also a regular option in the main window was needed. 28-03-'99: the transpose function had been forgotten for the reprocessing from the history. 31-03-'99: Some more axis properties have been added to the "plot manipulations" menu 01-04-'99: In the stats1d and stats2d menus it was always possible to set the spectrometer frequency using a popup button. This however is quite unusefull as this was specific for the spectrometers we had in Nijmegen. Now always an edit button is used. 06-04-'99: Apodizing TD1 from a macro did not work properly because the size of the FID was not taken properly. 06-04-'99: The same holds for putting on a user-defined axis. 06-04-'99: The sum projection routines now take the current axis in the concerning dimension in stead of an axis in points. 06-04-'99: The LinearAxis routine still wasn't foolproof.... 07-04-'99: Apodizing a 1D spectrum from the history did not work because the apodization was not made effective after it was calculated in RunMacro.m 03-05-'99: MatNMR did not start up when using version 5.3. This was because this version number was not taken into account in the matNMRinitvars.m script. 12-05-'99: The checkinputcont.m and checkinputmesh.m have been improved such that it is now possible to enter coordinates with the name QFT1 in both the contour and mesher windows. Now when the name 'QFT1(200:340, 120:650)' is given, also the axes are taken accordingly. 19-05-'99: Yet again a bug in the shearing routines ... will it ever end ? This time the shearing in the frequency domain did not work properly as the dimensions were mixed up in the code, creating chaos for unequal matrix sizes. Furthermore the calculation of the shearing factor was not calculated correct (old way). 20-05-'99: When pushing the "define peaks" button, while doing baseline correction, previous peak definitions were not removed from the screen. As this is not so nice, this has been changed. 12-06-'99: The contour and mesh routines did not check whether a user-supplied axis was of the correct length which easily gave errors. Now only a warning NOTICE is given stating the problem and taking an axis in points instead. 12-06-'99: A new colormap has been added. This is based on QPosNeg but starts with white and then goes to magenta and the rest of the QPosNeg colormap. 12-06-'99: A reset figure was not applied after doing a 1D baseline correction which can cause some problems because the plot on the screen isn't actually what the spectrum is. 13-06-'99: When doing an extract2d matNMR did not check whether the current row or column was still a possible value. Now it does. Furthermore now the range has to be given in the units of the current axes rulers (like in the contour routine). 13-06-'99: The "various views" options did not always take the correct FIDstatus. 18-08-'99: When loading a new 1D or 2D spectrum/FID the QHistory is reset and all new information is written in it. However an error could occur because the maaknew.m and loadfid.m files did not check the QHistory variable properly. It was only checked for being '' and not for being empty (isempty(QHistory)). 24-06-'99: A "clear History" was added to the main window because when you load a variable that already has a History connected to it, all consequent manipulations will be appended to it and this is not always wanted. 01-07-'99: The check that was implemented on 12-06-'99 for the length of the user-supplied axes in a contour or mesh-window was not done for absolute contours. This has been corrected. 01-07-'99: When trying to edit text labels belonging to picked peaks (in the contour plot) when having plot a spectrum that already contained labels in its structure, then as error occurred. This was because the buttondownfunction of the text label was not correct as it did not use the new function askedittext.m but tried to do it itself. 01-07-'99: It was possible to make the supertitle the current axis and put a plot into this, which of course is not what the subplots are meant for ... 08-07-'99: It was possible to do a baseline correction followed by selecting another axis or figure window and then to accept the baseline correction. Then the replotting of the spectrum was sometimes done in the wrong window. 08-07-'99: When saving the peak list in a structure variable then it checks whether the curren variable name is 'QFT1', i.e. the default name coming from the main window. When this name is not 'QFT1' then it automatically saves the peak list in the current variable. However, the routine in both cases is the same and therefore needs the 'QbuttonList' variable to be 1 (i.e. the OK-button) else when the QbuttonList<>1 then it will cancel the saving of the peak list. 08-07-'99: When resizing a 2D variable to a size smaller than the previous one from a row or column number that doesn't exist after the resizing, an error occured because matNMR did not correct the row and column numbers. 12-07-'99: A long known bug was that the adjustment of the QPosNeg colormap, especially designed for plotting contour plots with both negative and positive parts, did not always put the color green at 0, even though the code wanted it to do this. Turns out that the color scaling axis (caxis) is not set properly by MATLAB to exactly the minimum and maximum of the contour levels. Now it is and so it works. 12-07-'99: Instead of wondering how to handle the negative contours I have implemented the following: now the user can choose between only positive, only negative, positive and negative, relative to the respective positive and negative maxima or positive and negative relative to the positive maximum. Let the user himself use what he likes best. I don't care. 13-07-'99: The stack3D window now also has a SubPlot structure (axis number is a tag) such that the plot manipualtions always work. 13-07-'99: Some more items of the plot manipulations menu have been converted to the GUI-driven type. 14-07-'99: A bug has crept in the regelmesh2.m as this was partly copied from the regelcont.m. What happened was that when seeing that the user-given axes were not of correct length it set the Qcontvec1 and Qcontvec2 instead of the Qmeshvec1 and Qmeshvec2. 15-07-'99: The handle for the axis of the super title has been made invisible because it turned out that the rotate3d function was able to access it. And that was not allowed. 20-07-'99: All top-level callbacks from all menubars have been changed to submenu callbacks because MATLAB admits there is a bug on several platforms with this. 20-07-'99: A super-title has been added to the mesher routine (why wasn't this done at the same time as for the contour routine ???) 20-07-'99: A function has been added to the mesh and contour routine to plot a series of spectra into a set of subplots. The input matrix must be a 3D matrix where the first dimension defines the number of spectra to be plotted. 20-07-'99: The input filter for Varian filters has been corrected as the previous version was based on a completely wrong notion of the format. Now it should work properly for all combinations of formats possible in VNMR. 22-07-'99: A small bug in askhold.m concerning the call to the ishold-function caused an error. 26-07-'99: The direct callbacks in the CopyFig.m were not taken out yet. 26-07-'99: The separation sign used for separating directories on a MAC is ':'; this was never clear to me and so it was never used in matNMR. 11-08-'99: Stopping the raster routine did not work anymore because of a wrong tag that was given to the figure instead of to the axis 12-08-'99: The subplots for a 5x5 arrangement were numbered incorrectly. 13-08-'99: When changing the font properties from the "plot manipulations" menu colorbars were not included. 13-08-'99: A second colormap for plotting positive and negative contours has been added. This one only contains the colors blue (for positive intensities), white (for 0) and red (for negative intensities). It is calculated in the same way and at the same time as the first one. 16-08-'99: The delete function for a colorbar contains the original axis to which it belongs. This was not updated when doing a copyfig command which lead to deletion of the colorbar when closing the CopyFig window. Now in the CopyFig.m the deletefcn are removed. 16-08-'99: The display of the integration value when integrating a contour plot was not always correct: the string was not evaluated (although it was for the history) and so the string was plotted instead of the value. 25-08-'99: When the screen size was not big enough the windows were not created properly as they are all defined in pixels. A correction routine has been used: not nice, but it works. 25-08-'99: Also the input window could not handle the fact that the screen is not big enough. A similar correction routine solves this. 25-08-'99: An error in the copymat script prevented bug fixes to be noticeable 25-08-'99: Also the peakfit and T1fit windows were not adapted for windows smaller than 800 by 600. This has not been changed! The minimum screen size is 800x600 pixels. Only the positioning of the window is handled better and it is resizeable now. 25-08-'99: Also the raster plot window is now resizeable. 27-08-'99: a 1D DC offset correction has been added and the 2D version has been improved 27-08-'99: A new baseline correction function has been added: cosine series. This can fit the distortion of the first points better than a polynomial can without having to cut the edges of the spectrum (only then a polynomial can fit the baseline properly usually) 04-09-'99: The four more important windows (main, contour, mesh, stack3D) have got a closerequest set to the respective stopping routine. This prevents all kinds of mess when a user accidentally tries to close a figure. 06-09-'99: The closerequest was not deleted for the copyfig window, which caused problems when closing it. 06-09-'99: when phasing a 1D spectrum then the axis was not checked (CheckAxis.m) so when a frequency scale was used it could happen that the spectrum flipped left-right during phasing. It was however only an optical problem as the true spectrum was not affected by it. 06-09-'99: The extract1D function did not allow extraction in the unit of the current axis yet (although in all other extraction routines this was already done ... strange) 07-09-'99: When putting on a user-defined axis in the stats2d menu the vectors for TD1 and TD2 were taken incorrectly (TD1 for TD2 and vice versa). 20-09-'99: Lines can now be moved in the y-direction manually by clicking the mouse pointer on them and selecting a destination. 27-09-'99: The rotation property for text objects has been added to the askedittext.m. 15-10-'99: The general options window did not open in the center of the screen which sometimes can be ackward when working with MS Windows. 25-10-'99: When trying to read in a set of 2D variables as a sum of them, the checkinput2d.m routine tried to check whether all of them are hypercomplex variables (implies the matNMR datastructure). If not an error was given. Now instead the variables are read but the hypercomplex parts are set to 0 and a warning NOTICE is given. 02-11-'99: The variables in the mathelpprint.m did not start with a "Q", causing them not to be deleted when stopping matNMR. 02-11-'99: A distinction has been made between the userdefaxis in the contour and mesh windows. 02-11-'99: The contmesh.m routine was not able to handle axes going from positive to negative properly for the determination of the coordinates into the axes vectors. Also the stack1d.m and the dispstack3d.m had the same error and have been corrected. 05-11-'99: In the peak fitting routines in the call to the Qeditnum.m routine, the style of the button was set to text which means the value cannot be edited from hand but only by using the buttons. This was very unpractical. 10-11-'99: The default settings for matNMR are different from the default MATLAB settings and some people seemed to have trouble with this. Therefore after quitting matNMR the default settings are restored to what they were before starting matNMR. 16-11-'99: A bug has crept into the code because of the change of 02-11-'99: changing the axes rulers in contour/mesh windows did not work properly anymore. 26-11-'99: When making a contour plot using line specs the plot is not made up of patches but of line objects. The scale2d routine, used for chaning the axes rulers of a plot, did not check for line objects, making them not scaled correctly. 29-11-'99: When trying to make a series of contour/mesh plots the name of the variable was only remembered after all plots have been made. This is annoying when an error is made in the input. 02-12-'99: A start is made with converting all contour/mesh/stack3d windows into 1 unit with panels to select what type of plot needs to be made. Until it is finished it should not interfere with current running. 02-12-'99: The nextplot parameter for axes was not set to 'replacechildren'. That was the reason it was necessary to set the buttondownfcn after each plot action. 13-12-'99: Two typing errors were removed from the input windows of askextract2d.m and asksavedisk2d.m 14-12-'99: A very simple 1D integration routine has been added to the main window. 17-12-'99: Very selfishly I have made sure that when using filled contours (contourf), the shading is set automatically to "flat", making the contour lines removed. 03-01-'00: The crosshair2d routine also used the userdata property of the figure. This conflicted with the other routines in matNMR (connected to the changes on 02-12-'99) and has been solved by letting crosshair2d use the structure in the userdata variable. 03-01-'00: Further work on the integration of all units into 1... ==================================================================================================== Bug fixes / Improvements for matNMR 2.5 for MATLAB v5.3 and above: starting from 13-01-2000 12-01-'00: Most routines have been checked again to their functionality and seem to work in the 'new' program. Several bugs have been found and taken out in the process of converting everything to the single unit program. 17-01-'00: The colorbar was not updated correctly into the figure's userdata variable. 17-01-'00: The restoring of the matlab settings after quitting matNMR, as defined by the user, was not done for the nmr2d.m routine. 17-01-'00: An old problem may have been solved: it was possible to click on a button that generates an input window (QuiInput.m) and while clicking moving the mouse out of the screen. This would lead to buttons of the input window being placed in the window the mouse moved to. Now in the QuiInput.m the parents of all uicontrols are given directly, making it impossible to them being put into the wrong window. 18-01-'00: An error in the checkinputcont.m caused that it was not possible to read in a structure which has its axes defined in it and plot it directly. (a second try would do the trick) 20-01-'00: When loading an FID that was saved into a matNMR structure then the HistoryMacro was not emptied if the user doesn't want to reprocess from this history. Therefore the macro got longer and longer without being able to function properly when actually reprocessing from it. 20-01-'00: When trying to print from the 2D/3D Viewer Window menubar an error occurred because the old function "printcont.m" was being called. This however is now called print2D3D.m. 21-01-'00: For the plotting of a series of spectra a 3D must be supplied. Now a squeeze is performed so that if one or more dimensions are of length 1 then these are removed. BTW, all routines now do a squeeze on the given spectrum just to be sure. 21-01-'00: The color axis (caxis) was not set in a mesh plot (like it done in the contour plots: see entry of 12-07-'99). 23-01-'00: A squeeze is also done for 2D and 1D spectra now when loading them. 24-01-'00: The fontsize and rotation angle for the super title are asked for immediately in the input window now. 24-01-'00: The askedittext.m only checked for the fontsizes in its own list. Other numbers were not recognized and a wrong value would be taken. Unless the user noted this immediately this (usually much larger) value would have to be corrected afterwards again. 24-01-'00: The matprint routine now checks the filename before printing because when an error occurs the figure window is usually unusable afterwards (something the print routine does with it) 31-01-'00: A long time matNMR bug under Windows has been solved: the reason the splash window did not work properly is that under Windows the main window (that is created but not visible) is not the current figure. This means all buttons are created in the splash window and the main window ends up empty.... Qtextlen.m has been fixed as this was written for use with 'points' as a unit only. Now it works also with normalized units The axis labels/title windows are now made in normalized units as this did not work under Window NT either. As the handle of the 2D Viewer Panel window is no longer visible, the callback for the raster resolution had to be changed (used a gco and this is not updated if the figure handle is not visible). The call to CorrectWindow.m (used for cases when the figure windows that are defined in points are too big for the current screen, can be corrected) has been changed such that the figure handle is defined explicitely, instead of using a gcf call. The matNMR help window (and History window) is now made in normalized units and uses the UI fontsize as defined in the options menu. The Axis ruler windows are now also normalized. The peak fit routine and the T1 fitting routine are now also normalized and use the same font properties as defined in the options menu. The font size of the crsshair2d.m is now also correlated to the user-defined ui fontsize QUIFontSize. 02-02-'00: The whole echo for 1D was set to "real FT" instead of "complex FT" 03-02-'00: The title option was added to the Plotmanipulations menu in the menubar of the main window. 07-02-'00: The QHyperComplex flag was not set when changing the FT mode in the main window. 09-02-'00: The Qaswaarden was not reset when selecting a new axis in the 2D Viewer (SelectAxis.m). 10-02-'00: When the zoom was on in the 2D Viewer and a new plot was generated, the new plotting limits were not taken by the zoom, making it possible to zoom out to the old plotting limits. Now the 'userdata' of the 'zlabel' property of the axis is updated by default to the new plotting limits (as this is used by the zoom routine). 10-02-'00: The axis handle of the colorbar was not written back in the userdata of the figure window when making a new plot in the 2D/3D Viewer. Furthermore the contcbar.m routine did not update the userdata of the figure when deleting a color bar. 11-02-'00: The QuiInput.m window was made resizeable (buttons didn't scale sofar). However the text labels do not scale accrodingly yet. 11-02-'00: The windows for changing the title and axis labels are also resizeable now. 11-02-'00: Some more values for linewidths have been added to the plot manipulations menus. 17-02-'00: Sofar the shearing transformation was done vertically. Now for the Frequency Domain shearing, one can also choose a horizontal shearing. 18-02-'00: copyfignmr2d.m tried to acces an old non-existent menubar entry for the zoom function. 18-02-'00: dispmesh.m and dispstack3d.m tried to shut off the zoom function but did not check whether it was turned on at all. The ContZoom routine always complains if the view is not [0 90] even when you want to turn off the zoom function. 21-02-'00: A bug has crept in T1fit.m: while trying to set the 'xdir' property of the graph it crashed because no argument was given. 22-02-'00: The printing from the T1 window has been changed. Formerly the printing included the uicontrols so the parameters were visible. Now a text object is created before printing. 23-02-'00: Some more changes to the outward appearance of the T1 fitting routine have been made. The most important one is probably that the title above the plot is now editable and moveable. Furthermore some small cosmetic changes to the printing were done. 08-03-'00: When selecting a figure window the SelectFigure.m did not set the "selected" property so it wasn't clear which axis was the current one. 09-03-'00: The suggested solution made on 18-02-'00 did not work properly: if the ContZoom.m is always switched off (regardless of whether the zoom was switched on or not) then also the rotate3D would be switched off. Now dispmesh.m and dispstack3d.m check whether the zoom is turned on or not. 16-03-'00: The peakfit routine crashed when using the noise level function. In this function the "hold off" was used and therefore the 'nextplot' property of the axis was set to 'replace' and not to 'replacechildren'. This consequently made the plot function delete the axis tag. The viewslice button now shows the number of the slice which is being fit, also during the fit. 18-04-'00: The default search profile for getting binary FID's from disk was '*'. This doesn't work under Windows and would result in '*.m'. Now for Windows the default search profile is set to '*.*'. 18-04-'00: The standard matlab figure menubar was added to the copyfigure window because Arno wanted it. Furthermore the buttondownfcn of the figure window was set to 'SelectFigure' (the default for the nmr2d window) and this was also wrong. Not it is reset to '' again. 18-04-'00: The size of the display frame for the 2D crosshair (get position in the 2D/3D menu) was quite small already but on Windows it is very small indeed (also because the font scaling is different from UNIX). This meant the values would not be readable. Now the frame and fontsizes are enlarged and better readable. Only for subplot configurations of more than 3x3 the bottom left spectrum will be partially covered by the bigger frame. 18-04-'00: An error has been found in the checkinput1d.m: the QExecutingMacro variable was not implemented as in the checkinput2d.m. Therefore the reprocessing of 1D spectra was totally impossible. (which goes to show that nobody uses this function ever ...) 18-04-'00: A phase factor has been added to the cos^2 apodizing function. Now it's possible to shift the maximum of the apodization function and therefore do something similar to a gaussian/exponential apodization. 19-04-'00: Many of the uicontrols in the Qlinedata.m, Qscreenops.m, Qoptions.m and Qtextdata.m were not parented making errors possible. 26-04-'00: When doing a convertBrukerstates or convertVarianstates then the current 2D matrix is transformed into the Chemagnetics type of states FID and then one has to start the states processing by selecting the appropriate menu in the 2D menubar. The QFT2 matrix is however not changed and when the user pushes the FT button (so not starting the states processing properly!) then an errorNOTICE occurred. Now the QFT2 matrix is made equal in size to QFT1. 08-05-'00: The dispraster2D.m did not check whether a color bar is present before starting to plot a new spectrum. This gave multiple color bars. 17-05-'00: Now an axis can be supplied when doing a dual display. This means the new trace no longer needs to be of the same size as the first trace. Furthermore the axis may be chosen at will. 18-05-'00: Two buttons have been added to the 2D menu in the main window that allow a fast switching between rows and columns by entering the number of the row or column. 22-05-'00: Weird bug: somehow the Bernstein polynomial baseline correction did not work anymore because the value connected to it was 4 instead of 2 ?!?!? 06-06-'00: When reloading a new 2D spectrum the buttons added on 18-05-'00 did not reset. 06-06-'00: for determining the caxis (color mapping axis) in a mesh plot the dispmesh.m routine used a min(min(Qcontspec)). This however doesn't work for complex matrices and therefore it must say min(min(real(Qcontspec))) (or imag or abs) 22-06-'00: An input filter for the SIMPSON ASCII file format has been added to the file menu in the main window. 23-06-'00: The input filter for SIMPSON has been changed to the format as described in the SIMPSON paper (JMR, may 2000). The original format was probably from an older version. The input filter returns a matNMR structure with the spectrum and its spectral widths and frequencies. To implement this properly a script GenerateMatNMRStructure.m was created that produces a generic matNMR structure. This way the definition is stable across all code. So in all routines that produce a structure first the generic structure must be created! 23-06-'00: The values for the spectrometer frequency were not updated when changing dimension in a 2D. 28-06-'00: I have decided not to implement the filter for the SIMPSON binary format. This format basically does a UUDECODE/UUENCODE type of datatransformation and this is rather a pain to program. Furthermore it is absolutely unnecessary for matNMR as the SIMSPON ASCII format works perfectly fine. 28-06-'00: The transponeer.m, for transposing matrices, did not properly reset the row and column numbers. This would give an error if the current row/column number fell outside the span of the new dimension size. 03-07-'00: In the current version the 'nextplot' axis property has been set to 'replacechildren' because else some important parameters had to be reset after each plot command. (see changes 02-12-'99 and 16-03-'00) The problem however now is that in the main routine this setting was not done consistently. When starting nmr.m it was set to 'replace' and after for example a dual display it would be set to 'replacechildren'. And with this last setting the rescaling of the y-axis, which is usually done automaticly by 'plot', does not work properly. The 'nextplot' property is now always set to 'replacechildren' and the rescaling has been altered. 03-07-'00: The Qspcrel.m script basically scales the current 1D spectrum to its proper values in the sense that the user can specify whether he wants relative or absolute scaling. The relative scaling only worked for real spectra (not that anybody ever uses this but still). 20-07-'00: An accelerator button has been added for executing a macro from the main window (CTRL-e) 20-07-'00: The input filter for reading Bruker processed data files (2rr etc) has been implemented after all. 21-07-'00: The maximum number of input parameters for Qeditnum.m has been set to 25. This means that three more pairs of button properties can be passed on to the routine. 21-07-'00: The buttons in peakfit.m have been parented. The peakfit routine can now handle 24 peaks instead of only 4. 24-07-'00: The stack1d.m function now puts tick labels on the X-axis acoording to the axis in the other dimension. Furthermore it is no longer possible to start this function from a 1D plot. Previously this would leed to an error. 26-07-'00: When using the relative y-scale in the main window no spectrum would be shown when the intensity was all zero. This was because the routine only looked at the maximum of the spectrum. But if the maximum is zero then the rescaling gave NaN and therefore no spectrum. Now the minimum of the spectrum is first set to 0 and then the maximum is scaled to 1 if the maximum is not zero. 13-08-'00: By request I have removed the detrend.m from the distribution because it belongs to the Matlab distribution (trouble?!?!?) and wasn't used anymore anyway. 05-09-'00: When selecting a figure belonging to the 2D/3D Viewer now also the window with panel buttons is pulled up. This way one always sees the panel. 05-09-'00: When giving a CTRL-C (break) while MATLAB is calculating a plot in the 2D/3D Viewer and a color bar is present (which is deleted before plotting the new plot and then added again), the axis would be unusable because matNMR still thinks there is a color bar. A temporary variable has been added and the corresponding status variables are changed in the figure's userdata after the color bar has been deleted to prevent this problem. 05-09-'00: It is now possible to do a 2D baseline correction on a selected part of the matrix. In the input window for the baseline correction there are edit buttons for specifying the starting and ending row/column. 05-09-'00: In connection with the selective baseline correction, the "Sum TD2" and "Sum TD1" are now also selective. (see previous entry) 06-09-'00: The 2D->1D functions (diagonal, anti-diagonal, sum TD1, sum TD2, skyline) are now also put into the history macro. This means they can be used for reprocessing. 06-09-'00: When adding an axis to a spectrum from the main window the action was always entered into the history macro (meaning it was available for reprocessing) but no NOTICE would be written into the history (text) except when a user-defined axis was given. This has been changed. 06-09-'00: Adding the processing history to an FID did not produce a proper matNMR variable structure as regelconnecttoFID.m did not use GenerateMatNMRStructure.m 06-09-'00: When adding an axis to the spectrum from the main window the spectral width and spectral frequency were not saved. As this is probably the most reasonable place in the code to insert this feature, these two variables are now always added to the processing history. 06-09-'00: Since some time matNMR has been put under the GNU public license. In my enthusiasm I have put the GPL license on all m-files, even the ones that already had copyrights from other people, or more importantly The Mathworks. As I don't want to get into any silly legal troubles all m-files with copyrights do not get the GPL license any more. This should keep people happy, I hope also the people from MATLAB (as in principle I guess it's allowed to distribute their code freely, although I don't know for sure...) 06-09-'00: At some places I have used a str2num instead of an eval to evaluate a string input. This can of course give problems when a variable name is entered ... getsweep*.m, regelstats*.m, regelsweepwidth.m have been modified. 06-09-'00: The indicator for the color bar in the 2D/3D viewer was not actively switched when adding a color bar. 06-09-'00: The copyright NOTICE in the mathelpdir was still that of matNMR 2.0. It has been updated. 06-09-'00: When reprocessing from the history the variable that contained the peak list for doing baseline correction, QBaslcorPeakList, was not cleared. This could lead to errors when more than one baseline correction was done consecutively. 06-09-'00: The defaults for saving variables have been changed such that now the history and the axis will be added to the variable unless unselected. 07-09-'00: The threshold for deciding whether an axis is linear or not, in LinearAxis.m, was previously set to 1e-8. This can give wrong results and has therefore been replaced by 1e-7. 08-09-'00: This whole construction used in LinearAxis is rather silly as I have been using the sum over all elements of the second derivative vector. For more elements this is bound to give trouble obviously. Now an 'any' is used to check whether single elements are bigger than the threshold 1e-9. 08-09-'00: The date and time of processing are now added to the processing history. 08-09-'00: Sofar it was possible to do a baseline correction (both 1D and 2D) multiple times before accepting it. The undo function however only remembers the original spectrum. As this doesn't make too much sense I have blocked this. 08-09-'00: The change in the 2D baseline correction of 05-09-'00 for doing selected areas wasn't complete yet. I had forgotten to make the distinction between a full baseline correction and a selected part in the text for the processing history. 11-09-'00: Stepwise reprocessing of macros has been implemented now. A window is opened and in this window the next five steps are shown. For every current step the user has to decide whether to perform it or not. In this fashion one steps through the processing macro. By not imple- menting this function directly into RunMacro.m it is possible to perform steps and, in between two steps of the macro, do other manipulations. This therefore gives much more flexibility. 11-09-'00: The change in the regelconnecttoFID.m of 06-09-'00 still wasn't completely correct. 11-09-'00: The shearing direction (vertical or horizontal) was not yet added to the processing history. 11-09-'00: I've found the matlab m-file colstyle.m. This checks the linespec arguments for the contour routine. This is a useful routine to check whether a color specification has been given by the user. If so, the colormap and color mapping need not be changed. 12-09-'00: The user-defined function in the RunMacro.m was not correct: it did not clear the string before appending the new function. That would give strange results when reprocessing. The same held for the stepwise reprocessing. 15-09-'00: As matNMR is also being used by Arno for doing data acquisition he requested me to make a start with creating an acquisition interface. For now he only wanted a button to transfer their data vector QacqFID into matNMR directly. MatNMR determines whether it is a 1D or a 2D FID and reacts correspondingly. 15-09-'00: Arno requested an improvement of the "shifting gaussian" and "shifting gaussian (echo)" apodization functions: it would be easy to be able to specify the point in the first slice of the 2D FID that corresponds to the echo maximum. Now this is always assumed to be T2=1; (basically because now a "swap whole echo" MUST be done before apodizing echo FID's...) This also means one has to specify this maximum from now on and for the "shifting gaussian" one also has to specify the direction of the shift. These changes made for this do not affect the reprocessing of older processing histories. To keep the "shifting gaussian (echo)" compatible with the previous versions the echo maximum must be set to 0 after having done a "swap whole echo". This is indicated in the input window. 15-09-'00: In doing the previous changes a bug was found in the AnalyseMacro.m for the apodization of 2D FID's. The Execution macro was not read out properly. 26-09-'00: A function has been added in both the 1D and 2D menus for removing the Bruker digital filter. This facilitates apodizing later. This function can be useful if one wants to be sure of the exact linebroadening that is used. 29-09-'00: When extracting a part of a 1D or 2D spectrum/FID from the main window the extraction would go wrong whenever a non-linear axis was supplied in any of the dimensions. Now the user is notified that a certain axis is not linear and that the extarction ranges must be given in points and not in the axis units. 01-10-'00: The previous change to the extraction routines (29-09-'00) has been changed again. As it is not so difficult to find the point on the axis vector that is closest to the specified range for extraction, this has been implemented now. That means that one doesn't have to specify the range in points but just in the unit of the axis! 03-10-'00: A start has been made with adding more comments to the code (requested by Julian). today: plotcont.m dispmesh.m, dispraster2D.m, dispstack3D.m. 03-10-'00: Incidentally a bug was found in the stack3dreverse.m. This script determines the setting of the xdir and ydir properties of an axis in a stack plot, depending on whether the axis is ascending or descending. This has not been changed to use the figure windows userdata values for the corresponding axis QTEMP1 = get(gcf, 'userdata'); QTEMP2 = QTEMP1.PlotParams(QContAxisNR).AxisProps 03-10-'00: A new feature has been added to the 2D/3D Viewer: "cut spectrum". This allows to cut the current spectrum into slices such that only blocks of the specified ranges are plotted. To do this a problem of MATLAB had to be circumvented: when plotting a non- linear axis linearly (i.e. every point in the axis vector is plotted equidistant from the next point and not according to their x-value) one has to plot a spectrum in points (instead of a PPM or Hz scale for example) and then change the tickmarks manually. This however means that for example the peak-picking routine will not work anymore. To solve this any non-linear axis vector is written in the figure window's userdata. The increment is then also set to 0 which is a flag for a non-linear axis. That way all routines that require this (crsshaird2D, Extract2D, regelextract, GetPeaks) can also function properly. Furthermore the axes are always written into the userdata (under the names .AnalyserAxisTD2 and .AnalyserAxisTD1). These variables are used now by the foremen- tioned routines to be able to handle the cut spectra: i.e. spectra which are plotted in points, with tick labels in the units defined by the user and WITH specially made axes in these last units for the analysis. This works fine except maybe near a cutting line (i.e. a point where a jump in the coordinates) but the user just has to take these limits properly. 03-10-'00: When a non-linear axis is used in the 2D/3D Viewer then the whole axis vector will be saved in the userdata of the figure window. So now the "get Position" and "Peak Picking" routines know what to do with non-linear axes! 03-10-'00: The crsshair2d.m has been changed such that it now also works for non-linear axes 03-10-'00: The Extract2D.m has been changed such that it now also works for non-linear axes. Furthermore this routine did not use the figure window's userdata yet to look for the axis properties. 03-10-'00: The SelectFigure.m (used for finding the current 2D/3D Viewer window) was improved: the current-axis-handle QContAxisHandle was not set (even though the axis number WAS determined) and this could lead to not properly selecting the current axis. The value for QContAxisHandle would then be [] and this can be dangerous. 03-10-'00: The peak picking routine has been checked again for functionality. Some small changes were made as new variables exist now in the figure window's userdata that can be used. e.g. the name of the spectrum that was plotted. 04-10-'00: Tick labels and positions are now always set to 'auto' modes in the 2D/3D Viewer to be sure old settings don't disrupt the figure. 04-10-'00: The crsshair2d (Get Position in the 2D/3D Viewer) routine has been changed slightly. previously the coordinates were shown as real numbers. The coorsponding value in the matrix however was always taken from the rounded coordinate values. Now that we are using the "AnalysisAxisTD2" (and TD1) this has been changed such that one always sees the real coordinate value that corresponds to the value in the matrix. 04-10-'00: The zoom was not disabled properly by the peakpick.m (recent changes haven't been done to this routine obviously). 04-10-'00: Sofar the peak list variable QPeakList, used in the 2D/3D Viewer, was set to [0 0 0 0 0] when initialized. In a structure however this first line was never saved. Therefore this construction has been changed. There is no reason to use this first line. 05-10-'00: The loadfid.m and maaknew.m have (finally) been given decent names: makenew2D.m and makenew1D.m 05-10-'00: A bug has crept in the regelplotseries*.m because a temporary variable QTEMP3 was used inthere which was overwritten by other routines. 06-10-'00: The default axis layer setting was set to "top". This makes the axis always on top of the children. 06-10-'00: The 2D/3D Viewer window was accidentally given a windowbuttondownfunction. This made things slower than necessary. 06-10-'00: The main reason for matNMR being so slow in the 2D/3D Viewer is that there are too many calls to render the screen. This is very slow and has to be prevented. To improve this: -the scripts Arrowhead.m and watch.m do NOT perform a drawnow anymore. -the plotting routines from the 2D/3D Viewer (plotcont, dispmesh, dispstack3D, dispraster2D) do not actively select the current matNMR window anymore. This also avoids unnecessary rendering. It was also found that the 'axes' command does not induce rendering whereas the 'figure' does so (in this situation). This has been used now (must be used because the colorbar command does not function unless the current axis is the one you want to put the colorbar in. 06-10-'00: A bug was found for the raster 2D plotting routine: when doing more than one of these after another the axis would contain all these plots superimposed. This was because the low-level "surface" routine doesn't care about the axis property 'nextplot'. 06-10-'00: from now on the axis variables can be specified directly in the input window for both 1D and 2D FID's/Spectra from the main window. Sofar it was only possible to specify an axis using the entry in the menubar (Plot manipulations-ruler X-axis). The names of the axis vectors are remembered, just like the names of the spectra (was already implemented) 06-10-'00: The font list that sofar was defined based on my UNIX workstation have been put in a variable. Now the user can define a personal font list from the options menu in the main window. 09-10-'00: When adding a legend the main figure window would be removed from sight. That was because the older matlab versions did not put the window back in its original position. Now this works better and so the window will be visible all the time now. 10-10-'00: The "display modes" in the menubar has been changed to "2D/3D Viewer" because now only the "1D stack plot" was in this menu besides the "2D/3D Viewer". The "1D stack plot" can now be found under "various views. 10-10-'00: The input window for a time axis in the main window did not include the possibility of saving the axis vector into the workspace. 11-10-'00: From now on the matNMR HTML pages, including the manual, are included with the code. This makes it easier for people to read the manual pages as the pictures that are shown in the manual are quite big. 11-10-'00: Funny enough the input window for a 3D stack plot said it was for plotting a raster plot. This has been changed. 16-10-'00: Defining peaks can now also be stopped by pressing the right (or middle) mouse button. Previously only clicking outside the axis would achieve this. 25-10-'00: A non-functional menu-entry was found in the plotmanipulations menu of the 2D/3D Viewer called "3D mesh". This comes from the time that the contour and mesh routines were still separate routines. It has been removed. 25-10-'00: The cut spectrum routine did not use absolute contour levels when it was supposed to as it wasn't programmed to do so. Now it does. 26-10-'00: in the askedittext.m the font list QFontList was not declared as global. This would lead to an error when trying to edit the super title (and probably also other text objects). 27-10-'00: The analyser axes were only written into the figure window's userdata from the contour routine and not from the mesh, stack3D and raster routines. Furthermore also the scale2d.m did not do this, making the peak picking, get position, extract2D, etc routines give error NOTICEs or wrong results. 30-10-'00: Some bugs have krept up connected to the change in the QPeakList variable. Now this variable is empty when there are no peaks, whereas previously it had a dummy line in it. The scale2d.m, GetPeaks.m, matNMR2DButtons.m, regelabscont.m and the matNMRinitvars.m were not completely compatible with that yet. 30-10-'00: The crsshair2d.m now uses the analyser axes for showing the real coordinate of the crosshair mouse pointer. However it did not check whether this coordinate really exists and this would give an error NOTICE when going outside of the axis with the crosshair. Now it checks it and if the crosshair is outside the axis, the value NaN will be shown. 30-10-'00: the regelcaxis.m did not update the colorbars in the 2D/3D viewer window after changing the color mapping. 30-10-'00: when plotting in the 2D/3D Viewer the colorbar was not updated if the colormapping mode was set to auto previously. As it doesn't seem very likely to me that anyone will ever want to have the colormapping mode fixed, this property is reset by default when doing a new plot. 31-10-'00: an error was found in regel2d.m: it did not use the variables belonging to the 2D names but to the 1D (QLastVariableNames1D etc) 31-10-'00: A bug was found in dispmesh.m: it wrote the entire axis vector into the userdata when the axis was linear instead to do this when it was non-linear. 31-10-'00: the dispraster2D.m did not distinguish yet between linear and non-linear axis vectors. That would mean that the vectors would always be assumed to be linear. 31-10-'00: the dispraster3D.m also did not distinguish yet between linear and non-linear axis vectors. That would mean that the vectors would always be assumed to be linear. Furthermore for the direction of TD1 the analyserAxes were not implmented yet (only along Td2). 31-10-'00: previously whenever plotting the spectrum from a certain structure which contained axis vectors would put the 'QTempAxis1Cont' and 'QTempAxis2Cont' variable names in the input window for the next plot. This was annoying and has been taken out. These variables are used only for detecting whether a structure has axis vectors or for the defineplotlimits.m. In both cases it is good that the names do not show each time the user wants to plot a new spectrum again. 02-11-'00: The stack1D function was added to the RunMacro.m. This means that now it is put in the processing history like all other 2D-1D functions (SumTD2 etc) 02-11-'00: The askedittext.m used variables that did not start with a Q making them not deleted after stopping matNMR. 03-11-'00: Putting on a colorbar was only possible for each axis separately. Now it can be done from the menubar (Plotmanipulations menu) using the colorbar entry. Instead of adding a colorbar for the current axis directly as was done before, it now uses an input window in the same style as used for all other axis settings. 03-11-'00: An error occured when using a column vector for the axis vector with dual plot. Now the axis vector is also made into a row first. 03-11-'00: A bug was found connected to the recent changes to the peak lists (started 04-10-'00): an old variable name was used in checkinput2d.m 03-11-'00: the askfont.m still used gca to identify the current axis. As this is a very vulnerable construction this has been changed. 03-11-'00: regelcaxis.m did not update the colorbars when changing the color mapping for all axes simultaneously. 07-11-'00: MatNMR produced an error NOTICE whenever a descending axis vector was used that was a column vector. The conversion into a row vector was not done and this would create problems. Now this is enforced in both checkinput1d.m and checkinput2d.m! Furthermore the detaxisprops.m script that determines whether an axis is ascending or descending, checked this by substracting the first from the second element. If there was no difference between the two then it would assume an ascending axis. As this need not be true in general, now it substracts the first element from the last element. 07-11-'00: The piekfit?d.m scripts, which act as the interface between matNMR and the peakfit.m routine, use the current axis limits to reduce the spectral width before going into the peak fitting routine. This reduces the time it takes to fit a spectrum. They did however not function properly when using non-linear axes vectors. 07-11-'00: A bug was found in regelplotseriescontrel.m which controls plotting relative contours of a 3D matrix. Some time ago I changed the QTEMP3 variable name into QTEMP3_1 because QTEMP3 was also used by the contour plotting routine. In the regelplotseriescontrel.m though it was only partially exchanged causing errors when trying to use this function. 07-11-'00: An unnecessary rendering step was taken out of dispcont.m: figure(Qcntrs). 09-11-'00: the change of 07-11-'00 in the detaxisprops.m produced an error in makenew2D.m. This was because there the Qdim1d variable was not set to Qdim1 but to 5000000. Previously this could not hurt but after the forementioned change it could because the axis vector is usually smaller than this 50000000. This also affects some other scripts that call detaxisprops.m: viewrow, viewcolumn, transponeer, stack1d, scale1d, RunMacro, regelsize2d, regelprojTD2, regelprojTD1, regelconvertvarian, regelconvertBruker, four2d, extract2d, defstates. 10-11-'00: The detaxisprops.m has been changed back as the change was completely useless anyway. 10-11-'00: A funny little bug was found in clearvalues.m, a script that is used in the initialization for the baseline correction menus. For the 1D case the original spectrum (so before the baseline correction) is plotted on top of the (baseline corrected) spectrum. The problem was that the axis vector was not defined properly and in case that it was still a number (which it is by default just after starting matNMR) then a spectrum of 1 point would be drawn Qdim1d times! Obviously this made it all quite slow.... 10-11-'00: A known bug was fixed: the Bernstein polynomial baseline correction did not function properly (anymore). That was because the first row of the regression matrix was not correct. 14-11-'00: When specifying a variable with the absolute contour levels an error would be produced by given the numbers directly as '4.5 6.2 7.8'. This was because no square brackets would be put around the input. Now brackets are always put around the expression because this can never be wrong. 16-11-'00: Regel1d.m did not select the axis variable name that belonged to the correct variable name. 16-11-'00: When doing a dual with a variable that is shown in the list on the screen, asknamedual.m did not show the axis variable name belonging to the variable. It showed the last axis that was used for dual plotting. This does not make sense and so now it shows the original variable name if it exists and else it will show nothing. 16-11-'00: When doing a dual plot with an axis vector name specified then the name would not be put into the list properly by putinlist1d.m. To solve this the Qnewinlist variable has been made a structure in all scripts that it was used in: dualdisp, putinlist?d, regelBrukerSpectraread, regelnaam, regelsave?d, regelsavedisk?d 16-11-'00: The FIDstatus.m switches between FID and Spectrum status of a line. In case of multiple lines in the plot it will check whether the axis vectors are all the same. If not it will reset the plot using asaanpas.m. The checking of the axis vectors did not function properly. 16-11-'00: Every 1D spectrum has a buttondownfcn function that allows moving a line manually to a different z-intensity (MoveLine.m). This function does not switch off the zoom state while working and then it doesn't function properly. Now, the routine MoveLine.m will not do its function whenever the zoom function is activated. 17-11-'00: crsshair.m, the "get position" function in the main window, did not create UIcontrols that were parented. That made a part of the function invisible to the user on systems that need clicking with the mouse to activate a window (MS Windows, CDE on UNIX) ================================================================================================ 11-12-'00: We now have MATLAB 6.0 here and so I will upgrade matNMR 2.6 to this new version. Should there be changes that makes matNMR incompatible with older MATLAB versions then I will increase the matNMR version number. ================================================================================================ 11-12-'00: In the matNMR2DButtons.m there was still a line for making the units of all UIcontrols normalized. There are however no more UIcontrols in the window at the moment. This gave an error in MATLAB 6.0. 13-12-'00: The about and copyright NOTICEs from the help-menu did not work anymore. Somehow I have deleted them. Now they work again. 13-12-'00: matNMRinitvars.m now also recognizes version 6.0 as no big changes seem to be necessary sofar. 15-12-'00: the setphase1d.m and setphase2d.m routines have been revised: one of the Fourier theorems is that a time shift of 1 dwell point is exactly 360 degrees first order phase correction. This did not work perfectly in matNMR until now. By default now the Qfase1start is set to floor(Qdim1d/2). This is because whenever reversing a time-shift using 1st order phase correction, that should be the number assuming that you do a fliplr too else it should be floor(Qdim1d/2)+1. Affected routines: setphase?d, regelBrukerdig, matNMR1DButtons, transponeer, makenew?D, matNMRinitvars, regelsize?d 15-12-'00: A warning NOTICE is issued now whenever a fftshift is performed on a spectrum of odd length as peak positions will change when multiple fftshift's are done. 19-12-'00: defpeaks.m now plots a wider vertical range for the shaded area when defining a peak in the baseline correction routines. 19-12-'00: the scaling limits were somehow not set correctly for a stack 3D plot with TD2 along the x-axis in dispstack3D.m. The values for the TD2-axis and TD1-axis were interchanged. 16-01-'01: A typo was found in stack1d.m: a comma was missing causing an error. 17-01-'01: A small bug was found in regelQfidread.m: the text belonging to a certain data format was defined before the actual format was determined from the input window! This gave the wrong text in the matlab window. This only concerns the text, when reading the proper format was used. 01-02-'01: the y-scale in the T1-fitting routine has been set to logarithmic by default. This should give a much better view of the exponential curve. 01-02-'01: to make sure that the plot in the T1-fitting routine can also be made such that the y-scale is linear, the "plot manipulations" menu has been added to the menubar. This has subsequently also been done for the peak-fitting routine. 09-02-'01: A function "get integral" was added to the 2D/3D Viewer. It uses the same routine as "set integral", i.e. Integrate2D.m. 16-02-'01: A bug was made in making the change in the phase correction routine from 15-12-'00: in simplifying the code the resulting imaginary spectrum in TD2 after a phase correction in TD1 was scaled by 180/pi. 02-03-'01: In the setunits.m and CorrectWindow.m the Uicontrols are set to different units. In older versions of MATLAB it was necessary to do a drawnow after changing every UIcontrol. In version 6.0 this causes misplacement of the window and has therefore been removed. NB: in version 5.3 it did not cause the same effect but it also did not need the drawnow after changing each button. 02-03-'01: An input filter for MacNMR data from TecMag machines has been implemented. MacNMR files must be transfered to a PC or another machine using the fetch program in the MacBinary mode. 07-03-'01: A bug was found in doebasl2dcor.m: the QSelectedArea variable was not defined properly which gave an error when reprocessing from history. A check to ensure that the given area is valid is now also built in. Also the input can be given in 'k' (* 1024) 19-03-'01: the stopnmr2d.m did not close the matprint window. 20-03-'01: An option has been added to the matprint routine: enforce WYSIWYG. This will do everything to ensure a behaviour that comes as close as possible to WYSIWYG as we probably can get (MATLAB isn't great in this sense). Currently the routine does not convert line styles as these are not plotted in such detail anyway. The biggest problem now is the fact that when the absolute size of the window is too big for the paper then it must be rescaled. This procedure does not work as well as it should. MATLAB scales the fonts in a weird way even though their units are set to normalized. Furthermore the tiff device does something strange with the tick labels when printing a scaled window. It is therefore much better for the user to rescale the window himself/herself, adjust the plot to liking and then print it. A warning NOTICE is issued when resizing is necessary. 20-03-'01: The paper type and default paper orientation can be specified in the general options menu. The matprint routine will use these values and all windows will be created using the settings for the paper type. The setting for the paper orientation though is NOT used by the windows by default!! The matprint setting will then overrule the current window setting. 20-03-'01: An option has been built into the T1 and peak fitting routines. Now the name of the output variable (which by default are QDiffFitResults and QFitResults respectively) can be specified. The results are still written into the default names but also into the new variable. Minor point: the user must specify a global variable by the same name from the command line to be able to access the variable. A NOTICE is issued to make this clear. 26-03-'01: SelectAxis.m did not switch off the selected-property of all axes but only of the current one. And as MATLAB can make mistakes, sometimes there will be two axes selected (optically at least). ============= !web release! ============= 27-03-'01: regelmesh.m took the absolute value of the specified azimuth and elevation angles which is rather silly as they can become negative. 27-03-'01: the z-axis button in the matNMR 2D/3D Panel button window upto now was uncorrelated to the actual setting of an axis. From now on matNMR keeps track of its setting, just like with colorbars. Affected routines: matNMRinitvars.m, SubPlots.m, SelectAxis.m, regelzaxis.m, dispmesh.m, SelectFigure.m. So now it works more like a tool and the button should actually be moved to that part of the panel window. But there is no space .... 30-03-'01: The setting of the color mapping produced an error for matrices where the minimum and maximum are equal in dispmesh.m, plotcont.m and regelcaxis.m. Now this is checked for. Regelcaxis.m will give an warning NOTICE now and reopen the input window. 02-04-'01: A few new combinations of subplots have been added to the 2D/3D Viewer 02-04-'01: When specifying new tick labels in the 2D/3D Viewer (regeltick.m) no sort was done on the input values. As it is useful to do a sort (easier input and less error NOTICEs) this has been added. 16-04-'01: An option was added to the history menu in the main window: now the history macro can also be saved to a variable in the workspace directly. 16-04-01: The display functions that are put into the history are removed again if they are followed by other processing steps. It doesn't make sense to keep 6 's if they aren't used for plotting. 23-04-'01: a small bug in regeltitle.m made the changing of the title of all axes not work. 23-04-'01: a small bug in regel2d.m took the wrong axes variables. This would produce an error if the last entry from the popup button was selected. 29-04-'01: the ticklabelmode was not set to 'auto' when making a new plot in the main window. This could lead to funny looking axes even when loading a new FID/spectrum or switching processing dimension. 06-06-'01: Some subplots added and I've put separator lines between the various subplot configurations. Looks easier to use, at least to me. 12-06-'01: The file formats for MacNMR and NTNMR as obtained by TecMag have been implemented. The previous input filter for MacNMR assumed an additional header put onto the fid by using the MacBinaryII format. This has been taken away as it doesn't make sense. 24-07-'01: A default colormap for the 2D3D Viewer may be specified in the general options menu. 26-07-'01: Another very nice and colorful colormap has been added to the 2D/3D Viewer: QPosNegMap3. This colormap is the same as the QPaperMap except that it starts from the color black. Like all other PosNeg colormaps this map is changed when plotting relative contours with absolute positive and negative maxima, i.e. all negative intensities become black. This gives a huge contrast to the magenta of small positive intensities. 27-07-'01: A tricky little feature has been added: a colorbar that is not an image but a filled contour! The advantage is that one can print this as a mif file and import it into programs like Framemaker. The function is accessible from the plot manipulations menu under the normal color bar function. 27-07-'01: the 2x4 subplots did not have its tags properly defined 27-07-'01: RestoreSubplots was no longer up to date. Remember to change this if changes are made to subplot configurations!!! 27-07-'01: contcbar.m did not work properly when deleting the color bar of all axes. 30-07-'01: an entry has been added to the plot manipulations menu of the 2D/3D Viewer: "plotting functions". From here all available plotting routine can be accessed, including those that are not in the 2D/3D Panel Window by default (e.g. bar plot and polar plot). 30-07-'01: a polar plotting function has been added to the 2D/3D Viewer. This routine performs a stereographic projection to plot a 1/4 sphere properly. One may choose whether to make a surface plot from it or a contour plot. And whether an axis must be drawn or not. 30-07-'01: matNMR now keeps track of what PosNeg colormap has been used last. This will then be used again when plotting a spectrum with both positive and negative contours! 30-07-'01: It is now possible to specify different numbers of contour levels for plots with both positive and negative contours. To do this instead of a number a vector of 2 elements must be given in the input window. 02-08-'01: The matprint.m routine did not support the resolution option for the ghostscript, jpeg and tiff devices. 02-08-'01: The routines regelzaxis.m, regelyaxis.m and stack3dreverse.m executed a "figure(Qcntrs)" which led to additional rendering steps. 03-08-'01: Setting of the axis rulers did not work properly for surface plots. The fast method of replacing the xdata and ydata vectors of all axis children was only executed on patches and lines. Now also surfaces and images have been added. 03-08-'01: In the RunMacro.m routine 'convertBrukerqseq' was called instead of 'convertBrukerqseq1d'. 03-08-'01: An undo function has finally been implemented. Users may specify in the general options menu how many undo steps they want. The risk of problems due to excessive memory usage are for the users themselves. The undo function will store the spectrum, the axes, the processing history and the spectral width (so basically everything that may be stored in a matNMR structure). The function can be accessed from the menubar ("Goodies menu") or by pressing CTRL-Z in the main window or by pushing the Undo-button. 03-08-'01: Connected with the undo function: the FIDstatus variable are now stored aswell in the matNMR structure. Upon loading a structure with a 1D or 2D spectrum the FIDstatuses as stored in the structure overwrite (!) what the user has pushed in the input window (FID, Spectrum or Spectrum/FID) Affected routines: regelsave?d.m, regelsavedisk?d.m, checkinput?d.m. 03-08-'01: the setdefaults.m was not changed when implementing the saving of the paper setting in the general options menu (changed on 20-03-'01). This made that the saved setting was not used. 06-08-'01: A new colormap has been added for the 2D/3D Viewer: PowerMap. 07-08-'01: An unused option has been removed from the general options menu. This used to allow the selection of having either relative or absolute contours by default. As we have both anyway this has been removed. 08-08-'01: The default value for the blocking factor (for loading Bruker spectra) is set to 0 now. This codes for no blocking factor, i.e. the full size is taken. 08-08-'01: For the next web release the files menu must be better explained in the manual. Especially what the blocking factor is. 09-08-'01: The input format for specifying axis limits has been changed. Instead of having a colon in between the minimum and maximum now there is an empty space. Makes more sense. ============= !web release! : version 2.7 ============= 13-08-'01: more output is given now to the history for the DCcorr?D.m routines. 14-08-'01: the askcaxis.m did not give enough digits when showing the current values for the clim parameters. This was because the number was given to QuiInput which then converts it to a string. Now a num2str(x, 10) is used. 15-08-'01: It is now possible to do States-TPPI processing of 2D spectra. Many routines which used to check for States processing only, now also check for States-TPPI. 15-08-'01: Solvent deconvolution as has been proposed by Marion, Ikura and Bax has been implemented. This works in 1D and 2D and allows either a gaussian, a sine-bell or a rectangular window function. The window spread (width = 2*Spread+1) must be given as input and also the jump size for the extrapolation of the first a last few points of an FID. 15-08-'01: two unnecessary 'drawnow' statements have been taken out the regelfont.m routine. 15-08-'01: For the polar plot one may now choose whether one wants no axis, only lines or both lines and axis labels. 17-08-'01: To maintain the general use of matprint (independent of matNMR) the two variables QPaperOrientation and QPaperSize, whos values are read from the matNMR default options settings, are substituted in case that they are empty. 17-08-'01: Two bugs in the undo function: inproper updating of the slice/row of the undone spectrum (i.e. incorrect display). Wrong variable QUnDo still present instead of QUnDo2D. 21-08-'01: matNMR now recognizes MATLAB 6.1. 21-08-'01: A delimiter was missing in scale2d.m which produced an error (probable cause: change of 03-08-'01) 13-09-'01: the MATLAB zoom function uses the userdata property of the zlabel axis property to store the axis limits in case it is asked to scale the plot back to its initial limits. MatNMR did not update these values which caused strange plotting limits when rescaling. Now it updates these values for every new spectrum in the main window (1D or 2D) and when executing a "reset figure" (i.e. whenever asaanpas.m is called). The 2D/3D Viewer already did this. 28-09-'01: the SIMPSONread.m routine was adapted to fix a shortcoming of SIMPSON: when an ASCII output is generated in SIMPSON it forgets to state that the format is indeed ASCII, as is done correspondingly if the format is binary. That yielded the NOTICE that the format was binary even though it really was ASCII. 11-10-'01: Two new display modes have been added to the main window: 'both' and 'power' which produce real/imaginary simultaneously and a power spectrum respectively. Many routines are involved. The zoom buttons are not included in this implementation. This means that a 'zoom X' will work on the entire vector [real(Qspc) imag(Qpsc)], instead of working on [real(Qspc)] and recombing the real and imaginary parts later. 16-10-'01: A bug was found in regelzero2d.m: instead of QRecordingMacro it said RecordingMacro which obviously produced an error NOTICE. Furthermore no default input string was given for askzero2d.m which made it very unclear in what format the input should be given. Now a statement is given to show how to give the proper input. 16-10-'01: From now on all binary FID's that are read into MATLAB will be global variables. 16-10-'01: A function has been added to the file menu which can add a series of variables with common names and save it as a new variable. As many NMR experiments are saved in blocks with names like 'exp_1', 'exp_2', 'exp_3' this function asks for the common string of the name, i.e. 'exp_' and the range, i.e. 1:3. The name of the variable is written in the list of 10 last-loaded spectra for convenience. Files involved: addvariables.m, askaddvariables.m and regeladdvariables.m 18-10-'01: A bug was found in dualdisp.m: I used a complex conjugate transpose instead of a transpose to make sure the vector was a row. As I was not aware of this difference ( must be used instead of ) all code was checked for similar instances. Indeed the routines transponeer.m, checkinput1d.m, regelsolventsuppression2d.m regellp1d.m proved also to be wrong. 26-10-'01: Setphase2d.m used the Qdim1d variable to determine the number of points for the phasing vector. This would give an error when processing from a macro as the display is not updated then and therefore neither the Qdim1d variable. 29-10-'01: readBrukerProcessedData.m did not specify a big endian byte swap and an int32 format but relied on the machine default byte swapping and the int format. This works on UNIX but fails on a PC as the default values in MATLAB are different then! 31-10-'01: scale2d.m uses a check to determine all graphics objects that need a change of the axis variable. This produced an error if there are more than one types of objects present in the plot due to the fact that the result is always a column. The result was concatenated as a vector though. 31-10-'01: scale2d.m produced an error when supplying a user-defined axis that is not a variable in the workspace but something that gives a vector when the string is evaluated (e.g. 2:20). 31-10-'01: The warning NOTICE issued by crsshair2d.m whenever the intensity cannot be determined has been taken out due to its high annoyance factor. Now it will just show a NaN. ============= !web release! : version 2.7 ============= 06-11-'01: A series of binary FID's can now be read into matNMR using a single function. One must specify a range and a common name part for both the file and the variable names. The routine then goes through the ranges. The sequence $#$ is used to denote the place of the numerical range in the names. Every occurance of $#$ will be replaced by the number. Not using the $#$ sequence will result in funny results but not in error! 06-11-'01: The adding of a series of variables has been changed such that now the $#$ sequence, as used in the reading of a series of binary FID's, is also used here. Again strrep is used to replace all occurances of the $#$ sequence by a number. 07-11-'01: A bug was found in askBrukerlaad.m: the fidlaad.m routine (for binary FID's) was called if the file name did not exist, instead of the Brukerlaad.m routine. 07-11-'01: Also for MATLAB files, Bruker spectra and SIMPSON ASCII files has the loading of a series of files been implemented in the main window. 16-11-'01: The contcmap.m and regelcaxis.m routines used the standard MATLAB colorbar.m routine to update the colorbar. This would produce a new colorbar however when the current colorbar was made MIF-printable (see change 27-07-'01) because the colorbar.m routine no longer recognizes such a colorbar. Now a colorbar is first deleted and then a new one is made. 05-12-'01: A bug was found in the Qfidread.m routine for the Varian format. The SizeTD2 was set to np/2 instead of np. 12-12-'01: An additional check is now made to ensure that if a 2D matrix is read even though a 1D FID/Spectrum is expected that it will be read as a true 2D. 18-12-'01: extract2d.m had a bug concerning the saving of the action into the history and history macro. Instead of saving the original range (i.e. in the unit of the current axes!) the coordinates into the axis vectors were saved. This created an erroneous reprocessed spectrum. 15-01-'02: a function has been added to simplify calling an axis in a 2D/3D viewer window, manually (i.e. from outside matNMR). The function GetAxis asks for the axis number and then selects the proper axis. This function should be followed by a SelectAxis command though!! 16-01-'02: a bug was found in the regelsavedisk?d.m routines: a check is being made to see whether multiple variables have been entered instead of 1. The check was bad and has been replaced by something that does work. 29-01-'02: The change made on 13-09-'01 made sure that the limits for the zoom routine are reset every time the asaanpas.m routine is called. Now this is also done in the resetXaxis.m routine, because else the zoom routine can do strange things again when switching between display modes. 29-01'02: An additional bug was found when changing display modes: the xticklabels remained the same, instead of adapting to the new range. This was because the xticklabelmode is set to manual as soon as the "both" mode is selected. This is now switched back to manual in the resetXaxis.m routine. ============= !web release! : february 1 2002, version 2.7 ============= 14-02-'02: The -epsi option for the print command is no longer supported starting from Matlab 5.3. This has been renamed to -tiff now, the current flag for this option. 07-03-'02: A bug was found in a check for the coordinates of a matrix in the routine checkinputcont.m. The check did not take into account more complex structures. Now the check seems better, although there may still be cases where it will fail. 07-03-'02: The use of a cosine series for baseline correction is now the default setting. 12-03-'02: A bug was found in Subplots.m for the 5x1 subplots (wrong position). 12-03-'02: The RestoreSubplots also had wrong sizes for the n x 1 sized subplots. 19-04-'02: A bug was found in QuiInput.m: when a new input window was too large for the screen it was supposed to be rescaled. This did not work for uicontrols because the unit was changed to normalized. This has been removed and now it seems to work. 13-05-'02: The FID wasn't scaled by 0.5 in four2d.m in case of a States-TPPI processing. 02-10-'02: The matnmroptions.mat was changed for better compatibility with other platforms than UNIX. 02-10-'02: MatNMR can now recognize version 6.5 of Matlab. ============= !web release! : october 2 2002, version 2.7 ============= 14-10-'02: the problem that matNMR couldn't handle spaces inside path names has been solved. Instead of using the eval command, now the functional form of the load and save commands is being used. Affected routines: regelsavedisk*.m, matNMRinitvars.m, saveoptions.mat, matlaad.m, regelmatlaadSeries.m. 14-10-'02: Starting form Matlab 6.5 it is no longer possible to use a construction of the form (variable == []). Instead one must use isempty. There were still some left-over lines in the code which caused some problems. Affected routines: regelcont.m, regelbar.m, dualdisp. 23-10-'02: Matlab 6.5 no longer supports automatic roundoff for indexes into variables. This means that some routines may produce errors. Affected routines found sofar: crsshaird2d.m, ============= !web release! : november 12 2002, version 2.7 ============= 02-02-'03: A bug was found in dualdisp.m: An eval command of syntax "variable1 = eval(variable2)" was performed with variable2 being an empty string. This gives an error NOTICE even in older versions of Matlab. The syntax has been changed. This may happen also at other points in the code. 18-03-'03: All eval statements of the construction "variable1 = eval(variable2)" are now secured against empty strings, IF AND ONLY IF a string had to be supplied to the eval. Whereever a number had to be supplied (and thus would be normally be put preemptively in the input box or in the code) an error NOTICE will still come if an empty or wrong string is supplied. Affected routines: regelabscont (in matNMRinitvars the variable QContourLast has been given a proper default value now), disppolarplot (in matNMRinitvars the variable QPolarPlotContourLevels has been given a proper default value now), a check is now done in the regelnaam and dualdisp routines to make sure that a FID/Spectrum is really defined (no empty string). This nicely avoids an error NOTICE and reopens the input window. similarly in regelaxis?d.m, regelexecutemacro such a check is done but here the routine aborts. 18-03-'03: a text which states the order of the baseline correction and a closerequestfcn have been added to the 1D and 2D baseline correction routines. This makes the function of the order input button more clear. Also the closing of the window is now safe as it always stops via stopbasl?d.m. Affected routines: stopbasl?d, basl?dmenu 18-03-'03: bugs related to the one described on 02-02-'03 have been thoroughly looked for since Matlab 6.5 has a more stringent syntax then previous versions. The constructions (variable == []) and (variable == zeros(0,0)] are always replaced by "isempty(variable)". Furthermore eval calls to empty strings are prevented by first doing a deblank of the string. Affected routines: regelcont, regelabscont, regelbar, regelstack3D, regelmesh, regelraster2D, 18-03-'03: both the peakfit and T1 fitting routines had a call to the window generating function with the syntax "dummy = pk_init;" even though pk_init does not produce any output. In Matlab 6.5 this produces an error NOTICE and the needless variables have been removed now. Other routines that have been changed as well: QColorMaps, QShading, RestoreSubPlots 19-03-'03: all matNMR figure windows (except CopyFig and mathelp windows) now have proper closerequestfcn's defined to increase stability. Closing a window manually should not interfere anymore with matNMR. Affected routines: peakfit, T1fit, stats?d, Qtextdata, Qscreenops, Qoptions, Qlinedata, QuiInput, matprint, matNMRintro, clabels, klabels (and previsouly on 18-03-'03 basl?dmenu). 19-03-'03: since all windows now have closerequestfcn's defined windows must be closed using the delete function. Therefore all "close(WindowID)" syntaxes have been changed. Affected routines: clabels, doecontje.m, doeopties.m, klabels, matprint, Qdefault, QezLegend, stoppeakfit, stopT1fit, stats?d, whataxis?d 19-03-'03: some gcf and gca calls have been changed into calls using their proper matNMR variables. This increases stability. (see also 31-01-'00) Affected routines: rotcont 19-03-'03: the undo function can now be recorded into a macro. 19-03-'03: The Bruker Aspect format has been added to the list of known file formats. 20-03-'03: it is no longer possible to have both the 1D and 2D baseline correction menus open at the same time. As these can destructively interfere it is safer to close one of them when the other is opened. 20-03-'03: it is no longer possible to open the 2D baseline correction menu during 1D processing as this causes problems. 20-03-'03: an output statement is now given when making a time axis from the main window. 20-03-'03: a bug was produced by the crsshair2d routine whenever it was called to while being in an empty subplot. Since the axis variables Q1 and Q2 would not be defined. Now a check is done to see is they are empty or not. 20-03-'03: a brilliant new feature in the matNMRinitvars.m: all variable names are now sorted by name, which makes it actually possible to find them in the list!! 20-03-'03: unfortunately there seem to be two different header sizes going around for the Bruker Aspect format: 256 and 512 words. Now I determine the header size by looking at the total file size and the value for SI (the total number of complex points). Hopefully the few parameters that we extract are the same in all formats. 20-03-'03: it is now possible to connect the axes to a spectrum from within the 2D/3D viewer window. If the variable name is not good then the user is asked to give a new name instead. 21-03-'03: the uicontrols in the input windows now have tags so they can be switched on or off, depending on whether that is necessary. This will be used first by the askfidlaad*.m routines. Furthermore a callback can now be encoded into the name string for popup, check and edit buttons in QuiInput. The extra code '&CA' must be appended to the normal name string for it to work. This is again used by the askfidlaad*.m routines. 21-03-'03: when reading a binary FID now the input controls for the domain sizes are dimmed automatically if the chosen file format does not require them to be given. This makes life a bit easier. 21-03-'03: an error NOTICE appeared when trying to do a State-TPPI processing on a 1D spectrum. An indicator for complex FT has been added to the QTEMP variable in historyFT. 21-03-'03: the undo function did not reset the phase buttons to 0 even though the values were set to 0. This caused strange effects. MORE IMPORTANTLY: the phase was not conserved by the undo function. This has now been changed. Also now the phase is not put into the undo for each individual increment but only for the total amount. This makes much more sense. 24-03-'03: Bruker qseq processing was now added to the various FT's. This was done because there really isn't any reason for first doing the tedious convertBrukerqseq step and then a TPPI transform. The old option has been left in the code though as this allows changing the size of the spectrum etc. There was even a bug in the convertBrukerqseq1d.m routine which caused it to not work properly. The situation of which transform does what needs to be explained properly again in the manual!! 24-03-'03: An error NOTICE appears when the width and/or amplitude of a peak is 0 in the peak fitting window. Now the value is always set to a non-zero value before fitting. Affected routine: peakfit. 25-03-'03: in the change of 14-10-'02 a bug has crept into saveoptions: the syntax for saving all the options variables is incorrect. It is not really necessary to use the functional forms of load and save, if there are spaces in the path names. The eval command also works fine as long as you put the file name between "'". The chages in regelsavedisk?d have also been changed back to the eval command, this time WITH the "'", in order to allow saving of multiple variables. 25-03-'03: a button has been added in the font options menu that allows importing all system fonts as given by the matlab command listfonts. Previously my fixed list was defined which the user had to update manually himself. 25-03-'03: a bug was found in Qfontops: saving of all fonts failed because saveoptions was called. And as the call was from within a function saveoptions operated in the function's workspace and thus didn't know most of the variables. Now all variables that are saved in saveoptions are first declared global again. 25-03-'03: a safety was built into Qfontops to prevent the user from entering an empty string. Now the old string is put back again. 25-03-'03: a deblank was done in QuiInput_2 after reading our the value of check and popup buttons. The deblank produces [] for any number and so this could potentially create problems. The deblank has been removed. 25-03-'03: I noticed that the VNMR filter currently only supports 1D spectra properly. I have changed this so that it also works for 2D. 26-03-'03: an option has been added to the main window to allow the creation of a gradient axis. 26-03-'03: the partial derivatives used for the amplitude in the T1 fit were not entirely correct as it lacked the constant part. In practice this is not noticeable at all. 26-03-'03: a basic routine for fitting isotropic diffusion curves has been added to the main window. It really is practically the same as the T1 fitting routine except that the functional, and therefore also the partial derivatives, is different. 26-03-'03: an option to perform a second-order phase correction was added to the phase menu in the main window. With this feature the effects of strong cut-off by the audio filters may be countered. The feature must be called by switching on the check button within the phase menu area. 27-03-'03: in an attempt to slowly improve the code all statements of syntax "var(length(var)" have been changed into "var(end)". 27-03-'03: an error message would appear when trying to "last * binary FID" when the previous name did not point to a real file, in which case the file size could not be determined. I think this only happened after first loading a series of binary FID's and then doing either of the two "last * binary FID" again. Because then the name would have the "$#$" code in the name. Now for askfidlaad.m the "$#$" is replaced by the first element of the previous series. For askfidlaadSeries.m the $#$ is temporarily replaced by the first element of the previous series in order to read out the size of the file. In both cases the size is checked to be not empty in order to avoid an error message. 27-03-'03: in all cases where matNMR uses the uigetfile routine the search path has been changed into [pwd '/' QSearchProfile] since on my machine it started to always go back to the root directory. And that was quite annoying. 27-03-'03: the previously implemented input filter for JEOL can now be fully trusted and is actually called the JEOL Generic format. 27-03-'03: direct reading of standard parameter files is now supported when reading binary FID's. There are a number of conditions and assumptions necessary for something like that to work and these are explained in the manual. This is supported for all Bruker formats, the chemagnetics format, the VNMR format and the JEOL Generic format. ============= !web release! : march 28 2003, version 3.0 ============= 31-03-'03: strangely enough there was a bug in apodize1d.m: the Qemacht vector was not cleared before making a new vector for cos^2, block + exponential and block + cos^2. This has now been changed. 07-04-'03: in the output for the history for a 1D baseline correction the term "1D" was not mentioned, which is confusing when you're processing a 2D and suddenly switch over to a 1D mode. 07-04-'03: the change of 21-03-'03 in the undo (such that single 1D phase increments are not stored separately, but collectively) did not apply to 2D processing. This has been changed now to avoid needless equal entries in the undo matrix. 10-04-'03: the getsweep*.m routines have been protected against empty input buttons. If the buttons are empty when then routines are called (button callback) then the current value will simply be put back again. 14-04-'03: a bug was found in checkinput1d.m: at the point where it is checked whether the new variable is really a 1D spectrum, and not 2D, a flag QTEMP7 is used. But this was not set to 0 when the variable is simply a 1D spectrum and this caused a second flag QTEMP8 not to be set, and this caused that the axis in a structure would not be used. 14-04-'03: as checkinput1d.m checks whether the new variable is not a 2D, checkinput2d should check whether the variable is not a 1D. Before this was not done. 14-04-'03: the paperposition of the main window has been reduced to [0.1 0.1 0.8 0.8], like all other windows. 14-04-'03: an important improvement in the WYSIWYG printing of matNMR was achieved by temporarily centering the axes in the figure window before printing. This greatly improves workability I think. 16-04-'03: the reference point for 1st order phase correction is set by default to the center of the spectrum upon loading the FID/spectrum. This wasn't done correctly in makenew2D since it took Qdim1d/2, which was defined after the setting of Qfase1start. Now Qdim1d is set before. 16-04-'03: the separation between 1D and 2D processing modes was not implemented nicely. So far the flag for the dimension Qdimensie would be set to 0 whenever a 1D processing function would be called. That meant that even if the call was by mistake the flag would be changed. Now an additional variable QSwitchTo1D is used to indicate that a switch must be made. The switch is only made however after the user has pushed OK in the input window. In connection with this it is now no longer possible to execute a 2D processing function on a 1D FID/spectrum. A notice is given for all processing functions. 16-04-'03: made a small change in asaanpas.m: before doing the 'axis auto' to let MATLAB choose the new axis limits automatically, I delete the userdata of the zlabel property of the axis. This hidden variable is used by the zoom function and I suspect also by other functions. Clearing this produces a more stable behaviour. 16-04-'03: the putinlist?d routines have been improved by not only taking the variable name as a criterium to be put in the last of 10 last-used variables, but also the axis variables. 16-04-'03: the axis in a structure was not used in the dual display function. This has been changed in checkinputdual to be compatible with checkinput1d. Now by default the axis is taken from the structure IF only one structure in one variable is supplied, AND the user hasn't given his own axis in the input window. 16-04-'03: the equal integral setting for dual display has been corrected: previously only the sum of the real part of Qspc2 was compared to the real part of the dual plot vector. As this is only correct for vectors of equal length and with equal increments in the axis vectors, this was improved by taking the increments and lengths of the axis vectors into account. 16-04-'03: three characters have been added to the list of characters that checkinput.m needs to look for in a user input. These are "[", "]", and ";". Somehow they weren't present before and that made it impossible to load a spectrum of syntax [s1; s2; s3] with all three variables being matNMR structures. 12-05-'03: I have finally gotten sick of the extremely old feature that underscores in the name of a variable would not be printed correctly in the title of a plot. A simple strrep is done now on all title statements, IF the variable name is printed. Affected routines: makenew1D, makenew2D, regelgetcolumn, regelgetslice, regelprojTD*, regelskyline, viewcolumn, viewrow, getdiag. getantidiag, plotcont, dispmesh, dispbar, disppolarplot, dispstack3D. 12-05-'03: there were a number of bugs in regelcaxis, which is used to change the caxis values for one or all axes in the 2D/3D viewer. It selected all axes, including colorbar axes and when these colorbar axes were updated (deleted and made new) the handle was obviously lost and an error message appeared. Also, it did not update all colorbars properly AND it did not update the list of handles to the colorbars, Qcontcolorbar. What a mess.... 12-05-'03: there was a bug in contcmap: the wrong colorbar handle would be deleted. 12-05-'03: a change was made in asaanpas: the x, y and z scale parameters of the axis are set to linear. This will do undo any setting to logarithmic madeby the user. If this is not done then at no time will a new spectrum be linear, unless by using the function in the plot manipulations menu. And that is not correct. The function in that menu are ALL secondary to the default setting, which is linear for NMR spectra. 14-05-'03: an option has been added to the ruler x-axis menus so that an axis can also be given in kHz. 02-06-'03: the 1D baseline correction did not take into account the possibiltiy that the spectrum has a negative axis increment. And so the resulting plot, where the original spectrum, the fitted baseline and the resulting spectrum are shown, did not make sense because the fitted baseline would be reversed. This has been corrected now. 04-06-'03: The left and right routines did not take negative axis increments into account. 04-06-'03: the scale1d and scale2d did not save the new axes into the designated variables because of the addition of kHz to the range of different axes. This has been corrected now. 04-06-'03: also some other scripts were not completely correct in this respect since they did not use the proper value for Qstatuspar. 13-06-'03: a bug was found in the checkinput1d and checkinputdual routines in connection with the change made on 14-04-'03: the check to see if the variable is 1D or 2D was not done on the correct oart of the string Qspct2. In fact one should simply use QTEMP2 instead since that contains the correct variable. This also avoids messy indexing into Qspct2. 18-07-'03: changed the scaling threshold for wysiwyg printing in matprint to 80% of the paper size, instead of 90%. This should improve the functioning a little bit. 22-07-'03: sometimes the input window would not disappear automatically (occured when not closing it by hand while selecting an other function which opens a new input window). This probably started with the change on 19-03-'03 when I deleted the statement where it checks for open input windows before creating a new one. 01-08-'03: A bug was found in connection with Matlab 6.5: in ManualBasl there was no space in the following string between the quote and the variable BaslFunc. OrgLineData.Text = ['"' BaslFunc '" --> (A=' num2str(A) ', B=' num2str(B) ....]; Apparently this is no longer allowed, whereas it was allowed before. I did a quick check and this seems to be the only typo of this sort. ============= !web release! : august 1 2003, version 3.0.28 ============= 11-08-'03: when loading a new spectrum of name "1.345 * fidvar", where fidvar was a matNMR structure, an error message would appear. The checkinput* routines correctly identified only one structure and variable, temporarily saved in QTEMP2, which was read out later on. The problem lied in the fact that QTEMP2 was changed by the presence of the number, even though it was assumed in the code that whenever there is one variable, which is also a matNMR structure, this variable would not change. Now a new temporary variable QTEMP6 is used in all checkinput* routines to prevent this error from occuring. 21-08-'03: an additional piece of output is now given when doing a dual display: the name of the added variable is shown in the message window. 08-09-'03: in a few m-files a clear was performed on all QTEMP* variables which was not a smart thing to do. These statements have been removed. 09-09-'03: the MoveLine function has been changed slightly: now it only moves a line when the left mouse button is clicked upon it. Else it will show the name of the variable that produced the line. This is particularly nice when there are multiple lines in the plot (dual display). 09-09-'03: Also, the response of MoveLine when the "get position" routine is running has been switched off now. Zoom already used to be handled in the same way. 24-09-'03: there existed two m-files called Extract2D and extract2d. These are different in any sensible operating system but as usual Windows causes problems. The extract1d.m and extract2d.m have been renamed to regelextract1d.m and regelextract2d.m, in line with the general naming of m-files. 24-09-'03: some small changes were made to the manual, help and copymat files. 25-09-'03: the reading of Bruker parameter files was not working: QReadParameterFiles first of all tried to access the acqu and acqu2 files, instead of the acqus and acqu2s files. Also, the parameter matching did not work because only the variables were matched, but without the "=" character. And then one could find more than one hit, which crashed the routine. Now the "=" is matched as well, just like for the Chemagnetics format. 25-09-'03: the essentially deprecated helper routines that used to contain the matNMR manual are still used to display the processing history and "about matNMR" texts. The "home" button still refered to the old manual pages and has been changed to go to the "about" text instead. 25-09-'03: there was an inconsistency in the diffusion fitting routine. Since the gyromagnetic ratio was inputted as gamma/2/pi that value should be multiplied by 2Pi in the Diffpk_voigt and Diffpk_qvtdf routines. This has now been done. 25-09-'03: Two more inconveniences have been removed from the diffusion fitting: whenever one of the parameters is extremely far off (e.g. D) then the fitting routine would crash because a variable "ss" would not be created. Now ss is set to 0 before the start of the fit. This has also been changed in the T1 fitting routine T1leasqr.m. Secondly, the axis is now plotted as gradient^2 instead of gradient. This makes people doing diffusion fitting happy as it gives a straight line for a single diffusion coefficient. 25-09-'03: A popup button was put in the input window for dual display for the selection of the scaling of the new line in the plot. Why haven't I done this before? 01-10-'03: I have finally deleted the seemingly useless option of multiplying the first point of the FID by 0.5. As this must always be done to avoid a baseline offset, the option was taken away from the general options menu. 01-10-'03: by default the 1D, phase and 2D menus were not shown at startup. Now this can be selected in the general options menu. 01-10-'03: when doing a dual display with equal integral or equal maximum now the scaling factor will be shown in the console window. 02-10-'03: when loading a new 1D or 2D spectrum the names would be put in the list of 10 last-loaded spectra, IF the name was new. For known names no action was taken. Now known names are also put first in the list to prevent them from being kicked out of the list, even though the name was used recently. (putinlist1d and putinlist2d) 06-10-'03: when adding a new axis to a 1D plot, the routine scale1d checked whether there are more than one spectra in the plot. If so, it checked whether they all have the same axis. If not then the routine should do a asaanpas instead of directly changing the xdata property of the individual lines. The latter check did not function properly when the axes had different lengths. 08-10-'03: a ConcatenateMatrix routine is added to the 1D and 2D processing menus and is also incorporated into the processing history. (The routine ConcatenateMatrix.m can also be called directly when loading 1D or 2D datasets). This allows the concatenation of 2D matrices along either direction, which is very useful for spin-counting experiments and playing with matrices for testing purposes. 08-10-'03: when connecting a history macro to a 2D FID the resulting matNMR structure is set to imply spectrum and not FID. This is now changed to FID's. 08-10-'03: adding a series of variables did not work for structures (known bug) and required all variables to be global. Now all variables are set to global by the routine itself and it also works for matNMR structures. 09-10-'03: A new plotting function was added to the main window: 1D bar plot. This is located in the "plot manipulations" menu and is consequently NOT a standard plot. Pressing "reset figure" will bring back the original line plot. The current axis is taken into the bar plot and the colour and width of the bars may be specified by the user. 13-10-'03: the initial routine to read in the standard spectrometer files (27-03-'03) was not able to read Chemagnetics files which contained arrays of 1D experiments. This has been implemented now. 13-10-'03: two routines had wrong names: extract1d and extract2d should have been called regelextract1d and regelextract2d. (should have been corrected on 24-09-'03!?!?) This has now been corrected. 13-10-'03: when changing the row/column number in a 2D the label on the x-axis would change to state what row or column was current. This has been taken away so now the unit of the axis is always shown. This has also been taken away in transponeer, RunMacro, regelextract2d, regelsize2d, regelconcatenate 13-10-'03: Instead of using the x-label to show what row/column is current, there is now an indicator button on the right hand side of the window which shows whether the current mode is 1D or 2D, and which dimension of the 2D is current. This nicely supplements whether the current curve is a FID or a spectrum. Both have been given a bright green colour with yellow text, in bold, to show them off much more than the previously-used grey did. 13-10-'03: there was a small bug in stack1d: the calculation of the width of the current zoom limits in real points, as approximately defined by the zoom limits, used a "ceil" funtion. This could sometimes give problems as it produced the wrong number of points. Now this is a "round". 13-10-'03: There was a small bug in transponeer: the FIDstatus was not swapped along with the FID/spectrum. I think that should be done for consistency. 13-10-'03: as many people who use matNMR are very confused by the axes in points, I have implemented a setup where it is possible to select what the default axis if for plotting spectra. This is done from the general options menu. There is also a default setting in the "plot manipulations / ruler x-axis" menu to override any previous axis definitions. This is overlooked by flag variables, corresponding to 1D, TD2 and TD1. Instead of having to go to the general options menu every time one wants to change the default axis setting, there is is also a menu item "change default". This changes the default setting for the current dimension but does not save the setting in the matnmroptions. IMPORTANT: The option has been added because now the reading of standard parameter files is implemented and I assume that many people will like that. Since I refuse to go into all sorts of crazy bends to make sure the axes are also correct (i.e. SWH and spectrometer frequencies must be correct!!), the user is responsible for supplying the correct information! Affected routines: matNMRinitvars, Qoptions, doeopties, saveoptions, makenew1d, checkinput1d, makenew2d, checkinput2d, GetDefaultAxis, regelsetdefaultaxis, scale1d, matNMR1DButtons, FIDstatus, regelsave1d, regelsavedisk1d, regelsave2d, regelsavedisk2d, viewrow, viewcolumn, regelgetslice, regelgetcolumn, getdiag, getantidiag, stack1d, regelskyline, askextract?d, regelextract?d, transponeer, regelsweepwidth, regelspectrometerfrequency. 13-10-'03: now also a button is present in the main window to enter the spectrometer frequency. Changing this value leads to an update of a default axis. NOTE: changing the value of the spectral width also leads to an update of a default axis. 14-10-'03: given that the default axis will now often be something else than in points there is a conceptual problem with the "get position" routine which provides the x and y values for the current plot, and the x-value is in the unit of the axis vector! Now a third value is plotted simultaneously, which shows the number of the point that is looked at. This index may be wrong in some cases where multiple lines are in a single plot, while some of them would require a different 'xdir' setting. Then the index should be (length(line)+1-index). This occurence of this problem should be extremely low though. Additional problems occur when showing both the real and imaginary parts simultaneously in the plot. This will create faulty indexing and is much more likely to occur. Affected routines: crsshair, stopcrsshair 27-10-'03: the muisinput routine has now also been adapted such that it handles arbitrary axis units properly. Previously it assumed points to produce the proper reference for the 1st order phase correction. Now the interp1 interpolation routine is used to extract the proper value in points. affected routines: muisinput 27-10-'03: crsshair.m used the obsolete routine table1 to index the position of the cursor in the "get position" routine. Now this has been replaced by the interp1 and interp1q routines. affected routines: crsshair 27-10-'03: after a manipulation that changes the domain or the size of the FID/spectrum the axis must always be set to the default axis. This wasn't done and has been fixed now for Fourier transform, changing of the sizes, linear prediction, STATES processing, conversion of various spectrometer formats to matNMR. Exception: the extract routine takes the current axis, default or user-defined, and cuts the relevant part out of it. Also, the spectral width is changed. 27-10-'03: the putinlist?.m routines interefered with the regelQfidread*.m routines through the common use of the temporary variable QTEMP2. The putinlist*.m routines now use QTEMP12 instead. affected routines: putinlist* 27-10-'03: when reading the standard parameter file for Chemagnetics an error mesage would be given whenever the parameter dw2 was not found for a true 2D experiment. This would cancel the reading of the FID. Now only a warning message is given and the spectral width is set to 1 Hz. affected routines: regelQfidread* 27-10-'03: the "get position" routine (crsshair.m) was adapted to the default axis setup but did not take FID's properly into account yet. For FID's this would lead to an incorrect index number. This now also works for descending axes (negative time increment) affected routines: crsshair 28-10-'03: for the time domain there now is a choice for a default axis as well, being either time or points. affected routines: GetDefaultAxes 28-10-'03: The handling of the display option "both" (real and imaginary displayed simultaneously) was not handled properly in the new default axis setup. Now it has been checked to work with all types of axes (ascending and descending) for both the time domain and the frequency domain. Switching of the axes, and direct updating of the plot on screen, is also working properly. affected routines: regelRI, regeldisplaymode 28-10-'03: the "reload last" function would produce an error if the name variable was empty. Now a check is done to prevent that from happening. affected routines: reload 28-10-'03: The "get position" routine has been disabled for the "both" display mode as it is too complicated to work with. affected routines: pos1d 28-10-'03: scale1d did not handle the display mode "both" properly: as this is such a special display mode we always should do a "reset figure" and this wasn't done. affected routines: scale1d 28-10-'03: dual display of lines with axes of different increment sign (i.e. ascending/ descending) cannot be handled properly by the "get position" routine. Even the plotting may not be very useful but it is allowed. A warning message is now issued whenever this situation occurs to notify the user. affected routines: dualdisp 28-10-'03: the relative y-scale feature (should this be made obsolete?) did not work properly for the "imaginary" and "both" display modes. For the imaginary display mode a real number was substracted from line instead of an imaginary number. affected routines: Qspcrel 28-10-'03: a few "single slice" features have been added to the 2D processing menu (and in the 2D panel on screen). These can be used to operate on single slices of a 2D. Currently these include "shift data points" and "set phase", but could potentially be expanded. affected routines: setphase2d, regelleftshift, matNMR1DButtons, matNMRinitvars 28-10-'03: an item has been added to the goodies menubar: "reset after error". This tries to reset certain key variables and recreates the axes so that an error doesn't force a shutdown of the program. As in my Linux version of Matlab the graphics are not that stable this may be useful for repairing any buggy rendering that Matlab sometimes produces. affected routines: matNMR1DButtons, ResetAfterError 28-10-'03: the