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 script views.m was renamed to regelviews.m to fit in with the general naming of scripts. affected routines: regelviews 28-10-'03: The phase values have been taken out of the undo matrix for 2D spectra because of the confusion arising from them: if they are left in then an undo of a previous phase setting should result in the unphased 2D, while showing the current slice with the stored phase values. This is confusing because that way it seems that nothing was restored since the slice before and after the undo are the same. Only after switching rows/columns or changing the phase values in the respective UI controls, this difference may be detected. This is just very confusing for the user and so the values are simply no longer stored. An undo will restore the 2D as it was before the phase setting and the change is obvious because the slice looks different (if the phase change was large enough to be detectable by eye). affected routines: regelUNDO, doUnDo 29-10-'03: A startup message has been created which is shown at startup only. This points the user to new features and hopes to alert people to update their version more regularly. affected routines: StartupMessage, nmr 29-10-'03: the execution of a user command (which is put in the processing history) did not use the undo function. This has been added. affected routines: regelusercommand 29-10-'03: a bug was found in the "define peaks" part of the baseline correction routine: a red grid would be plotted over the designated area, which would be related to the current view settings for the y-axis: Qymin and QtotaalY. In some cases the routine would fail because of rounding errors. Now a check is done to ensure this doesn't happen. affected routines: defpeaks 29-10-'03: a routine has been added to the plot manipulations menu in the main figure window to indicate spinning sidebands in the current plot. The user is asked to supply the spinning speed, the spectral width (is usually already known) and line attributes for the marker lines. After that a peak must be assigned and the marker lines will be put in the current plot. affected routines: askshowsidebands, regelshowsidebands, matNMR1DButtons, matNMRinitvars 29-10-'03: the default unit for the spectral width has been changed from Hz to kHz. affected routines: regelshowsidebands, matNMR1DButtons, scale?d, matNMRinitvars, GetDefaultAxis, askshearing?D, stats?d, QReadParameterFiles, apodize1d 17-11-'03: the change of 01-10-'03, in which the option to multiply the first point of the FID by 0.5 was deleted from the general options menu, has been partly reversed. Since this multiplication is only wanted when the FID is apodized to zero, and not when doing an FT of an undamped cosine, a check button was added to the main window to allow setting this on the fly. The default setting is on, but if the user wants to do an FT of an oscillation (e.g. when doing spin counting) this can be switched off at will. affected routines: matNMR1DButtons 17-11-'03: if the user loads a single 2D matrix into matNMR then the checkinput2d routine will see if the axis vectors are saved in the matNMR structure, if there is one. Until now the routine only checked them simultaneously but this would give problems because sometimes only one of the axes is saved (default axes are not stored in a structure) and the other left empty. Then an error message would be given saying that the axes were not of correct length. Now the check is split in two, to cover the axis vectors indepedently. This is connected to the new feature of the default axis as well because previously it wasn't really possible to save only one axis. affected routines: checkinput2d 17-11-'03: the viewrow and viewcolumn routines did not set the spectral width and spectrometer frequencie before doing an "asaanpas", which could lead to an incorrect default axis. affected routines: viewcolumn, viewrow 17-11-'03: the reading of Chemagnetics FID's using the parameter files sometimes failed whenever the acq file contained one or more arrays but the experiment wasn't an array. This was because matNMR did not take the use_array variable into account, which is written in the acq_2 file. affected routines: QReadParameterFiles 17-11-'03: the replacement of the "_" character in the title by "\_", whenever the title is the name of the current variable (see also change of 12-05-'03), wasn't done properly by the regelgetcolumn and regelgetslice routines. affected routines: regelgetcolumn, regelgetslice 17-11-'03: the doebasl2dcor and stopbasl2d routines did not do a "CheckAxis" before plotting the current slice, after performing a 2D baseline correction (or undoing it or cancelling it). This would sometimes lead to spectra which weren't plotted correctly (flipped left-right). affected routines: doebasl2dcor, stopbasl2d 18-11-'03: the width of the windows that are used to add titles and axes labels to plots have been made larger by default. affected routines: clabels, klabels 18-11-'03: the layout of the window for the creation of legends has been changed to accomodate for more space for the text for each line in the plot. affected routines: Qezlegend 02-12-'03: Whenever a stack1d was made with many elements in the stack then the axis would be illegible because of the crowding of the text. Now, the number of ticks is limited to approximately 25. affected routines: stack1d 09-12-'03: the SIMPSONread did not use kHz as default unit for the spectral width. affected routines: SIMPSONread 22-12-'03: apodizing a spectrum produced an error because the plotapodizer routine had a bug in the line which defines the plot for descending axes. affected routines: plotapodizer 22-12-'03: when apdozing a 2D spectrum with a descending axis then the simpelplot routine did not do a CheckAxis to determine whether the line and axis need to be flipped to produce the proper plot. This has been corrected. The same problem was present in the regellb routine, when selecting "none" for the apodization function. This would not return the situation to what it was before apodization, which it should do however. Also here the CheckAxis has been inserted after the Qspcrel statement. affected routines: simpelplot, regellb 22-12-'03: the SIMPSON import filter did not set the FID/spectrum flag properly in the output matNMR structure. In fact it did not even look at what the type of data was. This has been corrected. By default an FID is assumed if the variable TYPE is not set in the SIMPSON data file. affected routines: SIMPSONread 15-01-'04: after performing a phase correction on a 2D the scale was automatically changed by the asaanpas routine. Now this has been replaced by simpelplot which only adjusts the x scale and not the y scale. affected routines: setphase2d 16-01-'04: the stack 1D routine was changed to incorporate an empty space between the slices in the 1D stack plot. affected routines: stack1d 16-01-'04: There was a small bug in stack1d: it used the variable QRincr1 to see what the increment in the current axis vector is, instead of QRincr. That meant that doing a stack plot starting from TD1 did not work properly in many cases. affected routines: stack1d 16-01-'04: Now the stack1d routine tries to avoid crowding of the tick labels by limiting the number of decimals to 2. This is only done when there are decimals. affected routines: stack1d 16-01-'04: the QuiInput routine (creates most input windows in matNMR) has been extended by a function that allows to make the current input window the full width of the screen size. This is useful when the original window was too small and certain uicontrols cannot be fully read because of this limited window size. The same functionality has been added to the axis/title routines klabels and clabels and the legend routine for the main window. affected routines: QuiInput, klabels, clabels, Qezlegend 16-01-'04: The show sidebands function has been moved to the "plotting functions" submenu in the "plot manipulations" menu. affected routines: matNMR1DButtons ============= !web release! : january 16 2004, version 3.1 ============= 20-01-'04: Added the possibiltiy of changing the axis labels individually to the "plot manipulations" menu in the main window. This is additional to the normal menu. affected routines: matNMR1DButtons 20-01-'04: changed the "stop matnmr" button in the main window into "close window". Also, the option has been changed in the menubar, while an option "stop matnmr" has been added to the menubar. This way the main window can be closed without the 2D/3D viewer windows being affected. If no 2D/3D viewer window is open then "close window" and "stop matnmr" do the same thing. affected routines: matNMR1DButtons, stopnmr, stopmatnmr, matNMR2DButtons 20-01-'04: the default axis setup did not yet include the definition of the sign of the gyromagnetic ratio. As this is important for the direction of a frequency axis this has been added. When switching the dimension in a 2D the gamma variable was not updated as this was never needed before. affected routines: matNMR1DButtons, GenerateMatNMRStructure, regelsave*, matNMRinitvars, whatgamma1d, whatgamma1d_2, GetDefaultAxis, regelgetcolumn, regelgetslice, viewrow, viewcolumn, checkinput1d, checkinput2d, makenew1D, makenew2D, regelUNDO, doUnDo 20-01-'04: the concatenate routine did not preserve the QFIDstatus variable when concatenating a 1D into a 2D matrix. Also it did not do a 1D -> 2D concatenation when starting from a 2D and selecting the "concatenate matrix" from the "1D processing" menu. affected routines: regelconcatenate 20-01-'04: the getslice and getcolumn routines have been renamed to askgetslice and askgetcolumn to comply with general naming of routines. affected routines: matNMR1DButtons, getslice, getcolumn 20-01-'04: the makenew2D routine did not set the flag for whether or not to use the default axis for the current slice and so the value for TD2 was not used, and even overwritten by the subsequent call to asaanpas. affected routines: makenew2D ============= !web re-release! : january 16 2004, version 3.1 as the previous changes were important to the default axis setup. ============= 20-01-'04: The SIMPSONread did not scale the spectral width in TD1 to kHz affected routines: SIMPSONread 20-01-'04: The SIMPSON ASCII reading routines did not properly add the new name to the list of known names. affected routines: regelsimpsonasciilaad* 20-01-'04: until now the spectral width in TD1 was not adjusted to half it's original value after TPPI and Bruker qseq Fourier Transforms. Now it is. Note that this assumes that the user provides the true spectral width for an FID, i.e. 1/dwell --> add notice to manual! affected routines: four1d, four2d 20-01-'04: there was a typo in the regelUNDO routine which prevented the spectral width in TD2 to be recorded correctly. Instead it showed the spectral width in TD1 twice. affected routines: regelUNDO 21-01-'04: when starting matNMR using nmr followed by opening the 2D/3D viewer, followed by closing the main window and restarting it, the main window would not appear back correctly. This was because the figure window sizes were not set back to values in units of pixels. This is normally done in matNMRinitivars during startup but is circumvented when starting the main window after the 2D/3D viewer. This problem arose because now both windows can be opened independently, which wasn't possible before (see change 20-01-'04, stopnmr issue) affected routines: nmr 21-01-'04: A button was added to the 2D/3D panel window to allow opening the main window. affected routines: matNMR2DPanelButtons 22-01-'04: executing the stack1d while reprocessing from a macro did not work properly because the dimension was set to 0 before saving the history, the x-limits weren't stored in the macro (only when recording the macro), the x and y limits weren't set properly in the RunMacro routine. affected routines: stack1d, RunMacro 22-01-'04: in the change of 20-01-'04 where the gamma was made included into the default axes setup the makenew?d routines were changed such that the value was always reset before the checkinput?d routines. This is annoying as it means that the value does not stay constant between loading FID's, unlike the spectral width and spectrometer frequency (unless they are specified for the new FID/Spectrum obviously) affected routines: makenew?d 26-01-'04: a simple line plotting option has been added to the "plot manipulations" - "plotting functions" menu in the 2D/3D viewer. affected routines: matNMR2DButtons, asknameline, regelline, displine, regelplotseriesline 26-01-'04: whenever changing the tick labels from the "plot manipulations" menu, using the regelticklabel routine, the input could not be a variable with the tick labels in them. Now, first it is checked whether the input is a variable in the workspace and if so then the variable is evaluated. If not then the input is taken literally, as before. affected routines: regelticklabel 30-01-'04: the matprint routine did not allow for opengl rendering yet. This has been added to the popup button in the matprint window. affected routines: matprint 03-02-'04: whenever plotting a relative contour plot with all contour levels set to 0, an error message would appear to prevent the contour routine from crashing. This has now been replaced by a warning message stating that no spectrum will be drawn. Furthermore, the axis will be cleared. affected routines: calccontlevels, dispcont 03-02-'04: the descriptions in the input window for changing the positions of the axis locations in a plot were incorrect. affected routines: askaxislocations 04-02-'04: the "get position" routine in the main window would produce an error whenever scanning a flat line. This was due to the interpolation routine. affected routines: crsshair 05-02-'04: a feature was added to the plot manipulations menu in the main window and the 2D/3D viewer window: now it is possible to change the axis position for the current axis. This can be useful when resizing the window and finding out that some text has not been scaled appropriately with it and now sticks out of the axis (happens with legends for example). Now the position can be changed directly. Changes to the axis position are NOT reversed by the "reset figure" button in the main window. Currently, only the "reset after error" does that. Should this be changed? affected routines: matNMR?DButtons, askaxisposition, regelaxisposition 10-02-'04: there was an bug in the regelzero2d routine concerning the history macro: the ranges of rows/columns weren't fed correctly into the AddToMacro routine because of incorrect indexing into empty vectors. This has been corrected. affected routines: regelzero2d, AddToMacro 18-02-'04: the crsshair routine did not like it if the FID/spectrum contained NaN values (see also change of 04-02-'04). This has been changed. Affected routines: crsshair 18-02-'04: when switching from display mode "both" to another mode then sometimes the spectrum would be reversed. This was due to the fact that the CheckAxis routine was not performed before the simpelplot. See also change of 22-12-'03. As a precaution all other places where simpelplot is used have been check to see if the CheckAxis is run properly. Affected routines: regelRI, shiftFFT2d, setphase2d, detsovern, apodize?d 18-02-'04: The default shading for 2D raster plots has been changed to "flat". That way the plot cannot become invisible due to raster lines, when choosing a high density. Affected routines: dispraster2D 18-02-'04: The 2D raster plot did not use the variable QcontspecPlot for plotting but Qcontspec, meaning that sometimes the spectrum would not be in the right position (flipped l/r and/or u/d, compared to all the other plotting routines in the 2D/3D Viewer). The same was found to be true for the polar plotting routine. Affected routines: dispraster2D, disppolarplot 18-02-'04: The handles for the colorbars were not stored in the userdata of the figure by the regelcaxis routine, causing errors when trying to access the handles later on. Affected routines: regelcaxis 20-02-'04: The routines that handle the setting of title and axis labels interfered with each other. Now, the necessary object handles are stored in the userdata of the figure window. These are read every time so no interference can occur. Some unnecessary lines have been taken away from the two routines. Affected routines: clabels, klabels 20-02-'04: the routine that handles the changing of the axis rulers (stats2d) sometimes did not show the options for the types of axes available. This was because it uses the same variable as that used by the main window and since new options have been added there, this could give problems. Now it is possible to have time axes in the 2D/3D viewer as well. Furthermore, the routine for the 2D/3D viewer no longer uses the same variable as the main window does so in future the same error cannot appear again. Affected routines: whataxis2d, scale2d, regeltimeaxis2d, matNMRinitvars, stats2d, regelaxis2d, prescale2d 20-02-'04: When reading in a new 2D spectrum the default axes in both dimensions would not be defined until changing the dimension. For TD2 this was no problem as it would be defined by asaanpas anyway, but for TD1 this meant the default axis would not be defined yet. Now the checkinput2d routine defines the default axes, if necessary. Affected routines: checkinput2d 01-03-'04: The zero frequency for the default frequency axes was not correct. It was shifted by one grid point. Affected routines: GetDefaultAxis 01-03-'04: The spectrum was not plotted correctly after doing an undo during baseline correction. The CheckAxis routine was run before the Qspcrel routine in stopbasl2d. Affected routines: stopbasl2d 01-03-'04: A strange error message was obtained when I tried to read a series of binary FID's and in one of the directories the data file was missing. Now, an error message is produced that tells the user which file cannot be found. Affected routines: QReadParameterFiles 01-03-'04: When changing the axis ruler on a spectrum the zoom function is switched off whenever a mouse input is required. Annoyingly it wouldn't be switched back on afterwards, which has now been changed. Affected routines: scale1d, prescale1d, matNMRinitvars, regelppm1d, regelhz1d 03-03-'04: The spectral width in TD1 wasn't set properly by the undo function; it used the value for TD2 instead of TD1. Affected routines: doUnDo 03-03-'04: Before getting the default axis in a dimension, the QFIDstatus variable wasn't set by the checkinput2d routine. This caused that in some cases the axis in TD1 was in the default unit for the frequency domain. In most circumstances this wouldn't be noticed as upon going to TD1 (e.g. by selecting a column) the proper axis would be loaded. A routine like regelextract2d, did however show the problem in such cases. Affected routines: checkinput2d 03-03-'04: The extraction of part of the spectrum did not work properly when executing a macro, because the default axes weren't properly defined at the point where the extraction routine was started. Normally this is taken care of by the asaanpas routine during processing, but since that is not executed during macro's this problem could arise. Now, the default axes for both dimensions are determined before executing the extraction, if the flag variables are set accordingly. Affected routines: RunMacro 04-03-'04: An old annoyance has been taken away: the matprint routine used to discard all user-added text when it updated the command string (which happens when any button is touched). Now the routine determines what part is user-added and appends it to the updated command line. This is only done, however, when nothing has been changed to the part of the command line that is done by matprint. If changes have been made, all user-added text is discarded as before. Affected routines: matprint 05-03-'04: The execution of macro's has become incorrect with the coming of the default axes. This is because the dimension-specific parameters like spectral width, gamma, frequency, etc, were not stored at each step. Previously that didn't really matter because any axis that is not in points needed to be defined manually, upon which the values would be properly set. Now that is no longer true and therefore these parameters are stored in the processing macro after each action. The way I have implemented it does cause some unnecessary overhead during the execution of macro's but it does however ensure that at all times the default axes are properly defined. Affected routines: RunMacro, AnalyseMacro, SetDimensionSpecificParameters, historyFT, regelsize2d, regelleftshift, regelswapecho, shiftFFT2d, flipspec, historyapodize, regelzero2d, convertBrukerqseq2d, regelconvertBruker, regelconvertVarian, defstates, regelconcatenate, setphase2d, symmetrize2d, regelshearingTD, stopbasl2d, regelsetintegral2d, regelshearingFD, regellp2d, transponeer, regelBrukerdig, DCcorr2d, regelsolventsuppression2d, regelextract2d, shiftFFT1d, regelsize1d, stopbasl1d, scale1d, convertBrukerqseq1d, DCcorr1d, regelsolventsuppression1d, setphase1d, regellp1d, regelextract1d 05-03-'04: The AddMacro deleted entries with indexes higher than 200 because that is needed by some functions. By doing that it also took away user-defined commands from a macro, which is not good. This has been corrected. Affected routines: AddToMacro 08-03-'04: when reprocessing a macro and executing an FT, the Qfftstatus variable wasn't updated in its UIcontrol in the main window. Affected routines: RunMacro 08-03-'04: Manual baseline fitting (in 1D mode) was not added to the macro when recording a macro. (although it was added to the history macro). Affected routines: stopbasl1d 08-03-'04: the flag for being busy with phase correction was not cleared when performing an undo action, causing problems when trying to process the data further. Affected routines: doUnDo ============= !web release! : march 9 2004, version 3.1.37 ============= 10-03-'04: The current row and column numbers have been added to the dimension-specific data that are now stored in the (history) macro's (see change 05-03-'04). This means that the view after reprocessing should be the same as it was after the first time. Affected routines: SetDimensionSpecificParameters, transponeer, symmetrize2d, stopbasl2d, shiftFFT2d, setphase2d, regelzero2d, regelswapecho, regelsolventsuppression2d, regelsize2d, regelshearingTD, regelshearingFD, regelsetintegral2d, regellp2d, regelleftshift, regelextract2d, regelconvertBruker, regelconvertVarian, regelconcatenate, regelBrukerdig, historyFT, historyapodize, flipspec, defstates, DCcorr2d, convertBrukerqseq2d 10-03-'04: With the new dimension-specific information added to macro's the stepwise reprocessing of a baseline correction has become faulty. This was due to the construction used for defining the peaks in the spectrum (which are subsequently not fitted into the baseline). Affected routines: AnalyseMacro, RunMacroStepwise 10-03-'04: The dual display was sometimes incorrect in that it showed the additional spectrum flipped from left to right. This was because the spectrum was not always ensured to be a row. Affected routines: checkinputdual 11-03-'04: The scale1d routine did not distinguish between the various dimensions when adding the dimension-specific data to macros. Affected routines: scale1d 15-03-'04: A bug was found under Macintosh that relates to the directory separator character. So far matNMR assumed ":" for Macintosh but MATLAB 6.5 uses "/". I found that the standard MATLAB m-file "filesep" produces the correct separator character. This existed already in MATLAB 5.2 so I assume that the use of this function should not interfere with users running matNMR on older MATLAB versions. Affected routines: regelBrukerSpectraread*, regelmatlaadSeries, regelQfidread*, regelsimpsonasciilaad* 17-03-'04: The flag variables for the default axis have been added to the Undo matrix. Affected routines: doUnDo, regelUNDO, GenerateMatNMRStructure 17-03-'04: The peak picking routines have been rechecked for functionality and bugs were found that relate to new features. -Replotting the peak list in a contour plot had become faulty due to a change which interfered with the restorepeaklist routine (used the same temporary variables). -Also, the indexing in the restorepeaklist routines was incorrect. It used to work in older version of MATLAB (although probably produced a warning even then), but in version 6.5 it produces an error. -The default fontsize of the text labels was 8 which is very small on PC's. Now the default font size of the axis is used. -The peak picking didn't always work properly with axes that were not in points. This was because the coordinates weren't sorted by the GetPeaks routine. -The peak list wasn't always cleared when loading a new spectrum. -The scale2d routine called the plotcont routine when changing the axis rulers, which in turn called the restorepeaklist routine. This intefered with the proper restoring of the peak list in case the spectrum was loaded from a matNMR structure. Now a flag is set in scale2d, which determines whether the restorepeaklist routine is executed from the plotcont routine. -Asking for a new name to save the spectrum + peak list in the workspace was only done when the variable name is 'QFT1', but not for other strings that do not exist (e.g. "rand(30)"). Now this has been changed. Affected routines: scale2d, restorepeaklist2, restorepeaklist3, GetPeaks, dispmesh, displine, dispbar, disppolarplot, dispraster2D, dispstack3D, asksaveliststructure 17-03-'04: To resolve a known issue with the scale2d routine, the type of plot of each axis is now stored in the userdata of each 2D/3D viewer figure. The issue relates to the fact that when changing the axis rulers the scale2d routine implicitly assumed a contour plot. And so when replotting the spectrum the plot type might change. Now, the plot type is stored and the scale2d routine handles the situation accordingly. Also, from now on changing of the axis rulers is not allowed for polar plot, bar plots and line plots as they are all highly specific plots (checked by stats2d). Affected routines: scale2d, Subplots, plotcont, dispmesh, dispstack3D, dispraster2D, disppolarplot, dispbar, displine, stats2d. 26-03-'04: The "reset figure" routine did not change the view to [0 90]. If the view had somehow be reset by some external action then there was no way of returning to the proper display. Affected routines: asaanpas 29-03-'04: Made some minor improvements to the legend routine in the main window: -The font units are now normalized so that when rescaling the window the fonts change with the window and the axis of the legend doesnn't need separate scaling. -The example line in the legend now has three points which makes it much easier to see the symbol that is connected to a certain line. -Previously, when closing the legend window the legend axes was the current axes, making it necessary to first click on the main axes (with the FID/spectrum) if one wanted to make changes from the "plot manipulations" menu. Now this has been solved. -The positions of the sample lines and the text have been altered slightly for esthetic purposes. Affected routines: Qezlegend, Qlegend 29-03-'04: A transpose was performed incorrectly by the dual display routine, causing the imaginary part to be inverted, instead of the column converted to a row. (i.e. used "'" instead of ".'") Affected routines: checkinputdual 29-03-'04: Saving into the workspace of time and gradient axes did not work properly. Affected routines: scale1d 02-04-'04: The States-TPPI Fourier transform in TD1 was screwed up. In effect no FT was done at all. Affected routines: four2d 02-04-'04: Made a small change to the manual concerning how to process States-TPPI data in matNMR. It was unclear that this follows exactly the same actiona as normal States processing. Affected routines: Processing.html ============= !web release! : april 2 2004, version 3.1.51 ============= 26-04-'04: The "Get Integral" function in the 2D/3D viewer did not give the proper integral for certain axes. Since the extracted coordinates weren't sorted the integral would then be zero. Now a sort is performed. Affected routines: Integrate2D 26-04-'04: When changing the nr of the slice to view in the peak fitting routine, i.e. when fitting an array of 1D spectra, the spectrum sometimes flipped from left to right for certain axes. This has been corrected. Also, this functionality was never intended to show the changes in parameters when changing the view number. Now this has been added. If the data has been fitted then the parameters will be changed and the corresponding fit will be shown. When changing the slice number or doing a "refresh" the previous lines in the plot would not be removed, causing massive overlap. Now this has been fixed. Affected routines: peakfit 30-04-'04: When doing a dual plot using a spectrum, stored in a matNMR structure, then there could arise a problem if the spectrum was saved while working with a default axis. Since the dualdisp routine did not recreate default axes it would try and apply the current axis vector to the new variable, which often fails. Now, the routine recreates the default axis, if that is the current mode, and will only apply the current axis vector if the variable was NOT stored in a structure or if the current spectrum is not in default axis mode. Affected routines: checkinputdual, GetDefaultAxisDual 04-05-'04: A few routines had used the function 'strfind'. This is very similar to the function 'findstr', which was used so far in matNMR, and can usually be interchanged. The only problem is that it is a function that was introduced after Matlab 5.3 and so this created compatibility problems. Now the 'strfind' has been replaced by 'findstr'. Affected routines: askfidlaad*, QReadParameterFiles 04-05-'04: The 1D FT setting for "whole echo" used a real FT instead of a complex FT. Affected routines: four1d 04-05-'04: From now on the multiplication by 0.5 is never done before an FT, if the setting for FT is "whole echo". Affected routines: four1d, four2d 04-05-'04: There was massive interference between the MoveAxis and the zoom routines in the 2D/3D viewer window. Whenever one tried to move the SuperTitle whilst the zoom was turned on, this would lead to strange results. Now this has been diminished (not completely solved!) by first switching off the zoom when trying to move the SuperTitle. When the user keeps the mouse button pressed then at first the rubberbox from the zoom will appear but as soon as the button is released, the zoom is switched off the and the MoveAxis takes over. Affected routines: Subplots, whereamicont, contzoomOFF 04-05-'04: So far the dual display routine did not set the "userdata" property of the "zlabel" in the current axis, after changing the view to accomodate the additional plot. That meant that the zoom would return to an ackward view when double-clicking. Now the proper width is always maintained. Affected routines: dualdisp 07-05-'04: The line tag wasn't correct after switching from 2D to 1D mode. It would use the previous line tag for 1D mode. Now a new routine is called, called SwitchTo1D, which is used by all other 1D processing routines and which sets the proper variables. Affected routines: SwitchTo1D, convertBrukerqseq1d, regelBrukerdig, regelleftshift, regelswapecho, DCcorr1d, regelsolventsuppression1d, regelsize1d, four1d, shiftFFT1d, flipspec, regelconcatenate, regelextract1d, basl1dmenu, regellp1d, 07-05-'04: From now on the routines that allow saving variables into the workspace or to disk will use the line tags to provide the name of the variable in the workspace. Previously the last-used variable name (QspctC) was used for that. This way one doesn't get the confusion of seeing the last variable name for a 2D, when you're trying to save a totally unrelated 1D. Affected routines: asksave?d, asksavedisk?d. 07-05-'04: The display mode "both" has been altered. Previously the real and imaginary parts were glued together. Now they are separate lines. This has the advantage that there is no connecting line between the two buffers. Also, now asaanpas is not only used when selecting mode "both" but also when DEselecting this mode. Affected routines: regeldisplaymode. 07-05-'04: The warning message given whenever the axis increment of a dual display vector is opposite that of the current spectrum (see change 28-10-'03) has been changed. Previously it said that the plot could be incorrect. This was not true. Now it only mentions the fact that the "get position" routine will not function correctly. Affected routines: CheckAxisDual. 07-05-'04: While apodizing, both the simpelplot and asaanpas routines executed the restorelb routine, which adds the apodization to the current spectrum variable Qspct2. This was not correct as this would lead to multiple apodizations if e.g. the "reset figure" button would be pressed several times. This meant however that the apodization was no longer executed properly, when selecting it from the UI control. Thus the restorelb was added to the apodization routine, which makes more sense all in all. Affected routines: simpelplot, asaanpas, RestoreMacro, apodize1d. 11-05-'04: The error messages in the QReadParameterFiles routine were misleading, which made it seem if matNMR was looking for parameter files in the wrong directory. Affected routines: QReadParameterFiles 11-05-'04: There is a MATLAB bug around which causes figure windows to be opened with very small heights so you don't see anything. It was shown to happen using Matlab 5.3 on Windows XP and possibly there are more offending systems. A workaround seems to be to specifically set the position and units after the line where the window was created, even though the position and units were defined in exactly the same way upon figure creation. To be sure all routines which open figure windows with defined sizes, regardless of whether they worked before or not, have been fitted with this workaround. Affected routines: Qoptions, matprint, basl?dmenu, Qlinedata, QezLegend, Qscreenops, matnmrhelp, pk_init, Diffpk_init, ?labels, stats?d, Qtextdata, Qfontops, matNMR2DPanelButtons, matNMR2DButtons, RunMacroStepwise, nmr 12-05-'04: A new function has been added to the main window: vertical stack. Although this function is not finished yet, and hasn't been added to the manual yet, it seems useful. It asks for a range in the other dimension of a 2D and then plots all the 1D's in the same axis, but each with their own vertical offset. This allows easy comparison of slices. A notice is given when this routine is called to mention that it is still being developed. Affected routines: matNMR1DButtons, matNMRinitvars, askstack1dvertical, stack1dvertical, regelviews ============= !web release! : may 13 2004, version 3.1.67 ============= 14-05-'04: The routine used for reading standard parameter files did not use a system-specific file separator but by default used "/". This caused problems on certain platforms running older versions of Matlab. Now filesep is used instead, in line with the changes made on 15-03-'04. Affected routines: QReadParameterFiles A proper search was done to scan for more occurences and these were changed as well Affected routines: Brukerlaad*, T1pk_init, pk_init, Diffpk_init, simpsonasciilaad*, regelsavedisk*, matNMR?dButtons, matlaad*, fidlaad* 17-05-'04: The change in zero frequency for the default frequency axis made on 01-03-'04 was reverted as it turned out to be incorrect. Now the Fourier transform of a cosine will produce two lines with equal frequency but of opposite sign. Affected routines: GetDefaultAxis, GetDefaultAxisDual 20-05-'04: After concatenating a 1D into a 2D, there would sometimes be an error message when resizing the matrix. This was because the regelconcatenate did not create the hypercomplex matrix QFT2 and so the regelsize2d tried to access the non-existent, or incorrectly-sized, QFT2. As it turned out, also for 2D's the QFT2 matrix wasn't updated. Now this is concatenated in the same direction as QFT1. Affected routines: regelconcatenate 20-05-'04: The GetDefaultAxisDual routine would produce an error for PPM scales because it tried to use the standard axis variable Qtempvec1d, instead of the proper variable Qdualaxis. Affected routines: GetDefaultAxisDual 20-05-'04: The FT in TD1 was checked to see whether the zero frequency of the default axis would be correct. This was not the case as the spectra were not flipped L/R, whereas they are in TD2. To correct this the real, complex, states and states-TPPI FT have been changed such that they do flip the spectrum after the FT. The FT's for TPPI have not been altered. Affected routines: four2d 21-05-'04: The "get position" routine crashed whenever there were more than 9 lines in the current plot in the main window. This was due to crummy programming. Maybe I should look over such pieces of external code once and update them. Affected routines: crsshair 23-05-'04: The display mode "both" crashed when loading a very short FID in points, if the tick marks covered each data point. Then the asaanpas routine would create twice the same entry in the vector with the tick marks and this would cause an error. In part this error was due to the fact that the range calculated by asaanpas was incorrect and thus caused the error message. But, also the width in the x direction QtotaalX was not calculated properly by DetermineNewAxisLimits. The change of 07-05-'04 was not checked properly. Affected routines: asaanpas, DetermineNewAxisLimits 01-06-'04: There were two copies of the GPL text file present in the source directory, one called gpl.txt and the other one calle GPL.txt. As usual whiny Windows doesn't like that and so I have deleted the GPL.txt file. Affected routines: GPL.txt 01-06-'04: After a complaint I have added a short notice in the manual on how to install matNMR on UNIX for a single user only. Previously it only described how to do it globally, which required superuser status. Affected routines: Installation.html 02-06-'04: The checkinputcont routine ran a check on the length of the axes for TD2 and TD1 in a matNMR structure if only one variable was given in the input window. It did this simultaneously however, discarding both axes if one was of incorrect length (i.e. of a different size than the corresponding dimension in the spectrum). Now it does it separately so that it will take one axis even if the other one is incorrect or not present. Affected routines: checkinputcont 02-06-'04: The default UI font size has been set to 7 for Windows and MAC. This shouldn't be used since users are supposed to set up matNMR once by going through the options menus, but anyway this should be better. Affected routines: matNMRinitvars 02-06-'04: The x-axis limits for the 1D bar plot were changed in the maind window. Before the limits were the same as for a normal plot, but that meant that the first and last bar were only shown half. Now 1 axis increment is taken before the first bar and one after the last one to ensure all bars to be seen in full. Affected routines: regelmake1dbar 02-06-'04: An incorrect transpose (complex conjugate transpose "'") was used by the getcurrentspectrum routine. Affected routines: getcurrentspectrum 02-06-'04: A flag is now set for different types of plots in the main window. That way it is clear whether the current plot is normal (default), horizontal stack plot, vertical stack plot etc. This flag is being used by the dual display routine so that it can do fancy dual plots as well. Affected routines: matNMRinitvars, asaanpas, simpelplot, stack1d, stack1dvertical, regelRI 02-06-'04: Some more improvements have been made to the vertical stack routine: -standard variables for the input windows so the previous values are remembered. -repeated calling of the vertical stack routine caused incorrect vertical scaling. Now a "reset figure" is done before the vertical stack is calculated to ensure proper resetting of the plot to the default plot type. -feature now also works for TD1. -it is automatically allowed to change the display mode, i.e. it is possible to select real, imaginary, absolute and power spectrum for the vertical stack plot. -the 1D stack plot has been renamed into horizontal stack plot. Affected routines: matNMRinitvars, askstack1dvertical, stack1dvertical, matNMR1DButtons 02-06-'04: The dual display routine has been changed such that it now recognizes the plot type and distinguishes between the various types in its actions. It is now allowed to do a dual display of a vertical stack plot. The routine uses the last settings used for the vertical stack plot. It also requires the matrix to be exactly the same size. NOTE: dual display of a horizontal stack plot has not been implemented yet. A notice is given in the command window. Affected routines: checkinputdual, dualdisp, asknamedual 02-06-'04: So far in the diffusion fitting routine one needed to enter the values for gamma, gradient spacing and gradient duration by hand, after pushing the "def pars" button in the window. Now the gradient spacing and gradient duration can also be read in from the parameter file "acqus", under certain conditions. If the data have been recorded using XWinNMR 3.0 or higher, using the standard diff script for setting up diffusion experiments, then this may be used. A note has been made in the manual about this and about the units that are expected for the gradient axis. This is in T/m (SI units) and since many people still use G/cm this must be made clear. Affected routines: MainWindow.html, regeldefparsDiff, Difffit 02-06-'04: The change made to readBrukerProcessedData on 29-10-2001 was not correct. It turns out that for various systems on which Bruker XWinNMR works, different byte orderings are possible, depending on which platform the spectra were processed. Before, the change was made from "native" byte ordering to "big endian" because data acquired and processed on SGI, and then transfered to a PC to work with matNMR, required "big endian". But now, different users have found problems. Therefore the byte ordering has been made optional in the corresponding input window. Affected routines: matNMRinitvars, askBrukerlaad*, regelBrukerSpectraread*, readBrukerProcessedData, MainWindow.html ============= !web release! : june 2 2004, version 3.1.85 ============= 03-06-'04: The files menu has been restructured such that all import filters are now in a submenu "Import". Additionally, a menu item "Export" has been added. Currently this only contains an export filter to SIMPSON ASCII format but may be extended in future. Affected routines: matNMR1DButtons, matNMRinitvars, asksavetoSimpsonASCII, regelsavetoSimpsonASCII 03-06-'04: Some of the default settings that matNMR changes before starting (settings routine) were not restored upon stopping matNMR. One of that was the warning state. This has been changed now. Affected routines: matNMRinitvars, settings 03-06-'04: A number of improvements have been made to the vertical stack plot: -It had not been connected to the processing history yet. -The x-scale was not conserved and so the entire width of the spectrum would always be taken instead of the current zoom limits. -the axis direction was not correct in some cases. -the warning message that this routine is still under development has been taken away. Affected routines: stack1dvertical, RunMacro, AnalyseMacro, askstack1dvertical 03-06-'04: Running a macro with a horizontal stack plot did not work correctly. Now the plot is always updated in stack1d even when running a macro. Also, the RunMacro routine shouldn't do an update of the plot whevenever the stack plot was the last command in the macro. This may hold true for other routines as well. Affected routines: stack1d, RunMacro 04-06-'04: A bug was found in the routines that generate axes in Hz, kHz and PPM, which resulted in frequencies being slightly off their correct values (1 data point). Affected routines: scale?d, GetDefaultAxis, GetDefaultAxisDual 04-06-'04: When changing row or column number in a 2D, the plot type would not be taken into account. This could lead to problems when changing the row/column number just after a stack plot has been made. The plot type should be reset to default then and the plot should be reset. Affected routines: viewrow, viewcolumn, regelgetslice, regelgetcolumn 04-06-'04: In an attempt to make the pull-down menus in the main matNMR windows shorter, they have been reorganized into a number of submenus. The manual should be changed for this as well! Affected routines: matNMR1DButtons, matNMR2DButtons 04-06-'04: The range specification for zeroing a part of a 2D was not stored well in the history macro. Previously only the start and end were stored. Now also the increment is stored. Additionally a warning message is issued if the range is non-linear, because then it will not be stored in the macro. Affected routines: regelzero2d, RunMacro, AnalyseMacro 04-06-'04: A routine was added that allows integrating a range in the current slice of the current 2D spectrum, but then do the same integration for the other slices in the opposite dimension. This is an extention of the integrate function for 1D spectra. Affected routines: matNMRinitvars, askintegrate2d, regelintegrate2d 04-06-'04: A serious bug was found in the phase setting routine: for hypercomplex matrices in TD1 the phase correction was in the wrong direction. The problem was resolved by having the proper transpose. As so often there was a conjugate transpose instead. This problem has arisen because of the change of 02-06-'04 in the getcurrentspectrum routine. A typical case of two bugs cancelling each other! Affected routines: setphase2d ============= !emmergency web release! : june 4 2004, version 3.1.95 ============= 05-06-'04: In an attempt to find more of the wretched incorrect conjugate transposes, I have done a search and found that symmetrize2d also used it (although there it's not crucial since only the real part is taken). Affected routines: symmetrize2d 08-06-'04: The readBrukerProcessedData routine used more memory than necessary. It used to first read in the data completely, before reordering it. Now it only reads in fragments the size of the blocking factor in TD2. Affected routines: readBrukerProcessedData 08-06-'04: A button was added to the 2D panel in the main window that allows direct access to the full matrix processing functions, similar to the one for single-slice actions. Affected routines: matNMR1DButtons, regelfullmatrix, stopmenu2d, v2dmenu, regelstandardprocessing, v1dmenu, stopmenu1d 09-06-'04: When trying to extract part of a 2D it was possible to obtain an error message because if the coordinates were larger than 10000 then the num2str would make an exponential out of it. Now the precision has been set to 10 digits, which solves the problem. Affected routines: regelextract2d 09-06-'04: An option was added to the goodies menu, which allows to change the matNMR distribution you want work with. This is only useful for people who have multiple distributions running, which is usually only for testing purposes. This will change the path variable, stop matNMR and restart it. No safety options have been built in to make sure users don't accidentally lose all their work. Affected routines: matNMR1DButtons, selectdistribution. 17-06-'04: A bug was found in the routine that creates an axis in points in the main window. It would not ask for a variable name for the axis to be stored in, but would still save the axis if a variable name was previously defined (e.g. by creating an axis in PPM). Now the variable QUserDefAxis is always cleared so it is never possible to save an axis in points into the workspace. Affected routines: regelpointsaxis1d 21-06-'04: The routines that deal with adding a series of variables have been extended such that it is now possible to tell the routines whether the spectral parameters of the first variable in the range must be retained for the new variable. This saves reentering the SWH and SF and stuff. Affected routines: matNMRinitvars, askaddvariabes, regeladdvariables, addvariables 21-06-'04: Matlab version 7.0 is now recognized by matNMR. Affected routines: matNMRinitvars 28-06-'04: There was a bug in the reprocessing from history when going from a 2D to a 1D mode. This would not always preserve the correct slice from the 2D. Now before going to the 1D mode the dimension specific information is stored once more in the macro and an update of the current slice of the 2D is forced. Affected routines: SwitchTo1D, RunMacro, AnalyseMacro 28-06-'04: The reprocessing from history of a "sum TD2" did not work because the routine for "sum TD1" was called instead. Affected routines: RunMacro 28-06-'04: The routine that deals with adding variables now shows the last variable name in the input window if the routine hasn't been used before. This is useful when one has just imported a series of spectra. Affected routines: askaddvariables 28-06-'04: Two annoying features were removed from the peak fitting routine: -when doing a refresh to upload the current 1D or 2D spectrum from the main window, the current slice would not be preserved in case of a 2D. -when doing a refresh to upload the current 1D or 2D spectrum from the main window, the routine would determine what the current mode is (1D or 2D) and then upload the 1D or 2D spectrum completely. Often however one likes to fit only one slice from a 2D. Starting the routine from the 1D menu in the main window will take only the current slice. But doing a refresh then loads the entire 2D. Only by going into the 1D menu again of the main window would it be possible to get only the current slice. Now the refresh button is a popup button so one may choose between "refresh 1D" or "refresh 2D". Affected routines: peakfit, pk_init 28-06-'04: It is no longer allowed to do a flip L/R or an extract 2D while apodizing or phasing a 2D FID. Affected routines: askextract2d, flipspec 29-06-'04: A few more routines were cleared from the tiny bug described on 17-11-'03: the replacement of the "_" character in the title by "\_", whenever the title is the name of the current variable (see also change of 12-05-'03) Affected routines: stack1d, stack1dvertical, regelgetcolumn, regelgetslice 30-06-'04: The "bar 2D" routine has been changed slightly to become more similar to the one in the main window. Now, instead of asking for a linespec, it asks for a width and a colour. Affected routines: asknamebar, regelbar, dispbar 30-06-'04: The "add variables" routine always added the new name to the list of 10 last-accessed 2D variables, regardless of the size of the new variable. Now a check is done to ensure proper placement. Affected routine: regeladdvariables 30-06-'04: The "bar 2D" routine did not set the y scale properly in the 2D/3D viewer window as this was commented out when the routine was written. Now it does. Affected routines: dispbar 30-06-'04: The "1D bar" plot routine in the main window did not allow bar plots of any other display mode than real. Now all modes work except "both". Affected routines: regelmake1dbar 30-06-'04: A new plot type was added to the main window: errorbar plot. This is accessed from the plot manipulations menu and is consequently NOT a standard plot (see also the entry made on 09-10-'03 for bar plots). The input required for the errorbars is evaluated such that variable names may be given, even if they are matNMR structures. Affected routines: matNMR1DButtons, matNMRinitvars, askmake1derrorbar, regelmake1derrorbar 30-06-'04: More plot types can now be used in combination with dual display. These include the horizontal stack plot, 1D bar plot, error bar plot. All of them (except the vertical stack plot) allow the same scaling options as for the default plot type. Affected routines: matNMRinitvars, stack1d, dualdisp, checkinputdual, asknamedual 30-06-'04: The "1D bar" and "errorbar" routines in the main window did not reset the variable that denotes how many spectra are in the current plot, which in turn would give an incorrect line color when doing a dual display. Affected routines: regelmake1dbar, regelmake1derrorbar 30-06-'04: The title was not preserved by the "reset after error" routine. Affected routines: ResetAfterError 30-06-'04: An annoying bug in the WYSIWYG printing has probably been solved: sometimes after printing the axis in the main window was slightly distorted in the sense that it no longer shows the title and axis label. Note 13-05-'04: the problems seems to be that after resizing the window the axis labels and titles, which usually have units "data" (i.e. same as units of the vector that is shown in the plot), aren't updated properly to account for changes in the axis limits. It's as if there is a hidden flag or property which keeps track of whether this is done automatically or manually, but we can't see it. And so when you rescale a figure the axis labels and title just move along with the limits that you set. Highly annoying .... Deleting the object and then calling e.g. "xlabel('string')" will correct the problem. It seems that the changing of the "units" property of all text objects was not only unncessary but also damaging as this created the problem. Affected routines: matprint 30-06-'04: The routine that stops the recording of macros did not check whether a macro was being recorded in the first place. Affected routines: askstoprecordingmacro 30-06-'04: A 7x7 grid of sub plots has been added to the 2D/3D viewer Affected routines: matNMR2DButtons, Subplots 01-07-'04: The default axis in kHz for gamma>0 for a dual plot was not correct as it still used the incorrect division as described by the entry on 01-03-'04. Affected routines: GetDefaultAxisDual 01-07-'04: When switching from a 2D to a 1D mode, some parameters are taken over. One is the name of the variable that produced the current line. When running a macro the routine that deals with this change was not called which meant that the name was not taken properly, which is a minor nuisance. Affected routines: SetDimensionSpecificParameters 01-07-'04: Reprocessing from history of a user-defined command was scrappy. It did not go back to the corresponding routine (regelusercommand) but executed the command directly in RunMacro. This caused problems because then the history would not be written again for that action. Now it is done as for all other routines, i.e. the regelusercommand routine is called. Affected routines: RunMacro 01-07-'04: The extraction of a range in the current 1D was not stored properly in the history macro. Instead of saving the range in the units of the current axis it was saved in points, which caused errors for any other axis than points. Affected routines: regelextract1d 02-07-'04: The add variables routine can now normalize the new matrix by dividing by the total number of added FID's/spectra. Affected routines: addvariables, askaddvariables, regeladdvariables, matNMRinitvars 02-07-'04: The standard routine for making errorbar plots has been imported into the matNMR code to allow some small changes. Now the line between the errorbars is not drawn in 1 part but in three. The first two parts of the line cover the part that is positive, the third part does the rest. The positive parts are useful if one wants to make a logarithmic scale, because that type of plot won't show negative intensities. Affected routines: regelmake1derrorbar, errorbarMatNMR, copymat 02-07-'04: Two new functions have been added to the main window which allow manipulation of a series of variables with common name. These are a function that normalizes the series to equal maximum or equal integral, and one that allows concatenation of the series into a new matrix. All three series functions have been added to a new submenu in the "files menu" called "series trickery". Affected routines: matNMRinitvars, matNMR1DButtons, asknormalizevariables, regelnormalizevariables, askconcatenatevariables, regelconcatenatevariables 02-07-'04: When reprocessing from history the size of the spectra as stored in the macro was a limitation of that macro to spectra of exactly the same size. Now the size is stored only, in case of a 2D, if there was a change in that particular dimension. For 1D's the action is only performed (and hence stored in the history) if the size is different from the current size. Affected routines: regelsize1d, regelsize2d, RunMacro, AnalyseMacro 03-07-'04: I have started to add support for 3D variables in the main window. It is not intended to allow 3D processing but to allow efficient processing of series of 2D datasets. Especially ones that all require the same processing and so a single macro can be used. This comes in handy for processing simulations etc. A new window will be openened whenever a 3D is detected by the regelnaam routine and in this window one must specify the input variable name and an output variable. In order to limit memory usage the 3D will not be stored separately by matNMR but instead it will use the names of input and output variables to work with. In this window the user may specify which 2D needs to be shown in the main window, whether the current spectrum needs to be stored now (depending on the processing mode this will produce either a 2D or a 3D output matrix!), and a macro can be started for all 2D's in the series. Furthermore a button with the last 10 3D datasets will be there which can be used to load a new 3D dataset. -the "concatenate series of variables" now has a third option "along 3rd dimension". This is not supported in the "concatenate" options in the 1D and 2D processing menus! -the makenew?d routines automatically jump to makenew3d if needed, which will open the window. -the current 1D or 2D is stored in the 3D upon changing of the 3D index, for which there is an edit window and increment/decrement buttons. -the checkinput2d routine needed to be updated for a check in which it compares the sizes of the spectrum and the hypercomplex part in a matNMR structure. Now it first checks the number of dimensions for each matrix. -a check is done to ensure that only processed data are stored in the output matrix. If the size of the processed data is not the same as the size of the output matrix then storage is refused! Affected routines: askconcatenate, askconcatenatevariables, regelconcatenatevariables, checkinput?d, regelnaam, askname, putinlist3d, matNMRinitvars, matNMR1DButtons, makenew3d, regel3d, matNMR3DButtons, regeloutput3d, askexecutemacro3d, regelexecutemacro3d, view2d, checkinput2d 03-07-'04: The full version number of matNMR is now shown, so e.g. "3.1.95" instead of "3.1". Affected routines: matNMRinitvars 03-07-'04: The highly annoying feature that closing the main window would be exceedingly slow has been partially solved: a "clf reset" was done in the routines that close the main window and this deletes each object separately, which would be a problem when working across a network. The closing of the window is now fast but somehow X, ssh and Matlab still need about half the time, and this is still quite long unfortunately. Affected routines: stopnmr, stopmatnmr 05-07-'04: Until now the parameters last used for saving a variable were not re-used. This was deliberate but still I have decided to change that. Affected routines: matNMRinitvars, asksave?d, asksavedisk?d, regelsave?d, regelsavedisk?d 05-07-'04: The input for the errorbar vector may now contain names of matNMR structures. This is replaced by the appropriate ".Spectrum". Affected routines: regelmake1derrorbar, checkinputerrorbar, dualdisp, checkinputdual 05-07-'04: The routine that deals with changing the tick positions in the "plot manipulations" menu now also allows setting the tickmodes back to auto. This means Matlab will set the tick positions as it deems fit. Affected routines: asktick, regeltick 05-07-'04: When starting matNMR the window would not be quite finished yet as it would resize itself. Now the window stays invisible until everything is ready and a "drawnow" has been executed. Affected routines: nmr, matNMR2DButtons 05-07-'04: Doing a dual display using a vector of length 1 gave an error message due to the determination of the non-existent axis increment. Affected routines: CheckAxisDual 05-07-'04: Doing a dual display of an errorbar plot using a vector of length 1 did not give a proper errorbar because the standard routine uses the x-range of the data to determine the width of the bars. Now the current value for the xlim property is used in that case. Affected routines: errorbarMatNMR 05-07-'04: The errorbar routine was overly sensitive to the marker and line types not being deblanked by the routine handling the line properties from the options menu. Now the variables are deblanked. Affected routines: Qlinedata 07-07-'04: The horizontal stack plot has been changed to conform to the way the vertical stack plot was implemented. Since they are both special plots, the processing isn't changed and pressing "reset figure" will delete them. So far this was not the case for the horizontal stack plot. The routine has also been renamed from "stack1d" to "stack1dhorizontal". Affected routines: stack1dhorizontal, regelviews, matNMR1DButtons, RunMacro 07-07-'04: The CheckVariableName routine, used for checking whether a string makes a good variable name in the workspace, produced an error whenever the string evaluated to a matrix. It could deal with vectors but not matrices. Affected routines: CheckVariableName 12-07-'04: An age-old annoyance has been solved: when working with multiple 2D/3D viewer windows it could be a hassle to switch windows because it was required to click inside a particular window to force matNMR to switch. And clicking on axes which are being used by rotate3d to allow 3D rotation, do not allow clicking in an axis. Now the window is switched also when accessing any function in the menubar. This also means that closing 2D/3D viewer windows from the menubar is no longer dangerous! Affected routines: UpdateFigure, SelectFigure, findcurrentfigure, matNMR2DButtons 13-07-'04: When making a plot of a 3D matrix in the 2D/3D viewer, matNMR automatically tries to plot it as a series of 2D's in the available subplots. So far the title of these plots would show the temporary name as produced to the plotting routine, which would be unintelligble for the user and always needed replacing by the user. Now the title of each subplots is just the index number and a super title is created which shows the name of the 3D variable as entered in the input window by the user. Affected routines: regelplotseries* 14-07-'04: A feature was added to the routine that allows editing of text objects in the 2D/3D viewer: now the text object may be centered relative to the axis it belongs to. Affected routines: askedittext, regeledittext 15-07-'04: From now on a box is drawn around the axis of any surface plot in the 2D/3D viewer IF the elevation and azimuth are set to 0 and 90 in the input window, respectively. This saves switching on the box for printing (is what I usually do). Affected routines: dispmesh 15-07-'04: From now on a box is drawn around the axis of any plot in the main window. This saves switching on the box before printing (is what I usually do). Affected routines: asaanpas, stack1dhorizontal, stack1dvertical, regelgetcolumn, regelgetslice, regelmake1derrorbar 15-07-'04: When entering a negative value for the order of 2D baseline correction an error message would appear because matNMR would try and correct the value and try to write the result in the incorrect object. Simultaneously the correction has been changed from 0 to the absolute value of the entered value, Affected routines: doebasl?dcor 15-07-'04: Entering a non-linear axis in the main window could sometimes give an error message because the routine that checks the zero point and increment of the axis (detaxisprops) didn't check whether the axis is linear or not. Now for non-linear axes only the sign of the increment is determined to make sure the plotting direction is correct. Affected routines: detaxisprops 15-07-'04: A bug was found in the routine that changes the color axis in the 2D/3D viewer window: an error would appear if a color bar was present in the current axis because an incorrect variable was used. Affected routines: regelcaxis 15-07-'04: The default behaviour of the MATLAB pseudo-color routine has been improved: by default the last row and column of a matrix are not shown by the pcolor routine. Now the matrix and the axis vectors are first expanded by 1 point is each dimension to avoid that. Furthermore the tick labels are now set in the middle of each coloured square, whereas be default they would be written at the beginning and end of each block. Affected routines: dispmesh 22-07-'04: The routines that allow adding a series of variables did not check whether all spectra in the series truly exist and aren't empty. Now an error message is produced if either occurs. Affected routines: regeladdvariables, addvariables 23-07-'04: The number of decimals for the spectral width would be truncated by Matlab when writing the value to the UIcontrol in the main window. Now in all instances the value is first converted to a string with 10 decimals and this is written in the UIcontrol. Affected routines: matNMR1DButtons, regelsweepwidth, apodize1d, asaanpas, doUnDo, getsweep1d, regelgetcolumn, regelgetslice, scale1d, SetDimensionSpecificParameters, viewcolumn, viewrow 23-07-'04: The spectral width would not be stored properly in the history macro after a 2D FT in case of a TPPI and Bruker qseq transforms because the spectral witdh would be halved before writing the history. Affected routines: four1d, four2d 23-07-'04: The zero frequency after a TPPI transform was not at 0, but instead shifted by 1 point. The correction comes at the cost of flipping the extracted part of the spectrum. This could and probably should have been fixed at the same time as the fix made on 20-05-'04. A similar change was made for the Bruker qseq (Redfield) transform. Affected routines: four1d, four2d 23-07-'04: After a Fourier transform matNMR always reverts to the default axis. As this wasn't calculated within the FT routines, which relied upon asaanpas to do that, this could give problems when reprocessing from history. Now the default axis is set there as well. Affected routines: four1d, four2d 25-07-'04: added a safety to prevent users entering a negative number of frequencies to use in the lpsvd algorithm Affected routines: regellp1d, regellp2d 25-07-'04: Have made a start with implementing the possibility of using the matNMR processing routines in user-written scripts directly. This will allow easy processing in scripts without the GUI being accessed. Various restrictions will be present but that shouldn't be an issue. All scripts will be functions and should not call any regular m-files, but only other functions. All the functions have proper syntax descriptions. They all start with "matNMR" followed by a descriptive name. Restrictions so far: fftshift shift, zero2D and baseline correction are not implemented Affected routines: matNMRLeftShift1D, matNMRSwapEcho1D, matNMRExtract1D, matNMRSetSize1D, matNMRFT1D, matNMRFlipSpec1D, matNMRLP1D, matNMRapodize1D, matNMRAxisProps, matNMRinitvars, matNMRdefineglobals, matNMRRunMacro, matNMRSetPhase1D, matNMRConvertBrukerqseq1D, matNMRDCcorr1D, matNMRRemoveBrukerDigitalFilter1D, matNMRSolventSuppression1D, matNMRConcatenate1D, matNMRSetSize2D, matNMRFT2D, matNMRLeftShift2D, matNMRSwapEcho2D, matNMRFlip2D, matNMRApodize2D, matNMRConvertBrukerqseq2D, matNMRReadBinaryFID, matNMRReadSIMPSONASCII, matNMRReadBrukerSpectra, matNMRConvertStates2D, matNMRSetPhase2D, matNMRExtract2D, matNMRSymmetrize2D, matNMRLP2D, matNMRTranspose, matNMRDCcorr2D, matNMRRemoveBrukerDigitalFilter2D, matNMRSolventSuppression2D, matNMRConcatenate2D, matNMRShearingTransformationFD 26-07-'04: After a swap echo, the fourier mode is now set to "whole-echo" by default. This is useful because normally one would want to change the size of the FID after the swap echo and this should be done from the center for a whole-echo FID. And it used to be tedious to do that. Affected routines: regelswapecho 26-07-'04: Changing the size of an FID whilst being in fourier mode "whole-echo" will now result in an FID which has zeros added from the center instead of from the right hand side. This is only useful for whole-echo FID's and is done automatically ONLY when being in this Fourier mode. For 2D's ONLY TD2 will be appended from the center, whilst TD1 is appended from the right-hand side! Affected routines: regelsize1d, regelsize2d 26-07-'04: To make sure the Fourier mode for TD2 and TD1 is maintained properly during macro execution, the "resetfourmode" script is run whenever the Fourier mode is read from the history macro. This wasn't done yet in all cases. Affected routines: RunMacro 26-07-'04: Added an option that allows reading in a spectral reference from disk. As most spectrometer software stores the spectral reference somewhere as an absolute frequency coupled to a certain value in PPM, we may use this feature to enhance the default axis scheme. By reading in these values the center of the default axis will not be zero but have the appropriate value. When loading a new matrix these values are cleared. When saving such a variable the reference values will be stored in the structure. Note that a reference in PPM will be calculated in Hz, and vice versa, so the user may switch between the two scales. Affected routines: matNMRinitvars, GetDefaultAxis, regelsave?d, regelsavedisk?d, makenew1d, makenew2d, ClearDefaultAxis, resetdefaultaxis, SwitchTo1D, askimportreference, regelimportreference, QReadReferenceParameterFiles, GenerateMatNMRStructure, checkinput1d, checkinput2d, checkinputdual, GetDefaultAxisDual 26-07-'04: Some new problems have arisen because of the fact that Matlab 7.0 is stricter than previous versions with the use of the break/return commands. In many cases the break command should be replaced by return in the matNMR code. Affected routines: QReadParameterFiles, asklp2d, checkinput1d, checkinput2d, checkinputdual, convertBrukerqseq1d, convertBrukerqseq2d, dualdisp, makenew3D, matprint, peakfit, QReadReferenceParameterFiles, Qspcrel, regelaxis1d, regelaxis2d, regelBrukerdig, regelcaxis, regelConnectAxisToSpectrum, regelexecutemacro3d, regelexecutemacro, regelleftshift, regellp1d, regellp2d, regelmake1derrorbar, regelnaam, regelQfidread, regelRI, scale2d An incorrectly-placed "END" statement caused problems in the peakfit routine Affected routine: peakfit 27-07-'04: Some issues involving the use of 3D matrices: -the title would not be printed correctly when loading a 1D or 2D from the 3D menu as it would be written into the 3D window instead of the main window. Affected routines: makenew1D, makenew2D 27-07-'04: As now all incorrect break statements have been replaced by return statements (26-07-'04), this affected the execution of a number of routines. Now a flag is introduced which denotes whether or not certain parts of code must be executed. Affected routines: matNMRdefineglobals, matNMRinitvars, regelnaam, checkinput2d, maknew1D, makenew2D 27-07-'04: The test that determines whether the coordinates to an input variable operate on TD1 or TD2 (relevant because of the corresponding spectral parameters!) during a dual plot did not work properly as it used an incorrect variable. Affected routines: checkinputdual 27-07-'04: A "reload last" button was added to the 3D window to make it easier to reload the last 3D. Affected routines: makenew3D, matNMRinitvars, matNMRdefineglobals, reload3d, matNMR3DButtons 27-07-'04: The 2D/3D viewer did not handle 3D matrices within a structure properly as it didn't check for matNMR structures yet. This not only included detection of the size of the 3D matrix (would be 1 previously) but also the usage of the proper axis rulers. Affected routines: regelplotseries* 29-07-'04: A number of grids of subplots have been added to the 2D/3D viewer: 8x8, 9x9, 10x10, 11x11, 12x12, 13x13 and 19x19. The SubPlots routine has also been changed by creating for loops instead of having statements for each axis. Affected routines: matNMR2DButtons, Subplots, RestoreSubplots 29-07-'04: The default height of the supertitle has been changed as it was usually too low and had to be moved before printing. Affected routines: regelsupertitle 29-07-'04: Until now changing the color axis could sometimes be impossible in the 2D/3D window whenever subplots were involved, AND only the minimum or maximum needed to be set equal for all plots. Now instead of two options, the user may choose from three options which are "only current plot", "all plots", "all plots but only if a value has changed comparing to the original axis in which the routine was started". A similar change was made to the routines dealing with changing the axis labels. Other could follow soon. Affected routines: askcaxis, regelcaxis, askaxislabels, regelaxislabels 29-07-'04: When working with many subplots it can be very annoying to have to remove the axis labels, titels and tick labels after plotting. This can even be extremely time consuming in certain cases as the x server may get really slow. Now all plotting routines in the 2D/3D viewer call a script that allows such things to be done by default depending on the number of subplots in the window. A crude measure but it should be sufficient. Currently all tick and axis labels are removed when there are more than 25 subplots, and all titles when there are more than 35 subplots. Affected routines: correctforsubplots, dispmesh, plotcont, dispstack3D, dispraster2D, displine, disppolarplot, dispbar, regelplotseries* 29-07-'04: The plotting of a 3D matrix within a structure, while indexing into the matrix (e.g. Spectrum(1:5, :, :), where Spectrum is a matNMR structure) caused problems because the routines that deal with such series tried to redo things themselves, instead of using the work of the checkinputcont routine. Furthermore, due to the fact that all the regelplotseries* routines followed exactly the same processing actions, apart from the ones determined by the plot type, they have been combined into one routine. Now a flag Q2D3DPlotType is set before going into the new regelplotseries routine, which determines what to do exactly. The flag uses the same coding as was already used for storing in the userdata of the axis. Also, the checkinputcont routine tries to interpret any user-given input and makes sure that indexing into a matrix doesn't screw up the usage of axes in a structure etc. This had to be improved to allow for 3D matrices to be examined correctly. Affected routines: checkinputcont, regelplotseries, disppolarplot, plotcont, dispbar displine, dispmesh, dispraster2D, dispstack3D, regelpolarplot, regelbar, regelline, regelmesh, regelstack3D, regelabscont, regelcont, regelraster2D Removed routines: regelplotseries* 29-07-'04: So far idexing into a matrix within a structure was not possible in the main window without losing the axes. Now the indexing should work. Affected routines: checkinput2d, checkinput1d, checkinputdual 29-07-'04: A timing statement is now given after processing a macro. Affected routines: regelexecutemacro, regelexecutemacro3d 29-07-'04: Even though an undo action would be written into the processing history, no undo entry would ever be made when running a macro as this was actively blocked. As it has very little effect on the processing time of a macro, undo entries are now always made. Furthermore it turned out that the current construction in the routine that deals with changing the axis ruler in the main window (scale1d), would not create entries for several axes. This has been fixed now. Affected routines: apodize?d, convertBrukerqseq?d, DCcorr?d, defstates, flipspec, four?d, regelaxis1d, regelBrukerdig, regelconcatenate, regelconvertBruker, regelconvertVarian, regelextract?d, regelleftshift, regellp?d, regelsetintegral2d, regelshearingFD, regelshearingTD, regelsize?d, regelsolventsuppression?d, regelswapecho, regelusercommand, regelzero2d, scale1d, setphase?d, shiftFFT?d, symmetrize2d, transponeer, regelgradientaxis1d, regeltimeaxis1d, regelpointsaxis1d 29-07-'04: Some routines always updated the screen, even when processing a macro. This has been corrected. Affected routines: scale1d, DCcorr2d 29-07-'04: The updating of the UIcontrols in the main window has now been made into a single routine. Previously every routine did what it themselves. Affected routines: updatebuttons, asaanpas, makenew1D, makenew2D, regelsize?d, transponeer, viewcolumn, viewrow, regelgetcolumn, regelgetslice, doUnDo, scale1d, SetDimensionSpecificParameters, regelextract?d, four?d, regelspectrometerfrequency, 29-07-'04: When changing the display mode the zoom limits for the x-axis would be reset. As it is sometimes useful to keep the zoom limits in order to compare e.g. the real and imaginary buffers, this reset has been removed. Affected routines: regelRI 30-07-'04: It is now possible to read the acqus file from disk in order to determine the proper number of points to remove the Bruker digital filter. This uses an empirical protocol to determine the correct value, which was found on the internet, Affected routines: askBrukerdig, regelBrukerdig, DetermineBrukerDigitalFilter 30-07-'04: After concatenating a series of variables, the new variable name wasn't put in the list of last-used variables. Affected routines: regelconcatenatevariables 04-08-'04: The vertical positioning of text in a legend box would often be bad if there were sub- and superscripts in the string. Now the positioning is done taken into account whether there are sub and superscripts. Affected routines: Qlegend 04-08-'04: When reading in Chemagnetics binary FIDs then it was assumed that sf1 is the correct frequency. This can obviously be wrong as one should really look at at what hardware channel is connected to software channel "ch1". Affected routines: QReadParameterFiles 04-08-'04: The routine that reads in the standard parameter files when reading binary FIDs, did not always work correctly in case of Chemagnetics files: when doing multiple arrays in a single experiment spinsight forges the al2 parameter into the acq file even if there was no al2 parameter in the acquisition window. It does this to prevent users being able to process the nD data. Now matNMR first looks to see if there are arrays and only then, if there are no arrays, checks for al2. Affected routines: QReadParameterFiles 09-08-'04: The FIDstatus flag was set in four2d before the history macro was defined, resulting in an incorrect flag when doing an undo. Affected routines: four2d 11-08-'04: Until now the input window for the "swap whole echo" function always gave the middle of the current dimension as the initial position for the echo. Now it is what the user previously entered as there really isn't any reason not to do that. Affected routines: matNMRdefineglobals, matNMRinitvars, askswapecho, regelswapecho 16-08-'04: The signal-to-noise determination in the 1D processing menu in the main window did not work for anything but an axis in points. Affected routines: detsovern 18-08-'04: The flag for the default axis was not written correctly into the processing history after extracting a part of a 1D or 2D, as the flags were reset before the history was written. Furthermore, the flag for the default axis is no longer switched if the range of extraction covered the entire spectrum in a certain dimension. Affected routines: regelextract1d, regelextract2d 19-08-'04: The routine that deals with setting the tick lengths was not yet converted to working with subplots. Affected routines: askticklength, regelticklength 20-08-'04: The limitation that either only one or all subplots could be acted upon has been lifted by allowing selection of multiple subplots simultaneously. A left-click on an axis will select only that axis (unselects all other axes), whilst a right-click will toggle the selection flag for an axis but leaves other axes as they are. Affected routines: SelectAxis, regelaxis, regelaxiscolors, regeldirs, askaxislabels, regelaxislabels, regelaxislocation, regelaxisposition, regeltitle, regelbox, regelfont, regelgrid, regelhold, regellims, regelscales, regelshading, regeltickdir, regelticklabel, regeltick, askcaxis, regelcaxis, contcbar, Marker, Markersize, Linestyle, Linewidth, regelticklength 20-08-'04: An additional option was added to all "plot manipulations" menus: clear axis. Affected routines: matNMR1DButtons, matNMR2DButtons, askclearaxis, regelclearaxis, pk_init, Diffpk_init, T1pk_init 23-08-'04: Plotting actions can now be recorded and stored in macros. From all windows such plotting macros can be recorded. In the main window an input window will appear asking the user what actions should be recorded, distinguishing between processing and plotting actions. It is required that the window in which a plotting macro is run has exactly the same subplot configuration as the original window, otherwise the execution is refused IF multiple axes were selected during the recording of the macro. If a macro is started from anything but the main window then NO processing actions may be contained inside the macro. If so then a notice is issued and nothing is done. During stepwise reprocessing the plotting action are shown separately so they can also be executed stepwise. From all windows stepwise processing is allowed. For some actions the current window must be the 2D/3D viewer window to be executed when running a plotting macro. If this is not the case then the action is simply skipped. NOTE: as it is now possible to record macros in multiple windows a possible conflict situation arises in that macros can and will become corrupted if various actions are executed in different windows while recording the macro. No protection has been made against this as I think it is up to the user to take care of this. For this all windows now have a userdata entry similar to the 2D/3D viewer window in which the code for the subplots is written. Also, all axes in all windows have a code written to the userdata to denote its index. Previously the tag was used for this for the 2D/3D viewer window. The handles that were previously stored in the userdata for the peak fitting, T1 and diffusion fitting routines have been moved to a subcategory "Handles". Affected routines: matNMRdefineglobals, matNMRinitvars, matNMR1DButtons, askstartrecordingmacro, regelstartrecordingmacro, askstoprecordingmacro, AnalyseMacro, regelstoprecordingmacro, RunMacro, nmr, CreateMainAxes, pk_init, Diffpk_init, T1pk_init, pk_udata, T1pk_udata, Diffpk_udata, regelplotseries, RestoreSubplots, scale1d, stack1dhorizontal, stack1dvertical, regelmake1derrorbar, plotcont, dispstack3D, dispraster2D, disppolarplot, dispmesh, displine, dispbar, matNMRRunMacro, regelaxis, regelclearaxis, regelaxiscolors, regeldirs, regelaxislabels, regelaxislocation, regelaxisposition, regeltitle, regelbox, regelfont, regelgrid, regelhold, Linestyle, Linewidth, Marker, Markersize, regellims, regelscales, regelshading, regeltickdir, regelticklabel, regelticklengths, regeltick, regelcaxis, contcbar, contcmap 25-08-'04: When reading a series of binary FID's or any other type, the range would not be captured in square brackets by the handling routines which made it necessary for the user to write the brackets in the input window. Now this has been solved. Affected routines: regelQfidreadSeries, regelsimpsonasciilaadSeries, regelmatlaadSeries, regelBrukerSpectrareadSeries, regeladdvariables 25-08-'04: The automatic setting of tick positions through the plot manipulations failed for the z-axis due to an incorrect axis property being accessed (ztick instead of ztickmode) Affected routines: regeltick 25-08-'04: The axis limits given in the input window for settings the limits (through the plot manipulations menu) weren't sorted. Now they are. Affected routines: regellims 31-08-'04: The "_" character was not allowed in variable names by the CheckVariableName routine, which was not correct. Affected routines: CheckVariableName 02-09-'04: The standard Matlab foptions has been taken into the matNMR code to ensure that the fitting routines will work in newer versions of Matlab (starting from Matlab 7 foptions is no longer supported and is replaced by new routines). Affected routines: foptions, matNMRsimplex, Diffleasqr, T1leasqr, copymat 02-09-'04: When starting the peakfit routine and trying to load a 2D, the routine did not show the current slice, but always the first of the matrix. The refresh button did do it and so now when starting up the routine it will show the current slice. Affected routines: peakfit 02-09-'04: Reading of standard parameter files is now possible for reading Bruker processed spectra. This avoids having to look up sizes and blocking factors. Affected routines: askBrukerlaad, askBrukerlaadSeries, regelBrukerSpectraread, regelBrukerSpectrareadSeries, regelinputbuttonsBrukerlaad, regelinputbuttonsBrukerlaadSeries 06-09-'04: In the AddToMacro routine there was still a command to take away display-related commands. This has been removed as it interfered with the new macro setup. Affected routines: AddToMacro 06-09-'04: The length of macro's has been changed from 10 to 12. To avoid future complications when doing this again, a global variable has been defined which is used by all routines that cut longer commands in pieces. Affected routines: matNMRdefineglobals, matNMRinitvars, AddToMacro, AnalyseMacro, regelusercommand, stopbasl?d, (+ many plot-manipulations routines) 06-09-'04: To make sure that older (smaller) macro's can still be executed a new routine converts old macros to the new size. Affected routines: CorrectMacro, regelexecutemacro, regelexecute3d, checkinput1d, checkinput2d 07-09-'04: The peak fitting, T1 fitting and Diffusion fitting routines did not return to a default plotting setting after a plot manipulations action was executed. This therefore caused permanent changes to the appearance of the axis, which is not correct. Now each routine always reverts back to the default settings when replotting a line. Affected routines: pk_init, peakfit, T1pk_init, T1fit, Diffpk_init, Difffit 07-09-'04: The item "about matNMR" was taken away from the help item in the menubar. Now only the copyright message is left of the original old manual files. Affected routines: matNMR?DButtons, pk_init, T1pk_init, Diffpk_init 07-09-'04: The standard Matlab command (at least in Version 6.5) cell2mat has been added to the matNMR distribution as it wasn't shipped with older versions of Matlab. And as it is used now by several functions I've just included it into matNMR. Affected routines: cell2mat, copymat 09-09-'04: A bug in the setphase1d routine caused macro's not to be executed properly in 1D mode. Affected routines: setphase1d 09-09-'04: The dispbar and displine routines in the 2D/3D viewer produced error messages when decreasing axes were used as they didn't use the CheckAxisCont routine yet. Affected routines: dispbar, displine 09-09-'04: A protection has been built into the checkinputdual routine to prevent errors when reading in structures from previous versions, which may not have the same entries in the matNMR structure. Also, the routine did not acces any user-specified coordinates after recreating the default axis. Affected routines: checkinputdual 09-09-'04: The checkinput* routines recreated an error message whenever a variable was loaded, with a default axis AND with coordinate indexing. Affected routines: checkinput1d, checkinput2d, checkinputcont, checkinputdual 09-09-'04: The 2D/3D viewer did not yet reproduce default axes when loading a variable. Now it does. Affected routines: checkinputcont 09-09-'04: Importing of a spectral reference for Bruker data was implemented. Affected routines: QReadReferenceParameterFiles 09-09-'04: Axis colours are now set to white by default when resetting a plot. Affected routines: asaanpas, pk_init, peakfit, T1pk_init, T1fit, Diffpk_init, Difffit 10-09-'04: The fourier mode was not stored in the history macro and this could cause problems whenever setting the size after a whole-echo FT had been done before. Now, the fourier mode is stored in the dimension-specific data. Affected routines: SetDimensionSpecificParameters, convertBrukerqseq1d, convertBrukerqseq2d, DCcorr1d, DCcorr2d, defstates, flipspec, historyapodize, historyFT, regelBrukerdig, regelconcatenate, regelconvertBruker, regelconvertVarian, regelextract1d, regelextract2d, regelleftshift, regellp1d, regellp2d, regelsetintegral2d, regelshearingFD, regelshearingTD, regelsize1d, regelsize2d, regelsolventsuppression1d, regelsolventsuppression2d, regelswapecho, regelusercommand, regelzero2d, scale1d, setphase1d, setphase2d, shiftFFT1d, shiftFFT2d, stopbasl1d, stopbasl2d, SwitchTo1D, symmetrize2d, transponeer, 10-09-'04: An additional option has been added to the UI control for colour maps in the 2D/3D viewer. Now the current colour map may be inverted. Affected routines: matNMRinitvars, QColorMaps, matNMR2DPanelButtons 12-09-'04: The command "axis on" is issued after replotting any spectrum in matNMR to avoid it being off after the user has switched it off from the plot manipulations menu. Affected routines: asaanpas, plotcont, dispmesh, displine, disppolarplot, dispstack3D, dispraster2D peakfit, Difffit, T1fit 13-09-'04: The importing of external spectral references was not correct. As it turns out both XWinNMR and Spinsight neglect the sign of the gyromagnetic ratio and always use gamma < 0. This mean that it is important for the user to have set both the spectral frequencies of the current spectrum AND the sign of the gyromagnetic ratios, before importing the external references. Else, the scale in Hz is incorrect, whilst the PPM scale is not always affected. Affected routines: QReadReferenceParameterFiles 13-09-'04: To avoid having to make the minimum requirement for matNMR Matlab 6.5 (instead of 5.3 currently) an alternative for the uigetdir routine has been created. If the uigetdir routine doesn't exist then the uigetfile routine is used instead: the user must then select any file in the directory in order for it to be selected. So in the future the "uigetdirBackup" routine must always be called instead of "uigetdir". Also, the starting path for the uigetdir routine has been changed into "pwd". Previously it also had the QSearchprofile variable attached to it, which didn't work under Windows. Affected routines: askimportreference, selectdistribution, uigetdirBackup 17-09-'04: The setting of axis labels and titles is now also written to a plotting macro. Affected routines: CreateMainAxes, klabels, clabels 17-09-'04: UIcontextmenus have now been defined that allow quick access to all processing actions by clicking the right mouse button in the main window or on any uicontrol. A menu will pop up with a similar structure as the corresponding items in the menubar. When zoom is switched off the context menu is also available for the axis. If zoom is on this option is disabled to make sure that it doesn't interfere with zoomin. Affected routines: matNMR1DButtons, zoom1d 18-09-'04: UIcontextmenus have also been added to the 2D/3D viewer. Those are only connected to the figure window and can therefore not be called over axes and other objects. This is done on purpose because of the rerendering matlab generally does when flipping through the menus. By forcing the user to start in an empty space, preferably on the right hand edge of the window where the menus don't overlap with objects, this should be relatively fast. Affected routines: matNMR2DButtons 18-09-'04: To all input windows in the 2D/3D viewer a line was added to allow for a plotting macro to be executed immediately after the plot is made. This can save a lot of time. Affected routines: matNMRdefineglobals, matNMRinitvars, asknamemesh, asknamecontabs, asknameccontrel, asknameraster2D, asknamestack3D, asknamepolarplot, asknameline, asknamebar, regelmesh, regelabscont, regelcont, regelstack3D, regelraster2D, regelpolarplot, regelline, regelbar, dispmesh, dispcont, dispabscont, dispstack3D, dispraster2D, disppolarplot, displine, dispbar, regelplotseries 18-09-'04: Various axis parameters weren't reset by the display routines for the 2D/3D viewer, which meant that they persisted even though they were made from the plot manipulations menu. Affected routines: dispmesh, dispcont, dispabscont, dispstack3D, dispraster2D, disppolarplot, displine, dispbar 21-09-'04: When loading a new macro in the stepwise processing window, the window to which all actions are directed would become incorrect. This never mattered before when only processing macros were available but with plotting macros this does matter. Affected routines: RunMacroStepwise 21-09-'04: The rotate3d function did not always work properly for multi-plot 2D/3D viewer windows as the super-title axis would sometimes be selected instead of the real axes. The Rotate3D routine has been adapted such that it can never select the super-title axis. Affected routines: Rotate3D 21-09-'04: Incorrect transposes (conjugate transpose) were found in the linear prediction routines. These could cause massive distortions in the predicted spectrum in some instances. WHY HASN'T ANYBODY REPORTED THIS PROBLEM TO ME BEFORE????? Affected routines: regellp1d, regellp2d 22-09-'04: When switching between different 2D's in a 3D matrix the FID status would not be reset so all spectra would be plotted like spectra. Affected routines: view2d 22-09-'04: The shearing in time domain did not use the new convention for the spectral width in TD1, which is 1/dwell (see change 20-01-'04). Affected routines: regelshearingTD 22-09-'04: After some complaint of me being terribly oldfashioned, I have changed most instances of "sweepwidth" into "spectral width". Variable names have not been changed. 22-09-'04: An error message would appear when trying to integrate a spectrum whilst working in display mode "both". Now a notice is given to state that integartion is not allowed in this display mode. Affected routines: integrate1d, askintegrate2d 22-09-'04: An error message would appear when starting the peak fitting routine when working in display mode "both". Now a notice is given to say that zoom limits are not taken into account for display mode "both". Affected routines: piekfit1d 22-09-'04: The buttons added to the main window on 08-06-'04 to allow easy access to all processing functions have been deleted in favour of the new context menus. 22-09-'04: The buttons "get row" and "get column" have been deleted from the main window in favour of the directly- accesible edit buttons. Instead text labels have been added above the edit buttons. ============= !web release! : september 22 2004, version 3.2.0 ============= 23-09-'04: The rotate3d function still doesn't always work properly (see also 21-09-'04): now the axis with the blue box that visualizes the rotation angles was selected by the routine. The routine has been altered to not allow this to happen. Affected routines: Rotate3D 23-09-'04: An unnecessary END was written in the Diffsimplex and T1simplex routines, which crashed matNMR under Matlab 7.0. A check was done to see if other routines have the same problem. Affected routines: T1simplex, Diffsimplex, simplex_restrict_matNMR 23-09-'04: A test run has been done using "warning on" to ensure that no warning messages appear in Matlab 6.5. Warning messages that appeared have been solved. Affected routines: Qeditnum, pk_init 24-09-'04: A minor change was made to the view2d routine. Previously when the user requested a certain 2D from a 3D that was out of bounds, it would only correct the UIcontrol, but not reread the FID. Now it does reread it. Affected routines: view2d 24-09-'04: A bug has arisen by the introduction of the context menu in the 2D/3D viewer: when using the context menu (right-click), followed by e.g. plotting of a 3D (series), the SelectAxis routine would be called but would do the incorrect action because the last mouse click was done using that same right mouse button. This would result in all axis being selected except the one from which the plotting was started. Also, that latter axis would be the only one with a plot in it. Now the regelplotseries routine resets the selectiontype parameter of the figure in order for SelectAxis to think the left mouse button was pressed. Affected routines: regelplotseries 24-09-'04: For some reason reading 3D matrices within a structure did not work (anymore?). The checkinputcont routine needed updating for that. A typo was also found in the part where it works on the axis for TD1. Affected routines: checkinputcont 24-09-'04: Reprocessing plotting actions which use the "apply changed values only" approach does not work properly as the RunMacro routine currently doesn't know which values it needs to change and which it shouldn't. Affected routines: RunMacro, regelcaxis 27-09-'04: Two bugs were found in the reading of Bruker processed data: -reading of 1Ds didn't work because "proc2s" was checked for and this doesn't exist for 1D spectra. -reading of 2D spectra didn't work because the blocking factor for TD1 would be deleted because of incorrect use of temporary variables. Affected routines: ReadParameterFile, DetermineBrukerSpectraRead, regelBrukerSpectraread 27-09-'04: A bug in a safety check (see 22-07-'04) in the addvariables routine caused an error. THIS SHOULD HAVE BEEN TESTED PROPERLY!!!! Affected routines: addvariables 27-09-'04: A colon was missing after a statement, which caused output of an axis variable. Affected routine: GetDefaultAxisDual 27-09-'04: When reading Bruker processed data into matNMR the spectral frequencies and widths would not be read, even when standard parameter files were used to determine the blocking factor and byte swap. Now the same primitive scheme as is used for binary FIDs is used also here. Affected routines: DetermineBrukerSpectraRead, regelBrukerSpectraread, regelBrukerSpectrareadSeries 28-09-'04: An option was added so that the current axis vector in the main window may be stored in the workspace. Affected routines: matNMRdefineglobals, matNMRinitvars, matNMR1DButtons, asksaveaxis, regelsaveaxis 28-09-'04: When reading Bruker processed data into matNMR regularly the indirect dimension would be reversed, because matNMR neglected the parameter "REVERSE" from the proc2s file. Now it is included and this shouldn't be a problem anymore. Also, the FID status is set whenever the indirect dimension hasn't been FT'd yet. Furthermore, because the byte ordering as read from the procs file wasn't converted to the values used by matNMR in the input windows and the final import routine, the UIcontrol in the input window would be disabled the next time it was used. Affected routines: DetermineBrukerSpectraRead, regelBrukerSpectraread, regelBrukerSpectrareadSeries 29-09-'04: The text labels introduced in the 2D menu in the main window (see 22-09-'04) were not included in the menu that makes them invisible when needed. Affected routines: matNMR1DButtons, v2dmenu, stopmenu2d 29-09-'04: The callback functions for UIcontrols in input windows (see 21-03-'03) weren't executed when creating the input window. This caused that buttons would be visible even though based on the relevant UIcontrol callback functions they shouldn't be. Now all callbacks are executed once immediately after creating all UIcontrols. Affected routines: QuiInput 29-09-'04: The values for the current row and/or column would be reprinted by the regelgetcolumn and regelgetslice routines by using a str2num. For large numbers this would lead to abbreviations using an exponential, but now the resolution for the num2str conversion is set to 10 digits. Also, it is now possible to type "end" in these buttons to quickly go to the last row or column, instead of having to guess or move forward manually. Affected routines: regelgetcolumn, regelgetslice, updatebuttons 29-09-'04: A few more routine have been added to the "import external reference" functionality. Now the external reference may be stored in the workspace for later use, when importing it. Furthermore, the resulting variable may be edited, or the external reference may be defined manually. A submenu has been created in the menubar and the context menu to accomodate all functions. Affected routines: matNMRdefineglobals, matNMRinitvars, askeditreference, askimportreference, askdefinereference, QReadReferenceParameterFiles, regelimportreference, regeleditreference, regeldefinereference. 30-09-'04: An incorrect sign caused problems with the external reference axis in case of gamma>0 and axis reference in kHz. Affected routines: regeldefinereference, QReadReferenceParameterFiles 30-09-'04: The tag for the axis in the main window was not preserved by the "reset figure" routine (asaanpas). Furthermore, some other routines did not reinstate the context menu yet. All these routines now use the switchzoomoff and switchzoomon routines. Affected routines: asaanpas, switchzoomoff, switchzoomon, defpeaks, muisinput, prescale1d, regelhz1d, regelppm1d, scale1d, 01-10-'04: An additional input parameter has been added to the input for reading Bruker processed data to allow the distinction between FIDs and spectra in the indirect dimension (FIDs need a reverse). Affected routines: matNMRdefineglobals, matNMRinitvars, askBrukerlaad, askBrukerlaadSeries, regelinputbuttonsBrukerlaad, regelinputbuttonsBrukerlaadSeries 01-10-'04: A typo was found in the regelconcatenatevariables routine, which caused an incorrectly-named variable and a crappy result when concatenating in the third dimension. Affected routines: regelconcatenatevariables 01-10-'04: When plotting a 3D in the 2D/3D viewer the names for the axis vectors would always be replaced with the internal variable names. Affected routines: matNMRdefineglobals, matNMRinitvars, regelplotseries, regelmesh, regelcont, regelabscont regelline, regelbar, regelstack3D 01-10-'04: Previously the colour map would not be retained when making a new 2D/3D viewer window from the panel window. Now it is. Affected routines: makenew2D3D 12-10-'04: A bug was found in the export-to-SIMPSON routine: spectra would not be stored properly because of the type would be set to "Spectrum" instead of "SPE". Affected routines: regelsavetoSimpsonASCII 12-10-'04: The export-to-SIMPSON routine did not add an extension to the file even though SIMPSON uses .spe for spectra and .fid for FIDs. This is useful for recognizing what type of matrix it is. Now the user-defined name is checked for the extension and if no appropriate extension is present, it is added. Affected routines: regelsavetoSimpsonASCII, matNMRinitvars 12-10-'04: The simplex pre-fit in the T1 and diffusion fitting routines has been altered to not allow negative values for the T1 and diffusion constants. This avoids divergent behaviour in many cases. Naturally, screwing with the simplex routine doesn't improve its efficiency and its behaviour around constraint limits but it should be fine in the context of these routines. We only use simplex to provide a reasonable estimate for the gradient routine. Affected routines: simplex_restrict_matNMR, T1pk_gtcon, Diffpk_gtcon 13-10-'04: Some confusion has arisen about a separate variable for 1D mode to denote the fourier mode. The routines updatebuttons and resetfourmode used that, but no other routine did and this caused some minor problems. For now the 1D mode uses the same variable as TD2, as it was before. Affected routines: updatebuttons, resetfourmode 13-10-'04: When a user-defined axis is created during macro processing, the resulting string to generate the axis is shown in the "save in workspace" edit button of the routine that allows the user to create axes. As this string is generally not a proper variable name this must be deleted by the user before continuing. Now the string is checked using the CheckVariableName routine and if the string is not a proper variable name then it will be emptied. Affected routines: stats1d, askgradientaxis1d, asktimeaxis1d, stats2d, whataxis2d 13-10-'04: A new optional check button has been implemented in the QuiInput routine. The button is positioned next to the normal buttons. The variable connected to this button is the same as that of the edit button but then with an "a" appended to it: QuiInput1 -> QuiInput1a. This variable will be 0 if the check button is switched off, or 1 when it is switched on. The functionality can be called by adding "&CB" to the start of the string, followed by either 0 or 1 to set the initial state. Depending on the value the corresponding button is enabled or disabled. This button will be used for all plot manipulatios routines to denote whether the entry must be applied or not. Affected routines: QuiInput, QuiInput_2, QuiInput_4, matNMRdefineglobals, matNMRinitvars 13-10-'04: The macro length has been increased to 15. This induced an error in the regelusercommand routine when reprocessing an old macro because the extra zeros lead to char(0) characters in the command string. Now all char(0) characters are removed by the RunMacro routine. Affected routines: matNMRinitvars, RunMacro 13-10-'04: Have started converting all plot manipulations routines to use the new feature of the additional check button in the input window to denote whether an entry must be applied or not. Found a bug in the regelcaxis routine: it didn't store the macro information when choosing automatic setting of the color axis. Found a bug in the regelticklengths routine: because of a typo it always applied the changes to all axes. Found a new bug induced by these changes in RestoreSubplots: all axes were selected, instead of only axes with the buttondownfunction "SelectAxis". Previously this wasn't a problem. Affected routines: RunMacro, askcaxis, regelcaxis, askaxislabels, regelaxislabels, askaxis, regelaxis, askclearaxis, regelclearaxis, askaxiscolors, regelaxiscolors, askdirs, regeldirs, askaxislocation, regelaxislocation, regelaxisposition, asktitle, regeltitle, askbox, regelbox, askfont, regelfont, askgrid, regelgrid, askhold, regelhold, asklims, regellims, askscales, regelscales, askshading, regelshading, asktickdir, regeltickdir, askticklabel, regelticklabel, askticklengths, regelticklengths, asktick, regeltick, RestoreSubplots, askcbar, contcbar 14-10-'04: The ydir property wasn't reset by many plotting routines leaving the possibility of strange plots not being updated properly. Affected routines: asaanpas, plotcont, dispmesh, displine, disppolarplot, dispstack3D, dispraster2D peakfit, Difffit, T1fit 14-10-'04: The routine that makes error bar plots in the main window did not reset all axis properties as asaanpas does. Affected routines: regelmake1derrorbar 14-10-'04: The routine that makes 1D bar plots in the main window did not reset all axis properties as asaanpas does. Furthermore, it did not use the same plot direction as asaanpas does, which meant the spectrum flipped from left to right in some cases when using this function. Affected routines: regelmake1dbar 18-10-'04: The archaic apodization functions "block+cos^2" and "block+exp" have been removed from the main window apodization functions UIcontrol. Instead the Hamming window function has been added. Provisions have been made in the code for the Hanning function but since the lineshape is similar (but worse) than the Hamming window, this isn't shown. The changes have also been made to the off-line processing routines, although the block functions haven't been deleted there. Affected routines: regellb, repairapodizebutton, matNMR1DButtons, historyapodize, apodize1d, RunMacro, AnalyzeMacro, matNMRApodize1D, matNMRApodize2D 19-10-'04: A callback has been created for the buttons that say "Row :" and "Column :" in the main window. Now they will induce a switch of the dimension when they are pushed. Affected routines: matNMR1DButtons 19-10-'04: When reloading a matrix that in the mean time has been changed from 1D to 2D or vice versa, a notice would be printed but the status variable would not be changed. This meant that the same notice would be repeated if the reload button would be pressed again. Affected routines: checkinput1d, checkinput2d 19-10-'04: Reloading a spectrum would go wrong whenever an input window had been openened between loading the variable and pushing the "reload last" button. This was because the QuiInputx strings were not set properly by the reload routine. Furthermore the axis variables weren't re-used. Affected routines: reload, makenew1D, makenew2D, transponeer (redundant setting of Qlast removed) 20-10-'04: There was a bug in the FD shearing when reprocessing from a macro: one of the input variable was made a string whereas it should be an integer. Affected routines: RunMacro 22-10-'04: The radiobuttons in the peakfitting window that are intended to be used by the user to start the definition of a certain parameter using the cursor, had incorrect callbacks so that this function wasn't functional. Affected routines: pk_init 26-10-'04: The matprint routine still had unparented UIcontrols which allowed them, in some circumstances, to end up in incorrect figure windows. Furthermore, in Matlab 7.0.1 the printing did not work properly. It seemed to have problems knowing which handle to print. Now the figure handle is included in the print command. Affected routines: matprint 26-10-'04: A quick check across the code to spot unparented UIcontrols reveiled several of such routines. These have been fixed. Affected routines: clabels, klabels, QezLegend 27-10-'04: The horizontal stack plot routine did not take the FIDstatus into account so FIDs would be plotted reversed. Affected routines: stack1dhorizontal 27-10-'04: The printing routine would hide the window from view for repositioning even when the WYSIWYG was not used. This was unnecessary and now only when WYSIWYG is used this is done. Affected routines: matprint ============= !web release! : october 27 2004, version 3.2.44 ============= 27-10-'04: Sometimes the "reload last" would fail and load a wrong variable. This was because the makenew?d routines use the Qnewinlist variable (used for determining whether to add the variable and axis names to the list of last-used variables) to store the name of the last variable. As the dualdisp routine also sets the Qnewinlist variable, the subsequent usage of the "reload last" routine would reset the name of the last variable. Very confusing, but easily solved: now the reload routine sets the Qnewinlist variable equal to Qlast before proceeding. Affected routines: reload 29-10-'04: When reprocessing a macro the apodization of a 1D FID was not stored in the history macro variable QHistoryMacro. Affected routines: apodize1d 29-10-'04: Until now the display mode was not taken into account when making horizontal or vertical stack plots. Now at least the horizontal stack plot routine does this. Affected routines: stack1dhorizontal 01-11-'04: The dual display of a horizontal stack plot did not work properly because the axis vector wasn't set appropriately. Affected routines: dualdisp 09-11-'04: When reprocessing a macro and changing the size of a 2D, the code -99 denotes that the size in that dimension shouldn't be changed. During stepwise reprocessing the original size at the start of the processing would be shown, which was usually not correct and hence confusing. Now it says "unaltered". Affected routines: AnalyseMacro 14-11-'04: A typo in the routine that handles pcolor plots caused an error message whenever the matrix dimensions would be of unequal lengths. Affected routines: dispmesh 18-11-'04: An error would occur when trying to change the phase when the plot type was not the default type. Now a reset figure is done first. Affected routines: setphase1d 18-11-'04: An error would occur when trying to use the "get position" function in the main window when the plot type was bar plot. Now a statement is given that the combination isn't allowed. Affected routines: pos1d 03-12-'04: The button in the 2D Panel window for toggling the colorbar status for the current axis did not work properly anymore now that the user has multiple options for selecting which subplots to act upon. Affected routines: matNMR2DPanelButtons 07-12-'04: The zoom function would automatically be switched off in the 2D/3D viewer for surface plots and stack 3D plots. This was because in 3D mode the zoom function will produce an error message. Now an additional check is made to ensure the zoom is only switched off if the user has requested an azimuth and elevation other than [0 90]. Affected routines: dispmesh, dispstack3D 07-12-'04: Now the colour map is retained when creating a new subplot configuration in the 2D/3D viewer window. Affected routines: matNMR2DButtons, makenew2D3DSubplot 09-12-'04: There were a number of problems with the 2D bar plot in the 2D/3D viewer window: -the CheckAxisCont routine crashed as it expected the Qcontvec2 variable to be longer than 1 element (also crashes for line plot) -the axis width wasn't very nice. -The plotting of a series didn't work anymore because the value for the colour of the bars was converted to a string by the regelplotseries routine, causing a crash. Affected routines: CheckAxisCont, dispbar, regelplotseries 15-12-'04: A typo in the macro routines caused it not to recognize Hamming apodization properly. Affected routines: AnalyzeMacro, RunMacro 15-12-'04: The goodie "select distribution" could crash matNMR when the user tried to cancel the action (in the uigetdir routine) Affected routines: selectdistribution 15-12-'04: A new plotting function has been added to the 2D/3D viewer: 3D bar plot. This makes 3D bars from all entries of a matrix with the height and colour both determined by the value of the matrix at that entry. (alternatively one could call this a 3D version of pcolor) Affected routines: asknamepcolor3d, regelpcolor3d, disppcolor3d, pcolor3d, regelplotseries, matNMR2DButtons 17-12-'04: The axis labels routines did not correct the strings (titles and axis labels) for the underscore character and so the next string would be subscripted. Affected routines: clabels, klabels 17-12-'04: The figure handle wasn't automatically updated every time when pulling forward the print menu window. Affected routines: matprint 06-01-'05: The name for the new Bruker software (TopSpin) was added to some of the routines: affected routines: askBrukerlaad*, askfidlaad*, askimportreference, matNMRReadBinaryFID, regelQfidread* 06-01-'05: Copyright messages changed to include 2005 and new version (3.3). Affected routines: matNMRinitvars, Copyright, Copyright.hlp, content.html 07-01-'05: Have implemented the possibility of allowing changeable color schemes to be defined. Affected routines: matNMRdefineglobals, matNMRinitvars, setdefaults, matNMR1DButtons, matNMR2DButtons, matNMR2DPanelButtons, matNMR3DButtons, pk_init, Diffpk_init, T1pk_init, nmr, CreateMainAxes, asaanpas, peakfit, T1fit, Difffit, matprint, CopyFig, Qlegend, clabels, klabels, stats1d, stats2d, basl1dmenu, basl2dmenu, QuiInput, matnmrhelp, RunMacroStepwise, StartupMessage, dualdisp, plotcont, dispbar, displine, dispmesh, disppcolor3d, disppolarplot, dispraster2D, dispstack3D, Subplots, regelsupertitle, QezLegend, Qeditnum, crsshair2d, crsshair, leasqr, T1leasqr, Diffleasqr, regeldisplaymode, doebasl1dcor, doebasl2dcor, Qoptions, Qscreenops, Qfontops, Qlinedata, Qtextdata, saveoptions, checkforcolourscheme, regelcolourschemesave, stopnmr, stopmatnmr, CorrectWindow ============= !web release! : january 7 2005, version 3.3.0 ============= 11-01-'05: Added a third pre-defined colour scheme (by Bernd Fritzinger) and connected the default line colour to the stack 3D and line routines in the 2D/3D viewer. For the line plot the default is only used if no linespec is given in the input window. Affected routines: matNMRdefineglobals, matNMRinitvars, Qsetcolorscheme, dispstack3D, displine 11-01-'05: The output for the 2D integration routine was changed such that the resulting variable now contains not just the integral for each point, but also the axis in that dimension and the position of the maximum signal in units of its original axis. Affected routines: regelintegrate2d 12-01-'05: Added a new type of integration for 2D spectra to the main window: integration around maximum. This routine searches in each slice in the 2D for the maximum signal in a user-specified range and integrates with a user-specified range around that maximum. This allows integration of peaks with variable positions and possibly overlapping other peaks. Affected routines: matNMR1DButtons, askintegratewidth2d, regelintegratewidth2d 12-01-'05: Have implemented inverse FT in the main window, which is accessible through the additional features menu in the menubar. Not all modes have meaningful inverse FTs so a notice is given when it is not possible. Affected routines: matNMRdefineglobals, matNMRinitvars, matNMR1DButtons, four1d, historyFT, RunMacro, four2d 19-01-'05: removed the changes to clabels and klabels made on 17-12-'04, in which the printing of underscores in strings would be interpreted as real text. This however made it impossible to create subscripts in strings. Affected routines: clabels, klabels 19-01-'05: Added a button to the matprint window which allows hiding the window instead of closing it. This avoids having to retype all settings, which is what happens when closing the window. Affected routines: matprint 19-01-'05: made minor change to the formatting of the signal intensity in the "get position" routine in the 2D/3D viewer. Affected routines: crsshair2d 19-01-'05: Added the possibility of changing the colour scheme from the 2D/3D viewer. Affected routines: matNMR2DButtons 25-01-'05: Added the possibility of changing the axis view from the plot manipulations menu. Affected routines: matNMR1DButtons, matNMR2DButtons, pk_init, T1pk_init, Diffpk_init, AnalyseMacro, RunMacro, askaxisview, regelaxisview 25-01-'05: When changing the colour scheme without saving it the colour of the title would be wrong since the defaulttextcolor parameter would not be set. Affected routines: Qsetcolorscheme 25-01-'05: Chosing "vertical stack plot" from either the context menu or the menubar in the main window did not open the input window as the callback was to the final routine and not to the routine that opens the input window. Affected routines: matNMR1DButtons 26-01-'05: Added the possibility of automatically loading the imaginary and hypercomplex parts when loading a Bruker processed spectrum from disk. Furthermore, the loading a series of Bruker spectra did not properly read the standard parameters files for each part of the series. For manual input this was fine but for standard parameter files the routine must read the particular parameter files for the current iteration. Affected routines: askBrukerlaad, askBrukerlaadSeries, regelinputbuttonsBrukerlaad, regelinputbuttonsBrukerlaadSeries, regelBrukerSpectraread, regelBrukerSpectrareadSeries, matNMRinitvars, matNMRdefineglobals 15-02-'05: Because some variables weren't declared global in the saveoptions routine the saving of the default settings could produce an error message. Affected routines: saveoptions 24-02-'05: Added the possibility of using cylinders instead of square bars for the bar 3D plot in the 2D/3D viewer. This is chosen in the input window and determines the lighting and shading of the objects. Affected routines: matNMRdefineglobals, matNMRinitvars, asknamepcolor3d, regelpcolor3d, regelplotseries, disppcolor3d, pcolor3d 28-02-'05: There was a bug in the routine that changes the axis position, the history macro wasn't appended to properly. Affected routines: regelaxisposition, RunMacro 07-03-'05: Sometimes creating a new 2D/3D viewer window whilst the rotate3D function was on creates problems because matNMR wouldn't find the correct handle it seemed. Also, when closing a window this could happen. Now the routines run UpdateFigure once to make sure the variables are read from the figure userdata. Affected routines: makenew2D3D, closenmr2d 07-03-'05: When starting STATES processing a check is made in the defstates routine to see whether the FT mode is already set to either STATES or STATES-TPPI. If not then the button would be changed to STATES, but the corresponding variables would not be set properly! This meant that later during the processing the button would revert back to its original setting, which is confusing for the user. Affected routines: defstates 09-03-'05: a longstanding nuisance has been solved: whenever the rotate3d function was on in the 2D/3D viewer window, the axis on which would be operated would not be made the current axis. This in turn meant that with the rotate3d functionality on, it would be impossible to change the axis in a multi-plot window. Now the SelectAxis routine is run if the axis which is clicked in, is not the current one. Affected routines: Rotate3D 15-03-'05: There was a bug in the execution of baseline corrections during the processing of history macros: a variable was used in two for loops causing an error when processing stepwise. Affected routines: RunMacro 22-03-'05: Executing an UNDO action went wrong when only 1 undo step was stored. Affected routines: doUnDo 22-03-'05: A change was made to the routine that creates a new 2D/3D window, in order for it to also add a colour bar whenever only 1 subplot is in the current figure window. Affected routines: makenew2D3D 22-03-'05: The clabels and klabels routines had not yet been updated to use to features added on 13-10-'04 (the additional check button in the input window. Affected routines: clabels, klabels 02-05-'05: The standard deviation is now also displayed whenever the "get integral" function is used in the 2D/3D viewer. Affected routines: Integrate2D 02-05-'05: Since crossovers from 1D to 2D functions are no longer allowed the baseline correction of 2D spectra could be cumbersome whenever many lines were in the spectrum, as they could be out of view. Previously one could create the projection onto the 2D and define the peaks on that projection. Now an additional check button in the baseline correction window allows the addition of the projection during peak definition. Affected routines: basl2dmenu, defpeaks, matNMRdefineglobals 02-05-'05: Sum projection are now (again) allowed even when the current mode is 1D, providing the 2D matrix isn't empty. Affected routines: askprojTD1, askprojTD2 ============= !web release! : may 2 2005, version 3.3.25 ============= 17-05-'05: To reduce the typical Matlab problem of not being able to find new functions I have inserted a try-catch construction at the beginning of nmr and nmr2d. This allows to catch error messages during initialization of matNMR, which is where these problems usually show up first. When an error occurs the path caches are first rehashed and then the initialization is tried again. If it fails again then an error message is displayed and matNMR stops. Similar rehashes have been added to the ResetAfterError routine. Affected routines: nmr, nmr2d, ResetAfterError 20-05-'05: The change made to the baseline correction (02-05-'05) had a small typo causing an error message whenever the matrix would not be square. Affected routines: defpeaks 22-05-'05: When opening an input window from the 2D pabel buttons windows the main 2D/3D viewer window would be pulled in front of the input window on some operating systems (e.g. Windows). Now a drawnow is done after the figure command used to make the main 2D/3D viewer window the current figure. Affected routines: asknamecont*, asknamemesh, asknameraster2d, asknamestack3d, asknameline 22-05-'05: Under Windows the input window was not removed immediately after pressing OK and therefore a drawnow was executed after the close command in QuiInput_2. Affected routines: QuiInput_2 23-05-'05: In order for the position of the 2D panel button window to be correct, the combined statement changing both the position and the visibility have been separated. Now the window is first made visible and then the position is changed. Fucking Matlab crap! Affected routines: matNMR2DPanelButtons 23-05-'05: Reading of Chemagnetics spectra has now been implemented. As the format changes from int32 to float32, between FIDs and spectra, a separate menu item in the files menu has been created similar to the existing item for reading Bruker processed data. Affected routines: matNMR1DButtons, askCMXlaad, CMXlaadSeries, regelCMXSpectraread, regelinputbuttonsCMXlaadSeries, askCMXlaadSeries, DetermineCMXSpectraRead, regelCMXSpectrareadSeries, CMXlaad, readCMXProcessedData, regelinputbuttonsCMXlaad 23-05-'05: When reading a series of Bruker processed data the common part of the path name would not be kept correctly and so the $#$ characters needed to be reinserted when loading another series. Affected routines: regelBrukerSpectrareadSeries, askBrukerlaadSeries 25-05-'05: The matnmroptions file was always stored in the default format, which would be v7 for Matlab 7 and newer. This is annoying when working with version 6.5 AND version 7 and higher simultaneously. Therefore I have added an option in saveoptions to always store in version 6 format. Affected routines: saveoptions 26-05-'05: A minor bug in the "text options" routine sometimes caused incorrect display of the font name at the start of the routine. This was because the length of the font list was explicitly set to 12, which is rubbish from when matNMR was first written. Affected routines: Qtextdata 30-05-'05: A fourth pre-defined colour scheme has been added which is sort of blueish. Actually it's a minor variation of the boring grey scheme. Affected routines: matNMRdefineglobals, matNMRinitvars, Qsetcolorscheme 10-06-'05: An option has been added to the 2D/3D viewer window to allow readjusting of the posneg colourmaps based on the spectrum in the current axis. Previously these limits were only adjusted when making a contour plot with positive and negative contours. Now this can be done independently from the colourbar button in the 2D panel window. To keep of the maximum and minimum of all spectra in each window two new entries in the userdata.PlotParams have been created. Affected routines: Subplots, matNMRinitvars, QColorMaps, plotcont, dispmesh, dispbar, displine, dispcolor3d, dispstack3D, dispraster2D, AdjustPosNeg, calccontlevels, doeopties 10-06-'05: A bug was found in the disppolarplot routine: plotting contours did not work because the routine did not invoke the CheckAxisCont routine to adjust the direction of the spectrum and define the variable QcontspecPlot. Plotting mesh plots only worked because it used the Qcontspec variable. Affected routines: disppolarplot 10-06-'05: When using the "get position" routine in the 2D/3D viewer, now also the index of the axis is given in both x and y direction. Affected routines: crsshair2d 10-06-'05: To reduce the length of the colourmap menu in the 2D panel window, a number of standard Matlab colourmaps have been removed as I have never used those before. Affected routines: matNMRinitvars 13-06-'05: The plotting of the projection during 2D baseline correction was finetuned to match the current axis limits and to take into account the starting and ending row/column. Furthermore the defpeaks routine did not distinguish between 1D and 2D mode yet, thus causing an error when trying 1D baseline correction. Therefore two separate routines have been made, defpeaks1d and defpeaks2d. Affected routines: defpeaks1d, defpeak2d, stopbasl2d 13-06-'05: The PosNeg colour map has been enlarged by a factor 3 to obtain a better colour resolution. Affected routines: ColorMaps.mat, AdjustPosNeg ============= !web release! : june 17 2005, version 3.3.41 ============= 20-06-'05: Until now the version was written explicitly in the matNMRinitvars routine and natually I would always forget to update it before a release. Now the release script writes the version into the matNMRVersion file, which is now loaded by the matNMRinitvars routine so the version will always be correct. Affected routines: copymat, matNMRinitvars, matNMRVersion 21-06-'05: The matlaad routine cleared some variables, which could then lead to an error when trying the "reload last binary FID". Affected routines: matlaad 23-06-'05: The reading of standard Bruker parameter files was incorrect as it accessed the acqus and acqu2s files, which is not correct. Now the acqu and acqu2 files are accessed. Affected routines: QReadParameterFiles 23-06-'05: When creating a contour plot with one contour the level would be NaN, thus causing an error. Now the routine is protected from that by plotting a contour halfway between the upper and lower level. Affected routines: calccontlevels 23-06-'05: When importing FID/spectra from the files menu the variable was imported into the workspace, after which the user needed to load it into matNMR. From now on the variable may be loaded directly into matNMR by selecting the appropriate check button in the input window. This does not apply to the importing of a series of variables was imported. Affected routines: askfidlaad, regelQfidread, askBrukerlaad, regelBrukerSpectraread, askCMXlaad, regelCMXSpectraread, asksimpsonasciilaad, regelsimpsonasciilaad, matNMRinitvars, matNMRdefineglobals 23-06-'05: The colour map in any new 2D/3D viewer window was totally screwed up on my laptop because the renderer mode was painters by default. Because of that I have changed the default renderer to zbuffer under Windows. Furthermore after each plot the change to painters was blocked under Windows. MATLAB BUG!!! Affected routines: matNMR2DButtons, plotcont, displine, dispbar, dispraster2D, dispstack3D, disppolarplot 23-06-'05: The terms "save to workspace" were changed to "Add to workspace". Also, the save to disk commands were also added to the files menu. Affected routines: matNMR1DButtons 27-06-'05: When plotting positive and negative contours the number of contours can be given as an array of length 2 when using different numbers of contours for positive and genative intensities. Now the routine that calculates the contour levels is protected against such an input when plotting only positive or negative contours. Affected routines: calccontlevels 27-06-'05: The color axis when plotting both positive and negative contours would be set to the maximum of the contour levels. Now this has been changed to always be to the maximum and minimum of the spectrum. Affected routines: plotcont 27-06-'05: To avoid confusion in the Windows version with the similarity in file names of Rotate3D and rotate3d, I have changed the Rotate3D scipt to Rotate3DmatNMR. Affected routines: Subplots, zoomcont, SelectAxis, Rotate3DmatNMR, peakpick, contzoomOFF, CopyFig, copyfignmr2d, disableZoomandRot, copymat, rotcont, extract 29-06-'05: By request an import filter has been added for the SMIS data format. Currently no spectral parameters are read, apart from the time domain sizes. Affected routines: askfidlaad, regelinputbuttonsfidlaad, regelQfidread, Qfidread 06-07-'05: The marker type would not always be shown correctly for certain types in the legend window because of crappy coding (findstr used instead of strcmp, causing ambiguity). Affected routines: QezLegend 18-07-'05: A bug was found when reading standard parameter files from Chemagnetics, which used arrays: an fixed spectral frequency sf1 would be used for TD1, instead of the sf that was used for channel 1. Affected routines: QReadParameterFiles 18-07-'05: A bug was found in the matNMRReadBinaryFID routine: a variable was defined within an if statement, which allowed the possibility of it not being defined, thus causing an error. Affected routines: matNMRReadBinaryFID 18-07-'05: A bug was found for the NTNMR filter: only half the FID was read. Affected routines: Qfidread 18-07-'05: A bug was found for the MacNMR filter: The length of the file wasn't read correctly. Affected routines: Qfidread 19-07-'05: Similar to the changes made on 22-05-'05 now all routines askstop* execute a drawnow before the QuiInput routine is called, in order to avoid the new window to be behind the old windows under Windows. Affected routines: askstop*, askclosenmr2d 19-07-'05: A bug was found in the matNMRSolventSuppression1D routine: an incorrect variable (Qpsc2) was called instead of MatrixIn. Affected routines: matNMRSolventSuppression1D 19-07-'05: A number of incorrect break statements were found in some of the offline processing routines. Affected routines: matNMRApodize1D, matNMRApodize2D, matNMRExtract1D, matNMRExtract2D, matNMRFT1D, matNMRFT2D, matNMRLP1D, matNMRLP2D 20-07-'05: The incorrect display of the tick label when using the horizontal stack plot has been solved. Affected routines: stack1dhorizontal 20-07-'05: The contourf routine in Matlab 7.0 turns out to be buggy. The Mathworks site shows at http://www.mathworks.com/support/solutions/data/1-SS98J.html?solution=1-SS98J that the legend is wrong. I have found that when the shading is set to 'flat' then the printing is incorrect because it reverts back to 'faceted'. I have implemented their workaround of using the 'v6' version. Affected routines: plotcont 21-07-'05: When extracting a part of a spectrum with axes in points, the history macro would not be created correctly. Now the history entry is made before resizing the spectrum. Affected routines: regelextract1d, regelextract2d 26-07-'05: Linear prediction did not work properly for 2D matrices in the indirect dimension, whenever the Hypercomplex flag was 0 (i.e. real data). Now the distinction is properly made. Affected routines: regellp2d 28-07-'05: The definition of an external reference was not stored in the history. Furthermore, the regeldefinereference routine did not execute its checks properly. Affected routines: regeldefinereference, RunMacro, AnalyseMacro, regelimportreference 28-07-'05: When printing repeatedly to a UNIX printer, the matprint routine may crash because it didn't remove the space it put between the "-P" and the printer name. Affected routines: matprint 29-07-'05: A double end in the whataxis1d routine caused a crash Affected routines: whataxis1d 29-07-'05: A number of changes have been made to use the external reference features more efficiently. Up to now it was cumbersome to make a reference to one spectrum in matNMR, and then apply that reference to another spectrum. That was because only the axis vector could be stored and not the reference values as used by the external reference feature. Now, when making an axis vector in PPM/Hz or kHz, the reference values can be stored as an external reference, thus allowing them to be used for other spectra. Affected routines: stats1d, scale1d, askeditreference, regeleditreference, askdefinereference, regeldefinereference The "edit external reference" was renamed to "apply external reference". Affected routines: matNMR1DButtons When using the default axis, the menu item "use default axis" shows a check flag, when not using it the check flag is removed. Affected routines: matNMRdefineglobals, matNMR1DButtons, regelsetdefaultaxis, GetDefaultAxis, asaanpas It is now possible to perform a "reset default axis". This will clear the reference values for the default axis (center of spectrum is 0). Previously this was automatically done when applying the "use default axis" feature. Affected routines: resetdefaultaxis, regelsetdefaultaxis When saving variables, now the reference values for the default axis are also stored when the default axis is currently switched off. That way, when switching it back on, the proper axis will be shown again, without the need to import an external reference again. The routines used for loading variables also have been changed to accomodate this feature. Affected routines: regelsave?d, regelsavedisk?d, checkinput1d, checkinput2d When creating a ppm/Hz/kHz axis from the "ruler X-axis" menu, now the reference values for the default axis are also created and will therefore be stored with the spectrum. This allowd the user to switch to the default axis, without losing the chemical shift reference. NOTE: the reason we don't always use the default axis now is that the user doesn't have to specify all the spectral parameters correctly when making an axis in this menu! Affected routines: scale1d A variable has been defined, which contains the external reference within matNMR. These are stored in the matNMR structure, i.e. when saving in either the workspace or on disk. From now on matNMR structure may therefore also be used as input for the "Apply external reference" feature. Affected routines: matNMRdefineglobals, matNMRinitvars, regelsave?d, regelsavedisk?d, GenerateMatNMRStructure, checkinput?d, scale1d, SwitchTo1D, regeleditreference When connecting the history macro to the FID, the external reference data are stored as well, thus allowing to recall the external reference from that variable as well. Affected routines: regelconnectoFID 30-07-'05: The matprint routine now uses wysiwyg by default and has a renderer setting 'auto' added to it, which will determine the rendering mode from the window that needs printing. Affected routines: matprint The matprint routine no longer ran when matNMR wasn't started because the QColorScheme variable would not be known. Now the classic colorscheme is defined in case matNMR hasn't been started yet. Affected routines: matprint 30-07-'05: The reading of CMX arrays has been extended such that it shows the parameter names and their values for arrays. Output is written to the console window. Affected routines: QReadParameterFiles 02-08-'05: A tool to facilitate phasing of 2D spectra has been implemented. The "2D tool" provides two more slices in the window by which to judge the phase settings. Affected routines: matNMRdefineglobals, matNMR1DButtons, fasemenu, stopfasemenu, enablephasebuttons, CheckNumeric, setphase1d, Switch2Daid, makenew1D, makenew2D, pickslices2Daid, update2Daid 02-08-'05: The positioning of the window for the colour scheme settings was not good. Now the top is aligned with the top of the screen, whereas before the bottom was aligned with the bottom of the screen. Affected routines: Qsetcolorscheme 03-08-'05: An additional safety measure has been implemented to ensure that all caches are properly updated. From now on for each new release a new file is chosen, which is then checked at startup to see if it exists in the Matlab cache. If not then the rehash commands are executed. Affected routines: nmr, CheckForSpecificFile 03-08-'05: Put in an effort to make all webpages, including the manual, compliant with w3c standards for HTML 4. Affected routines: all .html files 04-08-'05: Extended the diffusion fitting to include bipolar gradients, which require an additional pi-pulse and hence an extra fixed parameter to define before the fit. This parameter is set to 0 when not needed. Affected routines: matNMRdefineglobals, matNMRinitvars, Difffit, Diffpk_init, Diffpk_qvt, Diffpk_qvtdf, Diffpk_voigt, regeldefparsDiff 04-08-'05: Found a simply way to speed up 2D phase correction: previously slice-wise multiplication was performed in both dimensions. A small test showed however that full-matrix multiplication is faster in TD2. For TD1 the speed wasn't improved by doing that, but the old algorithm was very inefficient because it recalculated the same thing 4 times. So now that is as fast as the phase correction in TD2. The only problem is that Matlab 6.5.1 and Matlab 7.0.4 behave differently: Matlab 7 is faster in full-matrix multiplications, whereas Matlab 6.5 likes column-wise multiplications best. Therefore the routine adopts its action based on the version of Matlab. The matNMRSetPhase2D routine just operates on columns only Affected routines: setphase2d, matNMRSetPhase2D 05-08-'05: When selecting another matNMR distribution (goodies menu) then the current directory was used as a starting point to look for a new directory, instead of the current matNMR directory. Affected routines: selectdistribution 14-08-'05: The last-used function and order for baseline correction weren't rememebered properly. Affected routines: matNMRdefineglobals, matNMRinitvars, basl2dmenu, doebasl2dcor, basl1dmenu, automanu, doebasl1dcor 15-08-'05: Made a small change to the legend routine such that when the Refresh button is pushed, the strings that are currently in the edit buttons will be preserved, even if a different number of lines is present in the main window, compared to when the legend was made. Affected routines: QezLegend 15-08-'05: A typo in the routine to automatically remove the Bruker digital filter produced an error for certain spectra which used DECIM=8, as the typo confused 7 with 8. Affected routines: DetermineBrukerDigitalFilter 15-08-'05: The plotting routines in the 2D/3D viewer now distinguiah their actions between axes where the hold flag is on and ones where it is off. When the hold is on, the axis parameters are no longer written to the userdata of the figure window, because matNMR assumes that the first spectrum is the main one. Therefore, care must be taken when using the "get position" function in such situations! Also, when the hold is on contour plots are put on top of all other spectra. This is done by putting the zdata property of the patch to the maximum of all axis children. Affected routines: plotcont, dispmesh, dispstack3D, dispraster2D, dispbar, displine, disppcolor3d, disppolarplot 01-09-'05: The syntax for the uigetfile routine has changed in Matlab 7. Also, matNMR used to call the routine in a UNIX-specific fashion, which for example caused an error on Macintosh. Now the position of the window is no longer specified and it should work on all platforms. Affected routines: Brukerlaad, BrukerlaadSeries, CMXlaad, CMXlaadSeries, fidlaad, fidlaadSeries, matlaad, matlaadSeries, regelBrukerdig, simpsonasciilaad, simpsonasciilaadSeries ============= !web release! : september 2 2005, version 3.4.0 ============= 02-09-'05: Found a remaining few bugs in the external referencing routines: -the "define external reference" routine crashed because a check on QTEMP6 wasn't performed correctly. Now its length is checked as well. Affected routines: askdefinereference -When defining an external reference the result wasn't stored in a structure as it was implemented in the "ruler X-axis" routine (scale1d). Affected routines: regeldefinereference -A variable lacked a "Q" in front of it in one of the routine, causing it to be left behind after closing matNMR Affected routines: checkinput1d -When reprocessing from history the precision of the frequency and value weren't set high enough and therefore the axes would be incorrect. Now the precision of the num2str routine is set to 10 digits. Affected routines: RunMacro -When defining an external reference, or applying one as it is the same routine in the end, the axis vectors weren't explicitly defined. This could cause problems e.g. when executing a macro where the reference was changed for a 2D spectrum. As the axis vectors would only be defined explcitly when going into a particular dimension, the user would think the axes were fine, but in fact they were not. Saving the spectrum or looking at it in the 2D/3D viewer mode would show the problem. Now the axis vectors are explicitly defined after the reference is changed. Affected routines: regeldefinereference 08-09-'05: The stack 3D routine always plotted a box around the axis because it checked the wrong viewing-angle parameters. Affected routines: dispstack3D 09-09-'05: The standard deviation of the noise level would not be set correctly in the peak fitting routine, for frequency axes of gamma>0 because the indices of the noise boundary would not be sorted. This caused a NaN and hence all sorts of problems. Affected routines: peakfit Also, the noise level would not be reset when refreshing the screen. Affected routines: peakfit 21-09-'05: The default variable name was matNMR, which meant one had to delete it first before a new name could be written in the input window. Now, no name is shown when starting matNMR. Affected routines: matNMRinitvars 21-09-'05: The default axis would not be correct after projecting on TD1 or TD2. Affected routines: regelprojTD1, regelprojTD2 22-09-'05: The crosshair routine in the 2D/3D viewer has been improved: now the original spectrum of a particular axis is recreated when changing axis/figure and then the crosshair routine will give the correct intensities when going over the spectrum. Affected routines: SelectAxis, UpdateFigure 22-09-'05: When switching windows in the 2D/3D viewer one would sometimes get an error if the windows had colour bars in them. This was because changes in the colour bars weren't stored in the figure userdata, only in the current variables. Changing windows would show this problem because the handles to the colour bars would not be correct. Affected routines: contcmap To allow this feature to work for a 3D matrix the temporary variable Qtempspec2 is no longer deleted after the regelplotseries routine is finished. This obviously assumes that no new series has been plotted after the user tries to get the intensity of a spectrum of the previous series! Affected routines: regelplotseries 26-09-'05: The figure buttondown function was replaced by the peak picking routine, but not restored after finishing. Affected routines: GetPeaks 26-09-'05: matNMR would fail to initialize whenever a variable called "i" would be present in the workspace because the matNMRinitvars routine tried to access "i" as the complex i. As this is very unsafe now the matNMRinitvars routine uses sqrt(-1) instead. Affected routines: matNMRinitvars 26-09-'05: A possibility was built into matNMR to allow normalization of the Chi^2 that is calculated during T1 and diffusion fitting. Previously this was only done in the peak fitting routine. The normalization constant (e.g. standard deviation of the noise) must be entered by hand in an edit button. Affected routines: T1fit, T1pk_init, T1pk_udata, T1pk_inivl, Difffit, Diffpk_init, Diffpk_udata, Diffpk_inivl 26-09-'05: Matlab 7.1 is now recognized by matNMR. Affected routines: matNMRinitvars 26-09-'05: A novel feature has been built into the 2D/3D viewer: recently Cadars, Lesage & Emsley published a paper on the use of so-called conditonal probability matrices (CPMs) to look at the type of disorder that is apparant from the shape of crosspeaks in high-resolution experiments. This means nothing more than renormalizing the crosspeak but can be a useful visual aid I think. Affected routines: matNMRdefineglobals, matNMRinitvars, matNMR2DButtons, askcreateCPMs, regelcreateCPMs, CreateCPMs, CheckAxisCPM 27-09-'05: When clicking on a supertitle that is not in the current window, e.g. in order to edit its text then the buttondownfunction wouldn't work properly. To prevent that now a SelectFigure is executed before editing or moving the axis. Affected routines: Subplots 28-09-'05: When stopping the 2D/3D viewer without stopping the main window, then the counter that keeps track of how many 2D/3D viewer windows are open (or were open), was not reset. This could give very high numbers, which was not very useful. Now, for cosmetic purposes the counter is reset. Affected routines: stopnmr2d 28-09-'05: Two entries to the userdata, that are created by all plotting routines in the 2D/3D viewer, were not initialized by the Subplots routine. This was a cause of error if a user plotted his/her own spectrum and then tried to e.g. use the "get position" routine. Affected routines: Subplots 28-09-'05: The "get position" routine in the 2D/3D viewer did not show the axis coordinates properly if no spectrum name was known to the routine, even if the axes were known. Now this has been corrected and the axis coordinates are shown correctly. Affected routines: crsshair2d 28-09-'05: A check is now performed on all input matrices to see whether they are acceptable to matNMR. For example, the "i" and "j" are no longer acceptable as input as they will interfere with Matlab functions. Affected routines: checkinput ============= !web release! : october 4 2005, version 3.4.17 ============= 04-10-'05: The baseline correction routine have always been rather instable when using high orders of polynomials. This turned out to be because of the simplicity of the algorithm. Now a more stable algorithm has been found, which is based on the Matlab polyfit.m routine, which uses a QR decomposition of the polynomial matrix first before doing the left matrix divide. Somehow this works better. Affected routines: doebasl1dcor, doebasl2dcor 05-10-'05: The plot direction in the peak fitting routine was not always correct throughout the routine, causing the spectrum to flip a few times in some cases. Affected routines: peakfit 05-10-'05: By default the GenerateMatNMRStructure routine generated a structure with both dimensions defined as spectra. That would cause a problem when concatenating a series of 1D FIDs/spectra since then the second dimension (TD1) would be a spectrum, which is generally not correct. Now by default both dimensions are FIDs. Affected routines: GenerateMatNMRStructure 05-10-'05: Cancelling the removal of the Bruker digital filter did not work properly in one particular instance, causing an error message. Affected routines: regelBrukerdig 12-10-'05: By default now the PaperMap colormap is selected when creating CPMs. Before the colormap of the originating window was used, which is not always good. Affected routines: CreateCPMs 12-10-'05: A typo in the routine for horizontal stack plots caused an error when working in TD1. Affected routines: stack1dhorizontal The horizontal stack plot was not correctly defined for some types of axes. Affected routines: stack1dhorizontal 13-10-'05: Executing a dual display when the current view is a horizontal stack plot caused the name of the variable to be added to the list of 10 last-used variables, regardless whether the variable was already in the list. Affected routines: dualdisp Executing a dual display when the current view is a horizontal stack plot showed inverted spectra depending on whether the axis variable was ascending or descending. Affected routines: dualdisp 14-10-'05: To avoid errors in the CreateCPMs routine due to numerical instabilities, a check is now performed and the plotting of the CPMs is refused if problems are encountered. Affected routines: CreateCPMs 26-10-'05: When loading series of FIDs/spectra one had to fill in too many things: Now the RangeOut is set the same as RangeIn, as soon as RangeIn is defined. This still allows the user to change RangeOut but is not required. Affected routines: regelinputbuttonsfidlaadSeries2, askfidlaadSeries, askBrukerlaadSeries, askCMXlaadSeries, asksimpsonasciilaadSeries Furthermore a reasonable guess for the common part in the workspace is now made as soon as the filename is defined and a single $#$ code is found. Affected routines: regelinputbuttonsfidlaadSeries3, askfidlaadSeries, askBrukerlaadSeries, askCMXlaadSeries, asksimpsonasciilaadSeries 29-10-'05: Found yet another complex conjugate (') instead of a pure transpose (.') in some old code. Affected routines: Qview0, muisinput, getdiag, getantidiag 01-11-'05: Added support for printing in PNG format to the matprint routine. Affected routines: matprint 05-11-'05: An error message appeared when trying to get a horizontal display when the current display was already a horizontal display. Now the routine no longer allows this request when the current display is not the default plot (QPlotType = 1); Affected routines: stack1dhorizontal 05-11-'05: Set the horizontal alignment to left for some of the edit buttons in the main window. Affected routines: matNMR1DButtons 08-11-'05: When Matlab 7 was introduced matNMR did not store its options file in a backward compatible fashion. Therefore it is possible that users are trying to run Matlab 6, whilst loading a Matlab 7-style options file, which causes an error message and incoherent behaviour in matNMR. Now, a try-catch loop has been built around the load command to prevent this error. If an error occurs then the options file that is supplied with the code by default is used. Affected routines: matNMRinitvars 08-11-'05: An additional stabilization was required in the routine for conditional probability matrices as often it would report a numerical instability. Affected routines: CreateCPMs 08-11-'05: Found another incorrect usage of complex conjugate (') instead of (.'). To keep everything else constant several routines had to be corrected as they corrected the initial error. Affected routines: Qfidread, four1d, four2d, matNMRFT1D, matNMRFT2D, setphase1d, setphase2d, matNMRSetPhase1D matNMRSetPhase2D, docurrentphase, update2Daid 09-11-'05: When flipping a spectrum left/right then fliplr routine was used. This had one drawback for complex data, i.e. that the direction of phase correction is reversed compared to the normal direction. In principle one should take the complex conjugate in time domain so this problem doesn't occur. Therefore, now a 'conj' is executed after the 'fliplr'. Affected routines: flipspec, matNMRFlip1D, matNMRFlip2D 09-11-'05: The CPMs needed some more refinement: now the contour limits and the multiplier can be set manually so that the CPM plots may be optimized for e.g. printing in black and white (as colour is very important for the low S/N peaks such optimizations are typically very delicate) Affected routines: matNMRdefineglobals, matNMRinitvars, askcreateCPMs, regelcreateCPMs, CreateCPMS 10-11-'05: The zero frequency calculated for the Default Axis was not correct but shifted by 1 point. Affected routines: GetDefaultAxis, GetDefaultAxisDual 10-11-'05: Removed 'all' instances of non-integer indices into vectors and matrices of form "Qdim1/2", "Qdim2/2" and "Qdim1d/2" as Matlab 7 crashes when this happens. In most instances even number were assumed, which makes sense as the FT should be a power of 2 for optimum speed. Affected routines: regelshearingFD, matNMRShearingTransformationFD, regelshearingTD, matNMRShearingTransformationTD, defstates, scale1d, apodize1d, matNMRApodize1D, matNMRApodize2D, Qfidread, regelQfidread, regelQfidreadSeries, matNMRReadBinaryFID, readCMXProcessedData, matNMRConvertStates2D 10-11-'05: The offline processing routines for 2D did not always execute "return" whenever a check resulted in an error message. Affected routines: matNMR*2D Also, now a beep is executed whenever an error occurs. Affected routines: matNMR*1D, matNMR*2D, matNMRShearingTransformationFD, matNMRShearingTransformationTD 10-11-'05: Changed the routine for linear prediction in 2D mode such that now areas of peaks may be assigned which should be predicted. This can save lots of time because noisy areas are no longer fitted. Affected routines: matNMRdefineglobals, matNMRinitvars, defpeaksLP, regellp2d, RunMacro, AnalyseMacro 10-11-'05: Added sine FT to the four modes button. This does the normal FT, using the mode specified in the UIcontrol, but then does a 90 degree phase shift and inverts the first half of the spectrum. Affected routines: Qoptions, matNMR1DButtons, four1d, four2d, historyFT, RunMacro, AnalyseMacro 10-11-'05: A long-standing bug in the shearing in time domain has been fixed. The frequency-dependent phase shift was performed in the incorrect dimensions, recombining the complex parts instead of the hypercomplex parts, which lead to vast spectral distortions. Affected routines: regelshearingTD, matNMRShearingTransformationTD 10-11-'05: A typo was removed from the matNMRSetPhase2D routine. Affected routines: matNMRSetPhase2D Furthermore, the phase correction in 2D mode did not allow for hypercomplex matrices in the offline processing routine. Affected routine: matNMRSetPhase2D 12-11-'05: The reference values for the default axis weren't stored in the undo matrices yet so that could potentially cause incorrect axes. Affected routines: regelUNDO, doUnDo 15-11-'05: The axis direction wasn't always correct in the stack3D routine. Affected routines: dispstack3d, stack3dreverse 15-11-'05: Removed the transpose button from the main window because it tends to confuse people as they think it is needed to change the dimension. Affected routines: matNMR1DButtons, stopmenu2d, v2dmenu 15-11-'05: Until now the default axis was switched off when executing an extract 1D or 2D. This was not really necessary and has been changed now. This change required many changes because for external referencing the carrier was always assumed to be in the center of the spectrum (floor(Qdim1d/2)+1). But after an extract this is usually no longer true. Therefore an additional variable had to be introduced in order to keep track of the index of the carrier. Affected routines: GenerateMatNMRStructure, matNMRdefineglobals, matNMRinitvars, GetDefeaultAxis, checkinput1d, four1d, ClearDefaultAxis, resetdefaultaxis, regelextract1d, regelUNDO, doUnDo, SwitchTo1D, regelextract2d, four2d, checkinput2d, regelsave1d, regelsave2d, regelsavedisk1d, regelsavedisk2d, scale1d, regelgetcolumn, regelgetslice, viewrow, viewcolumn, GetDefaultAxisDual, checkinputdual, checkinputcont 16-11-'05: Previously the routine that defines an external reference would apply the same values to both dimensions of the 2D spectrum whenever only 1 set of values were entered. This would make it difficult to reference heteronuclear experiments for example where the frequency is different in both dimensions and one would like to apply two separate reference experiments for the two dimensions. Now a single set of values will apply only to the current dimension. Affected routines: regeldefinereference 17-11-'05: The routine for doing dual display of horizontal stack plots did not stop after producing an error message because the error message was produced in a subroutine. Now it is made in the main routine. Affected routines: checkinputdual, dualdisp 21-11-'05: The name of a 2D FID/spectrum would not remembered properly when switching between 1D and 2D modes. This meant the title above the plot would not be correct. Now a separate variable is used to store the name of the last (i.e. current) 2D matrix. Similarly a variable for 3D matrices has been renamed/introduced. Affected routines: matNMRdefineglobals, matNMRinitvars, regelgetcolumn, regelgetslice, viewrow, viewcolumn, stack1dhorizontal, stack1dcertical, regelprojTD1, regelprojTD2, getdiag, getantidiag, regelskyline, askname, reload3d, makenew3D, regel2d, regel3d 23-11-'05: Sometimes, e.g. after a horizontal stack plot, pressing the "+row" button would yield an error because the removecurrentline couldn't find a proper line and then the simpelplot routine would crash. Now a check is done to ensure that a full "reset figure" is done in such cases. Affected routines: simpelplot 23-11-'05: Have extended the handling of 3D matrices to allow access to the processed spectra in the output variable. Until now only the input variable could be accessed which was rather limiting. Affected routines: matNMR3DButtons, view2d, makenew, regelexecutemacro3d 23-11-'05: An exeptional situation was encountered which resulted in an error: when indexing into a 3D or higher-dimensional matrix to obtain a 2D matrix and loading this into matNMR, the routine that checks the input would crash. As this type of input highly unlikely to be used by many people I have made a check to spot this and avoid the error but haven't implemented support. Affected routines: checkinput2d 23-11-'05: When concatenating a series of 2D spectra into a 3D matrix, sometimes an error would occur because the putinlist3d routine would try to write into a button in the 3D window, regardless of whether the window would exist or not. Now a check is done. Affected routines: putinlist3d 23-11-'05: When executing a macro on a 3D matrix the default axis could be missed because after the last processing step in the macro the default axis wasn't generated. Now it is. Affected routines: regelexecutemacro3d 23-11-'05: When saving a processing macro in the main window, the last change of dimension would not be stored as this would only be done before the next processing action. Now the dimension-dependent parameters are stored once more to ensure that the view after the executing of the macro is the same as when the user stored the macro. Affected routines: regelsaveasmacro, regelstoprecordingmacro 24-11-'05: Added a button "Load 3D" to the 2D menu in the main window. That way one can have access to the 10 last-used 3D matrices as well. Affected routines: matNMR1DButtons, v2dmenu, stopmenu2d, regel3d 24-11-'05: When using the same variable for output as for input for 3D manipulation, the input variable would be erased. Now a check is done to ensure that this doesn't happen and a warning message is printed. This also covers the situation that the output variable is equal to any other variable in the workspace. Affected routines: regeloutput3d 24-11-'05: Expressions with commas "," in them were not interpreted correctly since the comma wasn't taken as a special character by the checkinput routine. That would cause variables not to be recognized properly because of the comma added to the variable name. Affected routines: checkinput 24-11-'05: A loaded variable could produce the total removal of the axis from the main window by Matlab whenever the span in the Y direction was not zero but still exceedingly small (1e-313). Matlab obviously doesn't like that. Now the routine that determines the axis limits uses the machine precision instead of 0 to judge whether the limits are very small. This is clearly a Matlab issue since in the x-direction they don't allow an axis span of less then 1e-16 but for the y-axis they don't have such restrictions. Affected routines: DetermineNewAxisLimits 30-11-'05: A UIcontrol used for the 2D phasing aid was not declared global, which caused a problem when reprocessing a macro with the matNMRRunMacro routine. Affected routines: matNMRdefineglobals ============= !web release! : november 30 2005, version 3.5.0 ============= 30-11-'05: Changed the simpelplot routine to execute a "reset figure" if the current plot type is not the default type. This would for example be needed when changing row/column in a 2D whilst being in a horizontal stack plot. Affected routines: simpelplot 03-12-'05: Reading binary FIDs of data formats which do not require input of the time domain sizes no longer worked because of an undocumented change in the routines that read binary FIDs. Affected routines: Qfidread, regelQfidread, regelQfidreadSeries 04-12-'05: The VNMR import filter yielded spectra that were flipped L/R in all tests that I did. Therefore I have added a complex conjugate to the FID after importing it to ensure the proper direction. Affected routines: Qfidread 05-12-'05: Implemented reading of external references in VNMR format. Affected routines: QReadReferenceParameterFiles 07-12-'05: Added the option of showing the full probability when creating CPMs. This shows the correlation of disorder even easier than the CPMs but is (naturally) much more sensitive to numerical artefacts (induced by noise). Affected routines: matNMRdefineglobals, matNMRinitvars, askcreateCPMs, regelcreateCPMs, CreateCPMs, CheckAxisCPMs 12-12-'05: Storing the plotting action of changing the title and axis labels in the main window did not work and produced an error message. This was because the figure window would be closed before the macro information was read and stored. Strangely enough this was correct in the routine for the 2D/3D viewer! Affected routines: klabels 14-12-'05: Got sick and tired of the classic colour scheme and have made minor adaptations and have made this the default colour scheme. Affected routines: matNMRdefineglobals, matNMRinitvars, Qsetcolorscheme 11-01-'06: The dual display at equal maximum did not differentiate all possible display modes (real/imag/abs etc). Now it does for the default plotting type. Affected routines: dualdisp 13-01-'06: The vertical stack plot didn't set its axis limits properly when entering a displacement value of 0 or negative values. Affected routines: stack1dvertical 16-01-'06: When executing linear prediction using many points from the FID to predict with, the routine could yield NaN phases and zero amplitudes. Now the output of both linear prediction algorithms is protected from NaN output so that subsequent manipulations aren't distorted. Affected routines: lpsvd, itcmp As linear prediction with more than 256 points to predict from becomes slow, a warning message is given to alert the user to reduce the number of points to predict with. Furthermore in the input window for 2D LP it now says "(>128 = slow!)" to indicate to the user beforehand that the number should not be too big. Affected routines: regellp1d, regellp2d, asklp2d 19-01-'06: When performing a shearing transformation in frequency domain the hypercomplex parts were not set to 0 thus allowing strange phase corrections to be possible, which resulted in spectral artefacts. Instead of performing spline interpolation on the imaginary parts too (time consuming), I've chosen to zero all imaginary parts and display a notice to the user. Affected routines: regelshearingFD 19-01-'06: When loading a 1D or 2D spectrum without spectral information (including axis vectors) then the default axis would be created using the current values. This would give a strange axis vector just after having started matNMR. Now the reference values are zeroed when loading such spectra. Affected routines: checkinput1d, checkinput2d 19-01-'06: Extraction of a spectra in the main window did not work with an increment. This has now been added. Affected routines: regelextract1d, regelextract2d, RunMacro 19-01-'06: Extraction of part of a spectrum in the 2D/3D viewer didn't work anymore because somehow there was interference between the Extract2D routine and the SelectAxis routine. This was one of these strange problems with Matlab where it is sometimes unclear why the graphics and event buffers aren't cleared before a new routine is started. Because there was no logical reason why the SelectAxis routine should be called at that stage. To solve this problem the buttondown functions of the figure and axis are restored only after the user has gone through the input window with the extraction information. Affected routines: Extract2D, regelextract 20-01-'06: The Subplots routine still set the renderer to painters for Windows. This has been changed temporarily to zbuffer in all other routines because Matlab screws up the colorbar in that mode (see change 23-06-'05) Affected routines: Subplots 20-01-'06: Similar to the previous change, the matprint routine has been changed such that now, when the user asks for automatic detection of the rendering mode for printing (i.e. matprint decides based on the figure window's rendering mode), zbuffer is changed to painters under Windows, when there are no surface objects in the figure. Affected routines: matprint ============= !web release! : january 23 2006, version 3.5.17 ============= 23-01-'06: A small button has been added to the 2D/3D viewer window to make that window the current window. This solves problems with selecting the window. Affected routines: matNMR2DButtons 23-01-'06: The linear prediction algorithm could sometimes yield a result with an extremely small amplitude and negative dampening, which would then yield a meaningless result. Now such results are filtered out. Affected routines: lpsvd, itcmp 26-01-'06: Have tried to implement the CMXW format (old chemagnetics format) for a user. Format seems similar to the spinsight format except for different file names and different parameter files. Affected routines: askfidlaad, askfidlaadSeries, regelQfidread, regelQfidreadSeries, QReadParameterFiles, Qfidread, regelinputbuttonsfidlaad, regelinputbuttonsfidlaadSeries, matNMRReadBinaryFID 01-02-'06: It was possible to switch windows in the 2D/3D viewer and crash matNMR because it would not find a correct axis handle. Affected routines: UpdateFigure 01-02-'06: Fixed a bug in an external routine called uiMultiText, which claimed to write multiple text lines into an axis but instead only printed 1. Now it prints multiple lines, if a char(10) is placed somewhere in the s Affected routines: uiMultiText 01-02-'06: Every once in a while there would be a problem with the 2D/3D viewer window when it tried to delete a colorbar, which should be in the window (and often was still visible on the screen), but somehow was already gone. This seems to be a Matlab bug, possibly related to switching windows when the graphics buffer is still being emptied. Now a try-catch construction has been used whenever the colorbar is deleted. Should an error occur then a message is issued that the window appears corrupted and needs to be closed. Affected routines: regelcaxis, plotcont, dispstack3D, dispraster2D, disppolarplot, disppcolor3d, dispmesh, displine, dispbar, contcmap, contcbar APPENDED 17-02-'06: found the real reason for this problem: this error occured when changing the colormap in an axis that had a colorbar. Because the userdata of the figure wasn't correctly stored afterwards by the contcmap routine, the abovementioned routines would see the problem. Now the contcmap routine has been corrected. The try-catch construction for deleting the colorbar has been left in the routines because of enhanced stability that way. Affected routines: contcmap 07-02-'06: The change of 19-01-'06, in which an increment was allowed when performing an extraction of a 1D or 2D spectrum in the main window, did not produce the right macro code. This resulted in pronlems when reprocessing the macro. Affected routines: regelextract1d, regelextract2d 08-02-'06: The information concerning the default axis wasn't stored when executing the offline routine matNMRRunMacro. Now it is, similar as is done in regelsave?d. Affected routines: matNMRRunMacro 11-02-'06: A user complained about an error in Matlab 7.1 Student edition, that could relate to the fact that a variable QColorScheme was named similarly to a script called Qcolorscheme. Now the script has been renamed Qsetcolorscheme. Affected routines: Qcolorscheme (now Qsetcolorscheme), matNMR1DButtons, matNMR2DButtons 02-03-'06: The colorbar routine has changed considerably in Matlab 7 and now it not only looks different (and doesn't scale properly for multi-plot windows!!) but also uses a function_handle array as a buttondownfunction. This is annoying because that makes it hard for me to define my own buttondownfunction. Therefore I have generated a script that allows me to call for a version 6-style colorbar when working in Matlab 7. Affected routines: colorbarmatNMR, contcbar, contcmap, dispbar, displine, dispmesh, disppcolor3d, dispraster2D, disppolarplot, dispstack3D, plotcont, regelcaxis 02-03-'06: Have made colorbar axes selectable so the axis properties can be changed similarly to normal axes. Affected routines: SelectAxis, colorbarmatNMR 03-03-'06: Have found two problems relating to the backwards compatibility of matNMR: the rehash functions have only been introduced in Matlab 6.0, whilst the backgroundcolor property for text objects was added in Matlab 6.5. Since the colour scheme is a good feature and hard to change, and since there may well be more of such problems, I have decided to change the backwards compatibility of matNMR on the website as follows: Version 3.2.44 has been classified to require Matlab 6.0 and higher, whilst starting from matNMR 3.3.0 Matlab 6.5 is needed. Affected routines: download.html ============= !web release! : march 6 2006, version 3.5.29 ============= 07-03-'06: MatNMR failed to work on all platforms because of an ancient routine that checks the platform. Now the routine has been adopted to fit the output given by Matlab 6.5 and 7. Affected routines: DeterminePlatform 09-03-'06: When running a macro on a 2D variable user-defined axes would sometimes disappear because in the final step the view would be refreshed and since the vector for the current 1D plot hadn't been updated yet, the default axis would appear. Affected routines: Runmacro 10-03-'06: A bug has crept in the 1D linear prediction routine using the ITCMP method: the amplitude of the predicted points was not correct due to a rescaling of the spectrum. Affected routines: regellp1d 10-03-'06: The linear prediction routines were stabilized a bit more against errors caused by unnecessary scaling factors in the amplitude of the time-domain signal. Now the signal is first normalized to 1 and then fitted and rescaled to its original intensity. Affected routines: itcmp, lpsvd 10-03-'06: Asking for a new 2D/3D viewer window from the menubar did not yield the same as doing that from the 2D panel window. As the latter took the settings of the current window, now asking for a new window from the menubar also does that. Affected routines: matNMR2DButtons 10-03-'06: Have changed the implementation of the PosNeg colormaps. Before one would had to adjust the levels to the current spectrum every time one plotted a spectrum. Now the colormap name is stored in the figure userdata and is used to determine whether or not to readjust the PosNeg maps. Affected routines: matNMRdefineglobals, matNMRinitvars, Subplots, makenew2D3D, contcmap, UpdateFigure, QColorMaps, dispbar, dispmesh, disppcolor3d, disppolarplot, dispraster2D, dispstack3D, plotcont 11-03-'06: The change of 05-10-'05 in the GenerateMatNMRStructure routine has caused a bug in the reading of Bruker/CMX and Varian spectra since the TD2 dimension was now set to FID instead of spectrum. Now the FID status is always set explicitly. Affected routines: regelBrukerSpectraread, regelBrukerSpectrareadSeries, regelCMXSpectraread, regelCMXSpectrareadSeries 11-03-'06: When reading spectra from disk the index of the carrier frequency was not set. This has become necessary since the changes to the default axis of 29-07-'05. Affected routines: SIMPSONread, regelBrukerSpectraread, regelBrukerSpectrareadSeries, regelCMXSpectraread, regelCMXSpectrareadSeries 14-03-'06: The linear prediction routines now provide a warning message whenever the svd doesn't converge properly. Affected routines: lpsvd, icmp 14-03-'06: The linear prediction routines now first check to see whether the norm of the vector is significant, otherwise no (cpu expensive) predicition is done. Affected routines: regellp1d, regellp2d 14-03-'06: As had been noticed on 24-11-'05, Matlab doesn't like matrices with values much smaller than the machine precision. Now I also noticed that the zoom function doesn't work properly in such cases. Therefore, all matrices are checked for their norm upon loading and a warning message is issued whenever the matrix is exceedingly small. Affected routines: checkinput1d, checkinput2d, checkinputcont, checkinputdual 22-03-'06: Matlab 7.2 is now recognized. Affected routines: matNMRinitvars 28-03-'06: Have changed the effect of the "zoom y" and "expand y" buttons in the main window as zooming using these buttons was often difficult because the lower limit and the span were changed simultaneously. Now the lower limit is changed much less than before so that when the baseline is close to the bottom of the axis, then it appears to stay in place. Affected routines: expansiey, zoomy 31-03-'06: The automatic recalculation of the PosNeg colormap limits worked fine except that an additional rendering step was observed, i.e. first the old colormap was shown and then the recalculated. The reason for this slowness was the command "figure(Qcntrs)" in the colormap routine, which forces a rendering step. Now this command is only issued if the current window is NOT equal to Qcntrs. Affected routines: contcmap, zoomcont, whataxis2d, rotcont, Qshading, print2D3D, prescale2d, findcurrentfigure, defineplotlimits, contzoomOFF, clabels, asknamecontabs, asknamecontrel, asknamemesh, asknamepeaklist, asknameraster2D, asknamestack3D, asknamepcolor3d, asknamepolarplot, asknamebar, asknameline 31-03-'06: The change of 20-01-'06 to the matprint routine has created a bug on Windows platforms as sometimes the variable used to store the renderer mode for printing (Pcomm1) would not be defined. Affected routines: matprint 31-03-'06: Matlab 7 creates an objkect called a hggroup when drawing a contour plot, instead of the set of patches as it did in previous versions. This caused a problem when wanting to make a dual-plot of contours on top of something else in the 2D/3D viewer. Now the handles to the patches are extracted from the hggroup object. Affected routines: plotcont ============= !web release! : march 31 2006, version 3.5.45 ============= 06-04-'06: When using the CopyFigure the name of the window would remain the same as the original window, which would make it impossible to distinguish from the original without opening the window. Now a generic name is given. Affected routines: CopyFig 08-04-'06: The change of 11-03-'06 had introduced a new bug in the reading of SIMPSON files. Affected routines: SIMPSONread 10-04-'06: When setting tick labels an unwanted output was generated because a semi-colon was lacking in an eval statement. Affected routines: regelticklabel 10-04-'06: The window for changing the colour scheme wasn't positioned properly and wasn't corrected in size for screens that are too small, which meant it couldn't be dealt with properly on some systems. Affected routines: Qsetcolorscheme 10-04-'06: I came across a Bruker dataset which used little-endian byte ordering in the FID. As this was always big endian so far I had to include this. Now the byte ordering is read in from the standard parameter files but it is STILL ASSUMED to be big endian if the standard parameter files aren't used!! This in order to avoid yet another option in the input window. Affected routines: matNMRdefineglobals, matNMRinitvars, Qfidread, QReadParameterFiles, regelQfidread, regelQfidreadSeries, matNMRReadBinaryFID 11-04-'06: Have implemented support for newer versions of the Bruker firmware that is used for their digital filter. Affected routines: DetermineBrukerDigitalFilter, askBrukerdig 18-04-'06: Bruker have increased the number of pulses and delays in the acquisition files/pulse programs from 32 to 64. That made one routine fail. Now a more general syntax is used. Affected routines: regeldefparsDiff 19-04-'06: Have made the diffusion fitting routine more general such that a larger variety of diffusion experiments can be fitted, by making two constants variable. So, now two additional parameters alpha and beta must be defined at the same time when DELTA and delta are defined. By default they have the same values as before (3 and 2 respectively). Affected routines: matNMRdefineglobals, matNMRinitvars, Difffit, regeldefparsDiff, Diffpk_init, Diffpk_qvt, Diffpk_qvtdf, Diffpk_voigt 27-04-'06: Certain arrayed parameters in a Chemagnetics dataset would cause an error message. This was caused by an ambiguous result from a strmatch command. Affected routines: QReadParameterFiles 9-05-'06: When performing a baseline correction to a 2D matrix the range in the second dimension is either the entire length or some part of that, as defined by the user in the inpuw window. When the entire range is asked for then this would be written like that in the history macro. But it's nice to be able to run the same macro on matrices of different sizes and hence a code is now written to the history macro such that it recognizes whether the entire range should be baseline corrected. Affected routines: doebasl2dcor, stopbasl2d, matNMRdefineglobals, matNMRinitvars, RunMacro, AnalyseMacro 12-05-'06: Added a few grey-tones for line colours to the legend. Affected routines: QezLegend 12-05-'06: When using the CPM's one needs to specify a region using a rubber box, which is then worked upon. That is rather insensitive if you want to specify the region exactly. Now an additional input window pops up like for the extract function. Affected routines: CreateCPMs, regelCPMs 15-06-'06: The horizontal and vertical stack plots in the main window did not preserve the axis tag, causing the zoom function to interfere with the Uicontextmenu. Affected routines: stack1dhorizontal, stack1dvertical 15-05-'06: Entering peaks during baseline correction and linear prediction interfered slightly with the UIUcontextmenus, which was annoying. Affected routines: defpeaks1d, defpeaks2d, defpeaksLP ============= !web release! : may 11 2006, version 3.5.55 ============= 19-05-'06: Added the possibility of using filled contours with the CPMs. Affected routines: regelCPMs, askcreateCPMs, matNMRdefineglobals, matNMRinitvars, regelcreateCPMs 22-05-'06: Two bugs were reported in the matNMRFT2D routine: -the HyperComplexNeeded flag was not set for States and States-TPPI -the Bruker qseq FT mode in TD2 was not correct. Affected routines: matNMRFT2D 14-06-'06: A bug in the vertical stack 1D routine caused spectra not to be plotted correctly, whereas FIDs were. This was because two temporary variables were used, that were subsequently changed. Affected routines: stack1dvertical 16-06-'06: the change of 10-03-'06, which concerned the implementation of the PosNeg colormaps, has introduced updating of the PosNeg maps even for simple lines and 2D bar plots, which is not necessary. Affected routines: displine, dispbar 16-06-'06: Have started to solve one very ugly feature in matNMR: temporary variables that are used between routines but with unspecific names. From now, only one variable QTEMP99 is used for that and this contains lots of named items in its structure. Affected routines: way too many after I've finished this issue 16-06-'06: The creation of a super title would not be stored in a processing macro. Affected routines: regelsupertitle, RunMacro, AnalyseMacro 16-06-'06: It was found that the supertitle axis was below the first axis of any 2D/3D window. The reason for this is unclear but by shifting the creation of the axis to after selecting the first axis, the problem was solved. Affected routines: SubPlots 20-06-'06: The change made on 15-05-'06 to the defpeaks* routines had a problem since the main window and 2D/3D viewer used the same variable name for the UIContextMenu object. This caused an error if a 2D/3D viewer window had been openened after the main window. Affected routines: matNMRdefineglobals, matNMRinitvars, defpeak1d, defpeaks2d, defpeaksLP 20-06-'06: The change made on 9-05-'06 worked for baseline corrections on the entire spectrum but forgot to write specific ranges to the history macro. Affected routines: doebasl2dcor 20-06-'06: Added a 37x37 Subplot configuration. This really is the limit I guess ... Affected routines: Subplots, matNMR2DButtons 20-06-'06: The change made on 14-03-'06, that tests the norm of FID and spectra, caused an error when a NaN matrix would be found, since the norm routine doesn't like that. Now a test is done to check whether NaN are in an FID/Spectrum and if so then norm is not tested. Affected routines: checkinput1d, checkinput2d, checkinputcont, checkinputdual 07-07-'06: The window positioning has always been an issue in matNMR. This may be because of the interaction between Matlab and the operating system. To ensure better window positioning now, after making a window visible, followed by a drawnow, a while loop is used to reset the position until it is correct. This usually takes two more positioning commands. This fix still doesn't always do the trick though ... Affected routines: PutScreenRight, matNMR2DButtons, matNMR2DPanelButtons, matprint, QezLegend 07-07-'06: After making a contour plot the routine checks to see if the peak list needs to be plotted too. If so, (default) then it used the name of the spectrum as stored in the figure userdata. This works fine, unless the hold property is set to on, because then the userdata is only partially updated and the name stored in there is usually not the name of the spectrum that is being plotted. Now the last-used name, stored in QspctC2, is used instead. Affected routines: plotcont 07-07-'06: The dual display with equal integral was not correct: the integral was not properly calculated. Affected routines: dualdisp 13-07-'06: Trying to make a horizontal stack plot is not possible but instead of a warning message an error was produced. Now a message is issued. Affected routines: stack1dhorizontal 03-08-'06: Reintroduced an option in the general options menu for the setting of the multiplication by 0.5 of the first point of the FID. It turns out to be better NEVER to do that multiplication, but just do a baseline correction. The multiplication will introduce larger baseline distortions than without. Affected routines: matNMRdefineglobals, matNMRinitvars, Qoptions, doeopties, saveoptions, setdefaults, matNMR1DButtons 07-08-'06: Made minor changes to the direct printing button in the T1 fitting window. Affected routines: T1print, T1fit, T1pk_udata ============= !web release! : august 7 2006, version 3.5.72 ============= 17-08-'06: Implemented a conversion from Echo/Anti-Echo data to States. The data should be in the same format as normal States data before the conversion and will be in hypercomplex format after the conversion, ready to start States processing directly. Affected routines: matNMR1DButtons, regelconvertEAE, convertEAE, RunMacro, AnalyseMacro, matNMRConvertEAE2D 22-08-'06: Found some trivial typo bugs in some offline-processing routines. Affected routines: matNMRSetSize2D, matNMRFT2D 30-08-'06: The correcting of the window position (see 07-07-'06) was repeated indefinitely, which caused problems on systems that really wouldn't allow correct positiong. Now the attempt is aborted after 5 tries. Affected routines: matNMR1DButtons, matNMR2DButtons, matNMR2DPanelButtons, PutScreenRight, matprint 02-09-'06: The forward LP did not work in TD1 for 2D matrices that are not hypercomplex. The original part of the spectrum was overwritten with the fitted, instead of the fitted data appended at the back. Affected routines: regellp2d 02-09-'06: The fourier mode was not retained when switching from a 2D to a 1D mode. Affected routines: SwitchTo1D 02-09-'06: Up until now the PosNeg colormaps were reset towards the lowest and highest points in a given spectrum. Now, it has been changed to the current colormapping settings. This has the advantage of being able to change the colormapping, whilst not losing out on the PosNeg mapping. Also, when plotting contours the PosNeg map will no longer be a problem. Affected routines: QColorMaps, regelcaxis 02-09-'06: An issue was found concerning the changing of the fourier mode and how the slice/column then looks like. Since the fourier mode changes whether the imaginary part is not present or from which matrix it should be taken, I think this should be reflected in the way the FID (it only holds for the time domain) is displayed. So now when changing the fourier mode, the slice/column is reread and if necessary made real. So far the individual routines have done things correctly (mostly, see below for changes to routines that didn't!) with respect to the Fourier mode but the display was not always consistent with what was being done. Affected routines: Qspcrel, resetfourmode, viewcolumn, viewslice LP did not do all fourier modes correctly. Affected routines: regellp1d, regellp2d 02-09-'06: The LP routines still weren't protected against negative dampening factors (which explode with time). A warning message is issued by the LP routines if a protective measure had to be taken. Affected routines: itcmp, lpsvd 04-09-'06: The axis vectors would not be changed after extraction of a 2D, when using the default axis. Affected routines: regelextract2d 06-09-'06: Some file names have been changed to avoid possible confusion with user variable names. Affected routines: left, right, up, down (now: movespecup, etc) 06-09-'06: Found a typo in the offline processing routines for apodization that didn't work for gaussian LB with whole-echo spectra. Affected routines: matNMRApodize1D, matNMRApodize2D 06-09-'06: Found a bug in the offline processing routine for reading binary FIDs. When not using the standard parameter files, the routine wouldn't know what the Byte ordering is, and produced an error. Affected routines: matNMRReadBinaryFID 13-09-'06: Found a series of bugs which caused the matNMRFT2D routine to hardly ever function correctly, because the output variable was never used. Only the input variable was acted upon. Affected routines: matNMRFT2D 13-09-'06: Similarly, the matNMRSetPhase2D and matNMRShearingTransformationTD routines were faulty. Affected routines: matNMRSetPhase2D 14-09-'06: An axis can now be associated with the third dimension of a 3D matrix. This will then be used when plotting a series of spectra. Affected routines: GenerateMatNMRStructure, matNMR3DButtons, askuderdef3, regelaxis3d, regelplotseries, matNMRdefineglobals, matNMRinitvars, checkinputcont 15-09-'06: Made a slight change to the attempts to reconstruct the original spectrum from the name of the spectrum as given in the input window, in the UpdateFigure routine. Now also the standard checks for the name (i.e. checkinput and checkinputcont) are in the try-catch loop, since in some cases an error message may occur there too. Affected routines: UpdateFigure 16-09-'06: The checking of indexing into matrices by checkinputcont was not correct. In case of a 3D matrix the indexing would usually be ignored for the axis vectors due to an oversimplified scheme. Affected routines: checkinputcont 18-09-'06: Non-linear axes are now stored in history and processing macros. Before these would be ignored; now they are stored entirely. In case of extremely big axes this may become problematic as the size of the macro will become very large. But since non-linear axes are atypical in NMR, the risk is bearable. Affected routines: scale1d, RunMacro 19-09-'06: Made some more improvements to the CPM routine: -improved stability by adding a small constant to the matrix before calculating the CPM. -improved stability by providing a threshold to the sum projections. Values lower than 1/200 of the maximum of the projection are discarded. -removed one old stability measure, which proved useless in the new scheme -minor changes to the axis properties after plotting. -multiple variables in the CPM routine did not start with "Q" Affected routines: regelCPMs, CheckAxisCPMs 20-09-'06: An accelerator key has been introduced for the printing menu (CTRL-P) and to close a window (CTRL-W). Affected routines: matNMR1DButtons, matNMR2DButtons, pk_init, T1pk_init, Diffpk_init, CopyFig Also, an accelerator key has been added for loading series of binary FIDs. Affected routines: matNMR1DButtons 20-09-'06: matNMR now recognizes Matlab 7.3. Affected routines: matNMRinitvars ============= !web release! : september 22 2006, version 3.6.0 ============= 25-09-'06: When reading standard parameter files, the parameter file handle would not be closed, which would lead to problems when many files would be loaded in one session. The same problem was also found for reading CMX processed spectra. Affected routines: ReadParameterFile, readCMXProcessedData 26-09-'06: Added an extra colour to the legend menu. Affected routines: QezLegend 27-09-'06: Inverse FT in 1D mode was not stored in the history. Affected routines: four1d 27-09-'06: Made inverse FT available for 1D spectra in the offline processing scripts. Affected routines: matNMRFT1D 03-10-'06: Whenever reading a binary FID or a series of binary FIDs, there would be no immediate check to see if the file name exists. Now a check is built in, which is especially useful for loading a series of data because now the particular faulty entry is simply skipped and the rest is loaded properly. Affected routines: regelQfidread, regelQfidreadSeries, QReadParameterFiles 05-10-'06: A check for the file size of a binary FID was made less stringent to avoid weird error messages obtained on a Bruker system. There the file size was larger than just the stated number of data points. Now, an error message is only given if the file size is too small to accomodate all the data points. Affected routines: QReadParameterFiles 10-10-'06: Implemented ACME automatic phase correction (Chen, L., Weng, Z., Goh, L. and Garland, M., JMR 158 (2002), 164-168). For real spectra it's not very useful but for high-resolution spectra it works quite reasonable. NOTE: the automatic phase correction provides values and these are currently stored in the history macro, NOT the autmatic determination itself. This may still change though ... NOTE: this routine is decent for spectra without baseline distortions. Such distortions however will screw up the non-negativity penalty. Furthermore, the non-negativity penalty is typically huge because the spectrum is not normalized, whereas the derivative spectrum (used for the entropy) is. This means that non-negativity overwhelmes the entropy if there is any, and this also means that the algorithm will tend to overestimate the first-order phase correction in order to cause a baseline distortion that yields an all-positive signal. Pretty poor I think ... Affected routines: setphase1d, matNMR1DButtons, fasemenu, stopfasemenu, disablephasebuttons, enablephasebuttons switch2Daid 11-10-'06: Finally changed the variable organization in matNMR: previously all variables would occupy the workspace making a 'whos' virtually useless while matNMR was running. Now only 2 variables are visible and these structures contain all the variables needed by matNMR. Temporary variables are now deleted by almost all routines. Also, various variable names have been changed to make more sense to the user. These are documented in the manual. Also, all QTEMP99 variables are now obsolete and have been renamed to go into QmatNMR. Affected routines: virtually ALL routines! 12-10-'06: Implemented try-catch loops around the evaluation of string connected to loading new spectra into matNMR. Affected routines: checkinput1d, checkinput2d, checkinputdual, dualdisp, checkinputcont, regelcont, regelabscont, regelmesh, regelpcolor3d, regelstack3D, regelraster2D, regelbar, regelline, UpdateFigure 16-10-'06: Implemented setting the integral of a 1D in the main window. So far this was only implemented for 2D. Affected routines: asksetintegral1d, regelsetintegral1d, RunMacro, AnalyseMacro Changed the "set integral 2D" function such that it allows input in the unit of the current axis. So far this assumed points. Affected routines: asksetintegral2d, regelsetintegral2d, RunMacro, AnalyseMacro 16-10-'06: The zero-frequency after FT is at index floor(QmatNMR.Size1d/2)+1. Now all routines that still used other values (e.g. default reference point for 1st-order phase correction) have been changed to all use the same index. Affected routines: matNMRinitvars, makenew1D, makenew2D, transponeer, regelsize1d, setphase1d, update2Daid 16-10-'06: When apodizing a slice of a 2D, the history and history macro would not be appended until apodizing the entire 2D spectrum. If, however, the user switches to a 1D mode then this entry would be lost. Now it is stored first in a separate temporary variable and only appended if the processing mode is switched. Affected routines: apodize1d, apodize2d, historyapodize, repairapodize, SwitchTo1D, matNMRinitvars, setphase1d, setphase2d 18-10-'06: When defining an axis for the third dimension of a 3D then this is now stored in the history macro. Affected routines: regelaxis3d, RunMacro, AnalyseMacro 18-10-'06: When plotting a series of spectra from a variable name that contained a '_' in the name, this would result in an underscore format for the next character. Now the '_' is changed into '\_' as is done in most other routines. Affected routines: regelplotseries 20-10-'06: When plotting a contour plot when the hold state is on, then we plot would be plotted above the previous spectrum (see 15-08-'05). Now this feature is disabled for contour3 plots, which are again plotted at their respective heights. Affected routines: plotcont 23-10-'06: Before starting LP on a 2D, the user is asked to specify the spectral regions to predict. A plot would be made showing the projection in the other dimension. The plotting direction would sometimes be wrong. Affected routines: defpeaksLP 23-10-'06: The panel window in the 2D/3D viewer now has an indicator for the hold state of an axis (i.e. nextplot property of axis). This is much easier than having to go into the plot manipulations menu. Affected routines: matNMRinitvars, matNMR2DPanelButtons, SubPlots, SelectAxis, UpdateFigure, holdcont 13-11-'06: Changed an old inconsistency relating to whether windows should be resizeable or not. This used to be coupled to having the units in pixels and also to the native size of the windows, which used to be correct for an old screen I had. Affected routines: matNMR1DButtons, matNMR2DButtons, matNMR2DPanelButtons, Qscreenops, pk_init, T1pk_init, Diffpk_init ============= !web release! : december 6 2006, version 3.7.0 ============= 11-12-'06: The standard variable names used for storing fit results had not been updated yet to the new variable structure. Affected routines: matNMRinitvars 20-12-'06: Storing of fitting results (peakfit, T1 and Diffusion) produced an error message related to the new variable structure. Affected routines: peakfit, T1fit, Difffit 16-01-'06: Implemented a routine that creates projections in the 2D/3D viewer. Affected routines: matNMR2DButtons, SelectAxis, askshowprojections, regelshowprojections, matNMRinitvars, RestoreSubplots 16-01-'06: Implemented a routine that allows fitting quadrupolar tensors under MAS. Affected routines: matNMR1DButtons, quadtensorfit1d, Quadlsq, quadfit, Quadpk_init, stopquadfit, askstopquadfit, Quadpk_udata, Quadpk_fig, fitquadtensor, simquadtensor, matNMRinitvars, regelloadparsQuad, regeldefvarQuad, regelviewresultsQuad, stopnmr, stopmatnmr 22-01-'06: Implemented a routine that allows fitting static CSA tensors. Affected routines: matNMR1DButtons, csatensorfit1d, CSAlsq, csafit, CSApk_init, stopcsafit, askstopcsafit, CSApk_udata, CSApk_fig, fitcsatensor, simcsatensor, matNMRinitvars, regelloadparsCSA, regeldefvarCSA, regelviewresultsCSA, stopnmr, stopmatnmr 26-01-'07: Creating a 1D bar plot caused an error because of a deleted QTEMP variable. Affected routines: DetermineNewAxisLimits 26-01-'07: The routine implemented on 16-01-'07 has created a problem: Now that there are 3 types of axes possible (regular axes, colorbar axes and projection axes), some routines may not work correctly anymore. Hence a tag has been defined for regular axes to make them uniquely identifiable. I still need to check which routines need to use this tag. Affected routines: Subplots, RestoreSubplots 28-01-'06: Implemented a routine that allows fitting of tensor values from MAS sideband intensities. Affected routines: matNMR1DButtons, ssafit1d, SSAlsq, ssafit, SSApk_init, stopssafit, askstopssafit, SSApk_udata, SSApk_fig, fitssatensor, simssatensor, matNMRinitvars, regelloadparsSSA, regeldefvarSSA, regelviewresultsSSA, stopnmr, stopmatnmr 29-01-'07: It is possible for the user to first do the FT in TD1 for a TPPI-specturm, and afterwards do the FT in TD2. That would create an incorrect matrix though, because the hypercomplex part would not be transformed during the Ft in TD2. Now a check is done to see if the hypercomplex part is non-zero. If so then the FT is done on it. Affected routines: four2d 29-01-'07: Found a bug during reading of a Chemagnetics spectrum: a wrong variable name was used during closing of the file id. Affected routines: readCMXProcessedData 02-02-'07: There are still problems with the implementation of the data format for TopSpin in matNMR. It appears that TD is no longer indicative for the number of data points stored on disk. They actually store more (WHY ON EARTH?????). This would cause problems when reading in 2D spectra using standard parameter files. Now this issue is dealt with specifically. Affected routines: Qfidread, QReadParameterFiles 02-02-'07: Printing in WYSIWYG mode through the printing menu did not work well for the fitting routine windows because a hidden axis prevented the real axis to be centered on the screen. Affected routines: CSApk_init, Diffpk_init, Quadpk_init, SSApk_init, T1pk_init 02-02-'07: A button was added to the tensor-fitting routines to be able to simulate a spectrum. So far a weird trick was needed to get it to simulate the spectrum, instead of fitting. Affected routines: CSApk_init, CSApk_udata, csafit, Quadpk_init, Quadpk_udata, quadfit, fitquadtensor, SSApk_init, SSApk_udata, ssafit, fitssa 02-02-'07: Added a function to the all major windows that allows saving the plot as an m-file. At the same time the printing menu has been renamed to "Create Output" and incorporates the printing menu, the saving as m-file and the copy figure. Affected routines: Quadpk_init, CSApk_init, SSApk_init, pk_init, T1pk_init, Diffpk_init, asksavefitdisk, regelsavefitdisk, matNMR1DButtons, matNMR2DButtons 05-02-'07: Some bugs occured because of incorrect use of the rmfield command. Now instead of using the QmatNMR variable a QTEMP* variable is used. Affected routines: regelleftshift, detsovern 07-02-'07: The fitting routines have been protected against an error message occuring when the axis upper and lower limits would be set equal. Affected routines: peakfit, T1fit, Difffit, quadfit, csafit, ssafit 08-02-'07: So far the results from the fitting routines were stored in the workspace, but mainly the parameters and only sometimes the fit. Now the results are stored in a structured variable with the data, the fit to it, the chi^2 and the fit parameters. Affected routines: peakfit, T1fit, Difffit, quadfit, csafit, ssafit, Diffprint, T1print, CSAprint, SSAprint, Quadprint 13-02-'07: Searched for bugs related to the change of variable structure. Found some ... Affected routines: DCcorr1d, matNMRinitvars, symmetrize2d 13-02-'07: Entering 0 for the number of points to shift caused an error. Now, no action is taken. Affected routines: regelleftshift 14-02-'07: When making a dual display of a horizontal stack plot then the scaling to the same maximum was incorrect: it used to take the maximum of the current slice/column of the current 2D variable, instead of te maximum of the vector used to create the horizontal stack plot. Now the vector for the stack plot is stored in the QmatNMR variable and is read out directly. Affected routines: stack1dhorizontal, dualdisp 14-02-'07: The plotting direction for a dual disp of the horizontal stack plot was incorrect in some cases. Affected routines: dualdisp 14-02-'07: By default the zoom has been turned on in all fitting routines. Affected routines: pk_init, t1fit, Difffit, CSApk_init, Quadpk_init, SSApk_init 16-02-'07: Extracting various views from a 2D spectrum wasn't shown in the history. Only when reprocessing stepwise this would be shown. Now this is corrected. Also, when switching from 2D to 1D mode this is now shown in the history. Affected routines: SwitchTo1D, getdiag, getantidiag, regelprojTD1, regelprojTD2, regelskyline 19-02-'07: Zeroing part of a 2D spectrum would be executed correctly when running a macro. Affected routines: regelzero2d, RunMacro 20-02-'07: A switch has been implemented to allow switching between a logarithmic view and a linear view along the y-axis in the T1 and diffusion-fitting routines. Affected routines: T1fit, T1pk_init, T1pk_udata, T1leasqr, Difffit, Diffpk_init, Diffpk_udata, Diffleasqr 20-02-'07: Users were confused sometimes by the lack of a filename in the printing menu, causing them to not store a plot on disk as planned. Now the command line states "FILENAME" by default instead of an empty space. Affected routines: matprint 20-02-'07: Added three plotting functions to the processing history that weren't in yet: 1D bar plot, errorbar plot and show sidebands. Affected routines: RunMacro, AnalyseMacro, regelmake1Dbar, regelmake1derrorbar, regelshowsidebands 20-02-'07: 2 bugs were found in the errorbar routine: an error message would sometimes appear because of empty spaces in the string for the linespec. Now a deblank is executed. Furthermore, incorrect lines would be drawn for non-logarithmic plots when there aer negative intensities. Affected routines: errorbarMatNMR 20-02-'07: When saving the history macro to the workspace, the dimension-specific information would be appended. This would cause a problem whenever a plotting action would be the last item in the history macro. Then the redrawing would cancel that plotting action. Now this is only done when the last action was not a plotting action and for plotting actions the dimension-specific information is stored before the action itself. Affected routines: regelsaveasmacro, stack1dhorizontal, stack1dvertical, regelmake1dbar, regelmake1derrorbar, regelshowsidebands 21-02-'07: Plotting functions are normally not stored in processing macros. An exeception is made for the following routines. Affected routines: stack1dhorizontal, stack1dvertical, regelmake1dbar, regelmake1derrorbar, regelshowsidebands 21-02-'07: Loading a series of Bruker data was always a pain because the number of the experiment was the name of the directory. The routine hence showed only the $#$ code for the suggested common part in the workspace, requiring typing of the full name every time a change was made to the directory name. Now the directory name before the experiment number is taken and if this name doesn't start with a proper character it is prepended with an 'x'. Affected routines: regelinputbuttonsfidlaadSeries3 22-02-'07: Since printing to bitmap screws up WYSIWYG behaviour when not printing at the screen resolution, I have enforced the '-r0' screen resolution in the matprint routine when the WYSIWYG flag is on. Affected routines: matprint 23-02-'07: When applying an external reference to both dimensions of a 2D, the mode would not be switched to the default axis for both dimensions. Affected routines: regeldefinereference 27-02-'07: Added an estimation of the data format when loading binary FIDs. Not all formats are recognizeable because they do not have specific file names, but most common formats are found. Affected routines: fidlaad, fidlaadSeries ============= !web release! : february 28 2007, version 3.8.0 ============= 06-03-'07: In certain cases the plot direction of a spectrum was incorrect in some of the fitting routines. Affected routines: simcsatensor, simquadtensor, simssa 19-03-'07: Switching between 1D and 2D mode no longer worked properly after loading a 1D from the "Load 2D" menu. The new 1D would be shown, but because internal variables for 2D datasets had been overwritten, switching back to the 2D spectrum went wrong. Affected routines: checkinput2d 19-03-'07: Added a feature to the solvent deconvolution routine in 2D mode: now, as for LP, a range can be designated which contains peaks and which makes sense to act upon. Affected routines: regelsolvensuppression2d, defpeakSD, RunMacro, AnalyseMacro 19-03-'07: When loading a spectrum/FID through the "Load 1D" function, a check would be done for NaN entries and a zero-norm, which could yield an error if a 3D would be loaded. Affected routines: checkinput1d 22-03-'07: Converting an echo/anti-echo spectrum to states was stored incorrectly in the history macro (as Varian states to matNMR States). Affected routines: regelconvertEAE 23-03-'07: For reasons of speed, the routine for FT on 2D FID has been changed for a number of FFT modes. Now the fft and fftshift commands are used on the entire 2D matrix (still dimension-specific though!), instead of on single slices only. This is faster for smaller matrices, but also has the danger of increased memory usage! We'll keep this issue in mind. Affected routines: four2d 26-03-'07: Refreshing the screen to the current 1D did not work when using the UI-control in the peak-fitting window. The numerical resolution of the initial peak parameters, when using the "cursor" function has been increased. Affected routines: peakfit 26-03-'07: Matlab 7.4 is recognized. Affected routines: matNMRinitvars 02-04-'07: When the intensity with of a spectrum was smaller than eps the axis limits were generically set to -1 and +1. This is okay but the limits were crossed at eps, whilst when reading a FID/spectrum the limit was set to eps^2. Now all are set to eps^2. Affected routines: DetermineNewAxisLimits 04-04-'07: Variables written to the workspace from the fitting routines were made global but still invisible because of the way Matlab handles global variables. The user MUST declare this variable global once in order to be able to access it. Now a statement is made to point the user to this fact. Affected routines: peakfit, Difffit, T1fit, csafit, ssafit, quadfit 04-04-'07: The button in the main window that allows switching between FID/Spectrum was no longer functional for anything but data using the default axis. This was because it looked for an incorrect axis tag (that was changed only 2.5 years ago. Apparantly nobody uses this ...) Affected routines: FIDstatus 04-04-'07: The resolution for the num2str conversion for the axis limits was too small. The same for the "get position" routine in the main window. Affected routines: asklims, crsshair 04-04-'07: Changed the output from the peak fitting routine such that the parameters are only the fitting parameters and no longer the integrals and chi^2 error. Those are stored separately anyway. Affected routines: peakfit 06-04-'07: Fixed a long-standing (but not realized) issue concerning the zoom routines: matNMR used the zoom routine from Matlab 5.3 in the main window and the 2D/3D viewer window. The fitting routines used the default zoom routine though. This inconsistency was annoying, especially now that the zoom routine in Matlab 7 is different. Now a single zoom routine has been created and is used throughout matNMR. Affected routines: ZoomMatNMR, asaanpas, dispbar, dispmesh, disppcolor3d, disppolarplot, dispraster2D, dispstack3D dualdisp, plotcont, regelmake1dbar, regelmake1derrorbar, scale1d, scale2d, stack1dhorizontal, stack1dvertical, switchzoomoff, switchzoomon, matNMR1DButtons, contzoomOFF, CopyFig, disableZoomandRot, extract, peakpick, regelCPMs, regelsavefitdisk, rotcont, Subplots, Difffit, T1fit, peakfit, ssafit, csafit, quadfit. Removed Routines: zoom1d, ContZoom 06-04-'07: Recently, a tag was defined for regular axes in the 2D/3D viewer window to distinguish them from colorbar axes and axes for projections and super-title axes. It hadn't been defined yet which routines need to use this tag, and this in fact caused problems: -All plot manipulations routines now either operate on 1) all selected axes, 2) all regular axes, 3) the current row of regular axes or 4) the current column of regular axes. -In processing macros only selected regular axes are stored because currently it is too much effort to check whether both the subplot configuration is the same AND the configuration of other types of axis. Affected routines: contcbar, LineStyle, LineWidth, Marker, Markersize, regelaxis, regelaxiscolors, regelaxislabels, regelaxislocation, regelaxisposition, regelaxisview, regelbox, regelcaxis, regelclearxis, regeldirs, regelfont, regelgrid, regelhold, regellims, regelscales, regelshading, regeltick, regeltickdir, regelticklabel, regelticklengths, regeltitle 08-04-'07: The callback for the keypressfcn in the input window didn't work properly because it hadn't been correctly adapted to the new variable structure yet. Affected routines: QuiInput_3 08-04-'07: Changing the font properties did not work correctly for titles and for changing the titles and axis labels in colorbar axes. Affected routines: regelfont 08-04-'07: Removed the keypressfcn in 2D/3D viewer windows because it made it difficult to select multiple axes. This function was introduced to make sure that the current window is clearly defined. Now, however, there is the "Select" button in the top-left corner to make sure of that and the keypressfcn is more annoying than useful. Affected routines: matNMR2DButtons 09-04-'07: Resetting the figure in the main window did not update the y-axis label, causing an inconsistency whenever an existing y-label with different font properties would remain. Affected routines: asaanpas, simpelplot ============= !web release! : april 10 2007, version 3.8.19 ============= 19-04-'07: The routine that creates both projections of a 2D spectrum in the 2D/3D viewer did not use the same axis limits as for the real plot. Now the axis limits are read out and used. Furthermore, when changing the zoom limits, the projection axes would not be updated. Now they are. Finally, when deleting a colorbar then the projection axes were actively removed. Now they remain and are simply updated. Affected routines: regelshowprojections, ZoomMatNMR, updateprojectionaxes, RestoreSubplots 19-04-'07: A line of code was missing in the routine that sets the color axis automatically, which caused an error message. Affected routines: regelcaxis 20-04-'07: tested for bugs in the script-based processing routines and found some ... Affected routines: matNMRSetSize2D, matNMRSetPhase2D 20-04-'07: The real FT in TD2 was no longer real. Affected routines: four2d 24-04-'07: TPPI Fourier transform in TD2 did not result in the spectral width being halved. Now it is. Affected routines: four2d 24-04-'07: The search profile for binary FIDs has been set to "*.*" because the default "*" would require the user to set the file type to "All Files" every time the uigetfile would be called. Note that this was only an issue when using the JAVA desktop. Affected routines: matNMRinitvars 26-04-'07: A short tutorial for matNMR was added to the manual. Two datasets are included in the matNMR distribution and the tutorial describes how to process these. ============= !web release! : april 26 2007, version 3.8.26 done to make the quick tutorial available ============= 09-05-'07: The change to a single QmatNMR variable caused some side effects, amongst which some characters that were replaced and now read as strange words (e.g. ACQUS -> ACQmatNMRUS). Affected routines: matNMRRemoveBrukerDigitalFilter1D, matNMRRemoveBrukerDigitalFilter2D, regeldefparsDiff 09-05-'07: The change from 19-03-'07 was not stored correctly in the processing history, which caused problems when reprocessing stepwise from history. Affected routines: AnalyseMacro 09-05-'07: The search path for finding acqus files for automatic removal of the Bruker digital filter was bad for the JAVA interface in Matlab. Now it is set to '*.*' everywhere (see also change of 24-04-'07) This also solves an issue under Windows XP (Matlab 7): previously with '*' as search profile there would be a popup asking whether it's okay to overwrite the acqus file. Now with the new search profile this issue is solved. Affected routines: regelBrukerdig 09-05-'07: In input windows the order of the UIcontrols was not correct when wanting to use the TAB button to walk through them. Now this has been corrected. Affected routines: QuiInput 23-05-'07: The solvent suppression in 2D mode would fail sometimes because a variable wouldn't always be declared. Affected routines: regelsolventsuppression2d 25-05-'07: The routine that cuts a plot into parts (to avoid lots of empty space) had an error. A QTEMPx variable was accessed after it was deleted. Also, for descending axes an error message would appear because the tick marks would not be in ascending order. Affected routines: regelcutspectrum 31-05-'07: The routine for making projections (2D/3D viewer) was faulty for single slices. Also, some variables were not deleted or badly named. Affected routines: askshowprojections, updateprojectionaxes, regelshowprojections 31-05-'07: The routine for projection onto TD1 and TD2 in the main window still used points as units, instead of the unit of the axis. Also, the projection routines could easily be optimized. Affected routines: askprojTD1, askprojTD2, regelprojTD1, regelprojTD2, Qview90, Qview0. 31-05-'07: Currently, all routines that use QTEMP* variables should delete them at the end. When using an external routine in a for loop then deleting the QTEMP* variables is likely to be bad. And so it turned out for some routines. Such routines should then NOT delete the variables but assume that the calling routines do so. Affected routines: putinlist1d, putinlist2d, putinlist3d 01-06-'07: Added an option that allows positive and negative contours relative to the negative maximum. Affected routines: asknamecontrel, calccontlevels 01-06-'07: The routines that set the title and axis labels used the Matlab routines title, xlabel, ylabel and zlabel. These standard routines have the drawback of also setting the font properties of all labels to the settings of the axis. Now the string objects are targetted directly. Affected routines: klabels, clabels 08-06-'07: There was an error in the call for the Copy Figure command of all fitting windows: they all led to the main window being used, instead of the desired window. Affected routines: copyfignmr 11-06-'07: Viewing of the fitting results in the peak fitting routine no longer worked after a recent change (04-04-'07). Affected routines: peakfit 14-06-'07: To make old macros compatible with the new variable structure a string replacement was added to RunMacro (for the input variables QmatNMR.uiInputx only). Affected routines: RunMacro 14-06-'07: The horizontal stack 1D routine couldn't handle plots which had axis limits outside the range of the spectrum. Now this is checked beforehand dealt with appropriately. Affected routines: stack1dhorizontal 14-06-'07: When reading Chemagnetics/Varian Spinsight binary FIDs then an array over the spectral frequency would make it impossible to use the standard parameter files. Long-known issue but never bothered to clean it up until now. Affected routines: QReadParameterFiles 15-06-'07: Arrayed parameters would be shown when reading SpinSight data but would not be stored in the matNMR structure. Since this is sometimes useful, this has been implemented. Affected routines: QReadParameterFiles ============= !web release! : may 15 2007, version 3.8.43 ============= 25-06-'07: Changed the reading of standard parameter files for Bruker data files, such that by default the routine uses the acqus and acqu2s files. Should the size in TD1 not be correct then the acqu2 file will be read. It seems the older Bruker software has a slightly different way of storing the data meaning that in some versions an unfinished experiment will have the sizes as specified by TD, in other versions the data file has the size of the number of finished experiments. Affected routines: QReadParameterFiles 25-06-'07: in the change of the horizontal stack plot routine (of 14-06-'07), the corresponding change to the dualdisp routine was omitted. Affected routines: dualdisp 27-06-'07: The dual display routine needed some updating: -now the axis limits are updated such that all lines in the plot fall within the view, i.e. the zoom limits are updated. -for vertical stack plots the routine was no longer working correctly in all cases. Affected routines: dualdisp 27-06-'07: The routine to cut contour plots into strips was extended to include other plot types. Currently only the mesh/ surface/stack3D/raster2D routines have been added. Due to risk of errors for uncommon plot types this has not been implemented for all types yet. Affected routines: regelcutspectrum, matNMR2DButtons 28-06-'07: The "define plot limits" routine has been changed such that now a new variable is made that contains the zoomed-in spectrum and the corresponding axes. That way the routine can be used multiple times, without that the user must pay attention to the indices. Before a double application of the routine would typically not be possible. To do this, the checkinput routines had to be changed such they can deal with structures embedded in a structure, e.g. QmatNMR.Spec2D3DDefinePlot, where evaluation of this variable yields a matNMR structure. Before this wasn't possible. Affected routines: defineplotlimits, checkinput1d, checkinput2d, checkinputcont, checkinputdual, checkinputerrorbar 04-07-'07: The routine to cut spectra into strips was changed such that now it saves a variable in the workspace which contains the cut spectrum and all the necessary information to prepare the plot. This is now similar to the "define plot limits" routine. Furthermore, the input of the peak positions is done using the mouse first, after which the final values must be edited in an input window (as before). Also, the separating lines are allowed to be deleted using a buttondownfunction. The callback routine only worked during peak picking though (for which it was intended. Now it's general. Affected routines: regelcutspectrum, regelcont, dispmesh, plotcont, dispraster2D, dispstack3D, dispcutspectrum, drawalllabels, checkinputcont, matNMR2DButtons,matNMR2DPanelButtons, askcutspectrum, definecutspectrum, regeleditline 10-07-'07: The reference for the first order phase correction was not reset after a linear prediction. This was problematic because the size would be changed. Affected routines: regellp1d, regellp2d 10-07-'07: The reference point for first-order phase correction was not switched correctly between dimensions. Now it is always reset to the middle of the spectrum whevener the dimension is changed. Affected routines: repair, regelgetcolumn, regelgetslice, viewcolumnn, viewrow 11-07-'07: Peaks defined for linear prediction or solvent deconvolution would not always be indicated nicely. Affected routines: defpeaksLP, defpeaksSD 11-07-'07: The lines used when defining peaks for making a cut spectrum weren't put in the right place. Affected routines: definecutspectrum 12-07-'07: Zoom is switched on by default in the main window. Affected routines: matNMR1DButtons 12-07-'07: Reprocessing of linear prediction in 2D mode could not be skipped because the peak list wasn't included during the analysis of the macro by AnalyseMacro. Affected routines: AnalyseMacro 12-07-'07: Reprocessing a horizontal stack plot would fail because the plot wasn't updated right before the processing action. The same potential issue was repaired for the vertical stack plot, 1D bar plot, errorbar plot and show sidebands Affected routines: stack1dhorizontal, regelmake1dbar, regelmake1derrorbar, regelshowsidebands 18-07-'07: The zoom would be switched off when defining peaks for linear prediction, solvent deconvolution and the baseline corrections, but would not be switched back on afterwards. Affected routines: defpeakLP, defpeakSD, defpeaks1d, defpeaks2d 18-07-'07: The zoom would be switched off when defining peaks for linear prediction, solvent deconvolution and the baseline corrections, but would not be switched back on afterwards. Also, the context menu would be switched on independently by these routines after the peaks were defined. This would switch the context menu on whilst zoom is on, which is annoying. Affected routines: defpeakLP, defpeakSD, defpeaks1d, defpeaks2d 23-07-'07: When applying an external reference using a variable the name would be deleted so the next time the variable name needed to be entered again, which is annoying. Affected routines: regeldefinereference 24-07-'07: When using the zoom function in the main window when a legend was present, the main axis would be pulled in front of the legend. This turns out to be a feature of the matlab-5.3-style zoom routine that is incorporated into matNMR. Newer versions of zoom don't have that issue and similar coding is now used in matNMR. Affected routines: ZoomMatNMR 24-07-'07: The former issue also solves the age-old stupidity of the making a legend which shows the window being rebuilt. This was slow and ugly. This is because Matlab redraws all objects whenever the vector of children is reset manually. Now the whole thing is clean. Also, the zoom function was switched off before starting the legend routine, for no apparant reason. Affected routines: Qlegend, matNMR1DButtons 25-07-'07: Undo in 1D mode has been disfunctional (no more than 1 step back!) since the introduction of the new variable structure because of a typo. Affected routines: regelUNDO 26-07-'07: The tick labels after apodization a 1D (or slice of 2D) would not be set correctly for display mode 'both'. Also, the colour of the line used for showing the apodization function was blue. Now it is connected to the colour scheme. Affected routines: plotapodizer 26-07-'07: Trying to reload the last spectrum when none has been defined (i.e. just after starting matNMR) produced an error, because the variable QmatNMR.last was not defined as a structure yet. Now is is. Affected routines: matNMRinitvars 26-07-'07: The variable used for containing the peak list for solvent deconvolution was not defined at the start of matNMR. This would yield an error message when reprocessing a macro with solvent deconvolution, before having executed a regular solvent decovolution first. affected routines: matNMRinitvars 26-07-'07: A variable was not initiated which could cause a strange message when reloading the last variable. Affected routines: checkinput1d 26-07-'07: Reprocessing a macro with a concatenation would fail because the variable that RunMacro uses QmatNMR.ExecutingMacro would be falsely reset. Affected routines: regelconcatenate 26-07-'07: Reprocessing a macro with linear prediction stepwise would give an error: a non-exisiting variable was used in a if statement. Affected routines: AnalyseMacro 27-07-'07: A dotted line at zero intensity is now drawn when making projections in the 2D/3D viewer. This line only shows when the projection itself has an intensity that is close to 0 because otherwise the dotted line will fall out of the view. Affected routines: regelshowprojections 30-07-'07: performing LP in 1D mode after apodization would cause a problem with replotting the FID because the flag for apodization would not be reset, hence the apodization function would still be attempted to be shown. Affected routines: regellp1d 31-07-'07: The zoom limits would not be written to the axis applicationdata, which would make for strange zooming-out. Affected routines: regelgetcolumn, regelgetslice 31-07-'07: When defining peaks for linear prediction or solvent deconvolution in TD1, there would sometimes be an error message because the routines would plot the spectrum in TD2, without preserving the axis tag. This would lead to the zoom routine not finding the target axis. Now the defpeaks?? routines preserve the axis tag AND the zoom routine is protected from not finding a proper target to function on. Affected routines: defpeaksSD, defpeaksLP, ZoomMatNMR 31-07-'07: Two small typos caused a minor inconvenience in certain cases when reprocessing zeroing part of a 2D. Affected routines: regelzero2d, AnalyseMacro 31-07-'07: When defining peaks (baseline correction, linear prediction or solvent deconvolution), the ui context menu would pop up when finishing the defining. This was annoying. Affected routines: defpeaks1d, defpeaks2d, defpeaksLP, defpeaksSD 02-08-'07: Concatenation of variables was programmed inefficiently for large sets by not reserving memory for the new matrix. Affected routines: regelconcatenatevariables 02-08-'07: The linear prediction routines are stabilized against negative dampening factors (which explode in time). The method was too crude though and one could miss out on zero-frequency components (offsets) that would have a (meaningless) negative factor. Affected routines: lpsvd, itcmp 02-08-'07: Storing non-linear axes in processing macros was programmed inefficiently for large matrices. Affected routines: scale1d 03-08-'07: Added the option of "last series of external matlab files" to the main window. Affected routines: matNMR1DButtons 03-08-'07: Implemented that, when adding or concatenating a series of variables, the resulting matrix can be loaded into matNMR directly (as for binary FIDs). Affected routines: askaddvariables, regeladdvariables, askconcatenatevariables, regelconcatenatevariables 06-08-'07: The zoom would be switched off when defining the reference position for the first-order phase correction. Now, it is switched back on after the action is finished. Affected routines: muisinput 06-08-'07: Making a 3D bar plot in the 2D/3D viewer did not work nicely for non-linear axes. Affected routines: pcolor3d, disppcolor3d ============= !web release! : august 9 2007, version 3.8.81 ==> NO CHANGES MADE TO MANUAL YET!! ============= 09-08-'07: The combination of zoom and a legend proved difficult because of the intereference of the moveaxis property of the legend axis, and the zoom routine that operates on the figure level. Now, the zoom routine will only act of an axis if the axis is the TargetAxis as defined at the start of the routine. The TargetAxis is limited by matNMR such that e.g. legend axes cannot be chosen. Affected routines: ZoomMatNMR 10-08-'07: Some more issues with the zoom in the 2D/3D viewer: selecting subplots (SelectAxis) interfered with the zoom routine. Also, the super-title axis is made first now, before all other axes, to make sure it's located below all other axes. Affected routines: ZoomMatNMR, SubPlots 24-08-'07: The change made to the regeloutput3d routine (24-11-'05) was buggy (and obviously untested). Affected routines: regeloutput3d ============= !web release! : august 29 2007, version 3.8.84 ==> NO CHANGES MADE TO MANUAL YET!! ============= 14-09-'07: By request, I have increased the maximum number of peaks in the peak deconvolution routine to 36. The previous 24 were already way too big to fit something conveniently, but if people like it. Affected routines: pk_init, peakfit, pk_udata, clearradios, pk_inivl, pk_gtcon 17-09-'07: Altered the legend routine such that it now also works with the fitting routines (in the plot manipulations menu). Affected routines: pk_init, T1pk_init, Diffpk_init, SSApk_init, CSApk_init, Quadpk_init 17-09-'07: Inverse FT was not indicated in the text version of the history macro. Affected routines: historyFT 27-09-'07: The userdata for a 4x2 subplot configuration was not properly defined. Affected routines: Subplots 02-10-'07: Found some instances where switching from 2D to 1D mode yielded bad axes because not all relevant spectral parameters were ported. This mainly concerns the default axis. Affected routines: regelprojTD1, regelprojTD2, regelgetcolumn, regelgetslice, viewrow, viewcolumn 05-10-'07: Added sine FT to the 1D offline processing scripts. Affected routines: matNMRFT1D 08-10-'07: Changed the way the reference position for first-order phase correction is stored in matNMR. Previously this was in points. Now it is in the unit of the axis, which is more coherent with the rest of matNMR. Affected routines: matNMRinitvars, GetDeafultAxis, scale1d, muisinput, docurrentphase, doUnDo, makenew1d, makenew2d, makenew3d, regelconcatenate, regelgetcolumn, regelgetslice, regellp1d, regellp2d, regelsize1d, regelsize2d, regelUNDO, repair, setphase1d, setphase2d, transponeer, update2Daid, updatebuttons, viewcolumn, viewrow, GenerateMatNMRStructure, checkinput1d, checkinput2d, matNMR1DButtons, RunMacro, matNMRSetPhase1D, matNMRSetPhase2D 08-10-'07: The flag in the menubar for showing that the default axis is used, wasn't switched off after a user-defined axis. Affected routines: scale1d 08-10-'07: The direction of first- and second-order phase correction was different in the offline processing routines, compared to the main GUI. Affected routines: matNMRSetPhase1D, matNMRSetPhase2D 08-10-'07: Made a start with a routine that allows the conversion of processing macros to independent processing scripts. Now, only 1D macros are converted. Affected routines: matNMRinitvars, matNMR1DButtons, askconvertmacro, regelconvertmacro, ConvertMacroToScript, matNMRCreateDefaultAxis 10-10-'07: The manual baseline correction in 1D mode was removed because it was not very easy to use and probably was never used in the first place. Affected routines: basl1dmenu, doebasl1dcor, stopbasl1d, RunMacro, AnalyseMacro 11-10-'07: The baseline correction routines did not handle the situation when no noise areas are given. This is now taken such that everything is noise. Affected routines: doebasl1dcor, doebasl2dcor 15-10-'07: When reprocessing from history the history macro would first be cleared. This could lead to loss of processing information. Now the history macro is not cleared before. Affected routines: reprocessHistory 16-10-'07: In order to allow for the possibility of having a function as input that generates a matNMR structure as output, the definition of the matrix in the 2D/3D viewer has been taken within the checkinputcont routine. Affected routines: checkinputcont, regelcont, regelmesh, regelstack3D, regelraster2D, regelbar, regelline, regelpcolor3d, regelpolarplot 26-10-'07: Found some bugs in the routines that allow extraction in 1D and 2D spectra. Both routines were not completely general as they used str2num instead of eval. Also, the 1D version did not work correctly when specifying an increment. Furthermore, implemented the option of a range for the script-based routines. Affected routines: regelextract1d, regelextract2d, matNMRExtract1D, matNMRExtract2D 12-11-'07: Changed the 2D rastering routine such that it now takes the integral of each area instead of just a single point. Slightly slower but more useful. Affected routines: dispraster2D 12-11-'07: So far the rendering mode in the 2D/3D viewer would be switched to painters if possible (faster). But it wasn't done at the optimum time. Also, it only checked for surface objects and not for light objects. Affected routines: plotcont, dispbar, displine, disppolarplot, dispstack3D 13-11-'07: When adding or concatenating variables the new variabe would always be loaded into matNMR, despite the user being able to choose. Affected routines: regeladdvariables, regelconcatenatevariables 13-11-'07: Baseline correction is refused when working in display mode 'both" as peaks cannot be defined properly. Same holds now for linear prediction and solvent suppression in 2D mode. Affected routines: basl1dmenu, basl2dmenu, asklp2d, asksolvensuppression2d 13-11-'07: Second-order phase correction was incorrect for TD1. Affected routines: setphase2d 14-11-'07: Added a feature that allows noise filling in 2D spectra. Affected routines: matNMR1DButtons, asknoisefilling2d, regelnoisefilling2d, RunMacro, AnalyseMacro 14-11-'07: Added a feature that allows regridding the current 2D spectrum to new axes through interpolation. Affected routines: matNMRinitvars, matNMR1DButtons, askregrid2d, regelregrid2d, RunMacro, AnalyseMacro, matNMRRegridSpectrum2D matNMRRegridSpectrum1D, askregrid1d, regelregrid1d 14-11-'07: When in 2D mode, selecting a 1D processing action results in a switch to 1D mode. Cancelling the action would leave the flag unreset. This didn't lead to problems directly, but wasn't pretty. Affected routines: regelBrukerdig, regelleftshift, regelswapecho, DCcorr1d, regelsolventsuppression1d, regelconcatenate, regelextract1d, integrate1d, regellp1d, regelregrid1d, regelsetintegral1d, regelsize1d 15-11-'07: A bug was found in the routine for making polar plots: the axes were checked for sign of the increment even though this was useless and resulted in an error since the routine for checking the axes cannot deal with matrices for axes. Affected routines: disppolarplot 15-11-'07: The saving of a plot to disk from the 2D/3D viewer did not work when a plot was not in 2D mode because the ZoomMatNMR routine would produce an error. Now the error is changed into a return so the routine doesn't continue but at least doesn't cause a needless error. Affected routines: ZoomMatNMR 16-11-'07: Solved a long-standing problem with matNMR under Matlab 7 (with Java IDE): in analogy to the issue from 24-07-'07, where it was found that chaning the order of the children of a figure manually, will result in rerendering of the entire window. In Matlab 7 the AXES command will result in a reordering of the figure's children, when accessing an axis that is not on the top of the list of children. Now all routines that execute such a command have been changed to set the currentaxes property of the figure directly. Not ideal to use a low-level routine but at least it saves on much rerendering. Affected routines: updateprojectionaxes, update2Daid, regeltitle, regelticklengths, regelticklabel, regeltickdir regeltick, regelshading, regelscales, regellims, regelhold, regelgrid, regelfont, regeldirs, regelclearaxis, regelcaxis, regelbox, regelaxisview, regelaxisposition, regelaxislocation, regelaxislabels, regelaxiscolors, regelaxis, regelshowprojections, regelCPMs, plotcont, dispbar, displine, dispmesh, disppcolor3d, disppolarplot, dispraster2D, dispstack3d, Markersize, Marker, Linewidth, Linestyle, GetAxis, contcmap, contcbar, ChangeColorbarToContourf, regelplotseries, Qlegend 16-11-'07: Implemented that when fit results are viewed then not only the parameters are shown in the Matlab console window, but also in the UIcontrols on the screen and also as a plot in the axis of the corresponding window. Affected routines: T1fit, peakfit, Difffit, ssafit, csafit, quadfit 16-11-'07: Started implementing the addition of light to the plot manipulations in the 2D/3D viewer window. Affected routines: matNMR2DButtons, Subplots, UpdateFigure, matNMRinitvars, asknamemesh, regelmesh, regelplotseries, asklight, regellight, RunMacro, AnalyseMacro 19-11-'07: Fixed a few small bugs in the peak fitting routine regarding loading of old parameters and viewing other slices in 2D matrices. Affected routines: peakfit 20-11-'07: Added apodization into the menubar and context menus for 1D and 2D processing. Affected routines: matNMR1DButtons 20-11-'07: Removed some of the old default settings that used to be implemented when there was no proper colour scheme implemented. Now these are no longer necessary and can be annoying as the user may want to have the default settings of Matlab instead. Affected routines: basl1dmenu, basl2dmenu, clabels, CSApk_init, Diffpk_init, klabels, matNMR2DButtons, matNMR2DPanelButtons, matNMR3DButtons, matNMRintro, matprint, nmr, pk_init, Qoptions, Quadpk_init, QuiInput, RunMacroStepwise, SSApk_init, stats1d, stats2d, T1pk_init 20-11-'07: The CorrectWindow routine, which is used to scale UIcontrols whenever the screen size is too small for a certain window, also scaled UIcontrols that have normalized units. Affected routines: CorrectWindow 20-11-'07: When plotting a 3D matrix in the 2D/3D viewer the check for the norm would be executed, and could produce an error message. Now the check is only done for 2D matrices (includes vectors). Affected routines: checkinputcont 20-11-'07: Changed the position of the SigmaS button for the T1 and diffusion fitting routines because before it wasn't clear whether this was a fitting parameter or not. Now, it's clearly not. Affected routines: T1pk_init, Diffpk_init 20-11-'07: Changed the routines for converting Bruker and Varian STATES experiment to the right format such that now the hypercomplex matrix is generated in the same step, so the user doesn't have to execute the "Start STATES processing" function anymore. Affected routines: regelconvertBruker, regelconvertVarian 20-11-'07: matNMR now knows about Matlab 7.5. Affected routines: matNMRinitvars 20-11-'07: Added a button to the T1 fitting routine that allows switching the x-scale between logarithmic and linear scale (similar button for y-scale already existed). Affected routines: T1pk_init, T1pk_udata, T1fit 20-11-'07: matNMR always changes a number of default settings to make sure it runs the same on every platform. Some of these are no longer needed since the introduction of the colour schemes. Hence, the changes to the colours have been taken out and users can work with their own settings for normal windows, whilst matNMR still has its own. Affected routines: settings, setdefaults 21-11-'07: Before running a macro is check is being done to make sure the format is correct. Now a try-catch loop is built around that to make sure that, whenever an error occurs, a statement is made instead of a true error. For simplicity it is now also possible to enter the name of a matNMR structure when running a running. matNMR will check whether the field "HistoryMacro" is present and select that. Affected routines: regelexecutemacro, regelexecutemacro3d 23-11-'07: Shearing in frequency domain would give an error message for horizontal shearing (shearing worked but output to screen and history created the error). Affected routines: regelshearingFD 26-11-'07: Horizontal shearing in frequency domain required a strange shearing factor due to an inversion of sizes/spectral widths for the two dimensions. Affected routines: regelshearingFD, matNMRShearingTransformationFD ============= !web release! : november 23 2007, version 3.9.0 ============= 14-12-'07: Implemented some suggestions to remember the current path better so as to avoid having to select the directory. When using the automatic removal of the Bruker digital filter, the routine now checks whether an acqus file exists in the last directory that was used to load files. If so, the acqus file is accessed, otherwise a window pops up asking the user to select the acqus file. Affected routines: regelBrukerdig Up to now every time the user wants to load data into Matlab using matNMR the current directory was used as a starting point for where to look for files. Now an option menu has been added to matNMR to allow the last directory from which files were loaded to be used as the starting point. By default this will be as before, but the user may now select a default starting directory and whether the last directory should be re-used. Affected routines: fidlaad, fidlaadSeries, simpsonasciilaad, simpsonasciilaadSeries, Brukerlaad, BrukerlaadSeries, CMXlaad, CMXlaadSeries, matlaad, matlaadSeries, selectdistribution, setdefaults, matNMRinitvars, matNMR1DButtons, Qfileops, stopmatnmr, stopnmr, SetOptions 17-12-'07: Updated the routines that extract the diagonal or anti-diagonal from a 2D spectrum such that it can handle non-square matrices. The new routine always uses the axes to determine whether the standard diag routine can be used or whether a linear interpolation must be used. Affected routines: getdiag, getantidiag 20-12-'07: A bug was found in the stats2d routine that caused an error and made it not open the window properly. The closerequest function was not defined. Affected routines: stats2d 21-12-'07: The change of 20-11-'07 caused some unwanted effects when selecting the area in the 2D on which to apply solvent deconvolution or linear prediction. Affected routines: defpeaksSD, defpeaksLP 04-01-'08: The change of 20-11-'07 introduced a bug: the title of plots by default gets the value of the DefaultTextColor property, which may not be what the colour scheme uses. Now this value is set explicitly in matNMR. This is not an issue for axis labels as these are reset when setting the xcolor, ycolor and zcolor properties of an axis! The legend routine was also affected, as are a number of routines that define text objects. Affected routines: asaanpas, defpeaksLP, defpeaksSD, Difffit, dispbar, displine, dispmesh, disppcolor3d, disppolarplot, dispraster2D, dispstack3D, getantidiag, getdiag, makenew1D, makenew2D, plotcont, regelCPMs, regelextract, regelgetcolumn, regelgetslice, regelmake1dbar, regelmake1derrorbar, regelplotseries, regelprojTD1, regelprojTD2, regelshowprojections, regelskyline, ResetAfterError, stack1dhorizontal, stack1dvertical, T1fit, viewcolumn, viewrow, Qlegend, SSAprint, CSAprint, restorepeaklist, restorepeaklist3, mathelpprint, GetPeaks, disppolarplot, Subplots, CreateMainAxes, pk_init, T1pk_init, Diffpk_init, Quadpk_init, SSApk_init, CSApk_init, stack1dhorizontal, stack1dvertical 04-01-'08: Updated the copyright statement 04-01-'08: Deleted the title1d routine as it was no longer used by matNMR 07-01-'08: Making a pcolor plot in the 2D/3D viewer yielded a ackward color mapping from 0 to the maximum of the matrix (assuming the minimum of the matrix to be larger than 0). This was because the matrix was enlarged by appending with 0. Now, by using NaN, the plot looks the same but the color mapping really fits the data matrix. Affected routines: dispmesh 08-01-'08: When resizing a 2D spectrum the axes of the current dimension ONLY would be defined straigt away, leaving room for error. Affected routines: regelsize2d, regelnoisefilling2d 14-01-'08: When opening a new window in the 2D/3D viewer, the colorbar status of the original window would not be remembered and hence no colorbar would be plotted, even though it was supposed to. Affected routines: makenew2D3D 17-01-'08: Another issue connected to the change of 20-11-'07 (see also 04-01-'08) was found in making colorbars. Affected routines: colorbarmatNMR 11-02-'08: The color of the crosshair used by the "get position" routine in the main window would always be red. Now it follows the color of the line that is being tracked. Affected routines: crsshair 13-02-'08: When reading new Bruker files sometimes the size of the file no longer corresponds to the size of the FID (see also change 02-02-'07). When that has happened the next time, the input window would have a problem because it couldn't deal with the two sizes stored in a variable. Now only the first value is ever shown. Affected routines: askfidlaad, askfidlaadSeries 13-02-'08: The change of 14-12-'08 was not so good: when loading a number of datasets and then wanting to remove the digital filter, then matNMR would look in the last directory to see whether an acqus file exists. If so, that would be used to extract the data for the digital filter. But that wouldn't leave the possibility of selecting the file by hand, which one needs if the last dataset is completely different from the first. To solve this first of all the datapath and filename are now stored in the matNMR structure. Affected routines: GenerateMatNMRStructure, regelQfidread, regelQfidreadSeries, regelBrukerSpectraread, regelBrukerSpectrareadSeries, regelCMXSpectraread, regelCMXSpectrareadSeries, SIMPSONread Then, a variable is now stored that keeps track of the datapath for each 1D and 2D dataset. Affected routines: matNMRinitvars, checkinput1d, checkinput2d Finally, the routine that removes the Bruker digital filter now uses the stored datapath to extract the information. If no acqus file is found in the dataset belonging to the variable, then the input window appears. Affected routines: regelBrukerdig 29-02-'08: When stopping the main window but not matNMR, the variables used for the windows would not be set to 0, causing problems when reopening the main window again. Affected routines: stopnmr 29-02-'08: After extraction the reference for the 1st order phase correction would be lost because the index would not be updated by the extraction routine. Affected routines: regelextract1d, regelextract2d 03-03-'08: Implemented Cadzow filtering and Cadzow filtering followed by LPSVD estimation for 1D data. Affected routines: cadzow, matNMRinitvars, matNMR1DButtons, askcadzow1d, askcadzowlpsvd1d, regelcadzow1d, regelcadzowlpsvd1d, RunMacro, AnalyseMacro, ConvertMacroToScript, matNMRCadzow1D, matNMRCadzowLPSVD1D 05-03-'08: On Solaris the input windows would not have text comments in Matlab 7. A solution was found by defining the size of the axis. Previously, this was taken implicitly and worked fine. On Windows this was no issue. Affected routines: QuiInput 07-03-'08: Added a 14x14 grid of subplots to the 2D/3D viewer. Affected routines: Subplots, matNMR2DButtons 07-03-'08: Started a new implementation of the cut spectrum with separate axes instead of separation lines. Affected routines: dispmesh, regelmesh, regelplotcutspectrum, matNMRinitvars, Subplots, checkinputcont, dispstack3D, dispraster2D, plotcont, regelcont, regelabscont, regelstack3D, regelraster2D, askcutspectrum, definecutspectrum, regelpcolor3d 10-03-'08: The colorbar would not always be remembered correctly when making a new 2D/3D viewer window. Affected routines: makenew2D3D, contcmap 11-03-'08: Added an option that allows adding the fit results to the plot in relaxation and diffusion curve fits. Affected routines: T1pk_init, T1fit, regelviewaddresultsT1, Diffpk_init, Difffit, regelviewaddresultsDiff 11-03-'08: Some of the routines used for direct printing in the fitting routines were incorrect as they didn't use the new structure of the fit parameters yet. Affected routines: T1print, Diffprint 11-03-'08: An option was added to the default callback routines of text objects that allows deleting text objects. Affected routines: askedittext, regeledittext 11-03-'08: With the new functionality for cut spectra, it is now possible to offer a user-defined grid of subplots from the menubar. Affected routines: Subplots, RestoreSubplots, matNMR2DButtons, matNMRinitvars, askuserdefsubplots, regeluserdefsubplots 12-03-'08: Raster plots would fail whevener the matrix size would not be a multiple of the sampling factor. Affected routines: dispraster2D ============= !web release! : march 12 2008, version 3.9.26 ============= 13-03-'08: The sharecolors figure property has been disabled by default throughout matNMR because it's deprecated. Affected routines: settings, matNMRintro 14-03-'08: Finished the implementation of the Cadzow filtering and Cadzow filtering followed by LPSVD estimation for 1D data. Now also a frequency-domain filtering is implemented, which is much better in practice than a time-domain routine. This because now windows in the spectrum are defined that contain peaks, but are only 256 data points wide. This prevents excruciatingly slow SVD's. Affected routines: matNMRinitvars, askcadzow1d, askcadzowlpsvd1d, regelcadzow1d, regelcadzowlpsvd1d, RunMacro, AnalyseMacro 26-03-'08: The "axis rulers" function no longer worked for the 2D/3D viewer because of an incorrect syntax during the making of the figure window. Affected routines: stats2d 28-03-'08: Added ACME automatic phase correction to the processing scripts. Affected routines: matNMRSetPhase1D 31-03-'08: Added a button to the main window that allows changing of the current setting for the default axis. Affected routines: matNMR1DButtons, regeldefaultaxisbutton, GetDefaultAxis, regelsetdefaultaxis, asaanpas 07-04-'08: A bug was found in matNMR running under Matlab 7.5: ginput uses the function uirestore, which in turn makes a new context menu. This clashed with the ZoomMatNMR routine. Now the original handle is always called by ZoomMatNMR. Affected routines: ZoomMatNMR 08-04-'08: Stepwise reprocessing of a macro would fail for creating a user-defined axis. Affected routines: AnalyseMacro 09-04-'08: Until now concatenation of variables only worked when the matrices were of equal size. This is not useful. Affected routines: regelconcatenatevariables 09-04-'08: The scale1d routine did not write dimension-specific information to the history macro when non-linear axes were defined. Affected routines: scale1d 10-04-'08: When reading a series of binary FIDs it is often nice to read in the first of the series into matNMR directly. Now this has been implemented. Affected routines: regelQfidreadSeries, askfidlaadSeries 14-04-'08: When fitting T1's or diffusion constants, a UIcontrol containing the fitting functional is placed where normally the title of the plot would be. Now, this button can be deleted by clicking on the button. Affected routines: T1pk_init, Diffpk_init 15-04-'08: When saving a slice from a 2D to the workspace, then the mode would not be switched to 1D, causing some variables (default axis mainly) not to be taken properly. Affected routines: matNMR1DButtons, regelsave1d, regelsavedisk1d 22-04-'08: Matlab 7.6 is now recognized. Affected routines: matNMRinitvars 07-05-'08: Viewing fit results showed an incorrect value for the chi^2 for T1 and diffusion fitting. Affected routines: T1fit, Difffit 23-05-'08: Found a bug in matNMRShearingTransformationTD (typos). Affected routines: matNMRShearingTransformationTD 26-05-'08: Added a routine that allows shifting a spectrum in frequency domain by applying a phase modulation in the time domain. Affected routines: matNMR1DButtons, askshiftspectrum1D, askshiftspectrum2D, regelshiftspectrum1D, regelshiftspectrum2D, matNMRinitvars, AnalyseMacro, RunMacro 28-05-'08: Found a bug in stepwise reprocessing whenever an update of the current 2D slice was enforced (code 401 in RunMacro). Affected routines: RunMacroStepwise 05-06-'08: Added a line of text explaining how to convert the output from the fitting routines (structure variables) into matrices. This only works from Matlab 7 and above. Affected routines: peakfit, T1fit, Difffit, csafit, ssafit, quadfit 12-06-'08: A change was made to the way the matprint routine rescales a figure when using WYSIWYG mode. Now the real papersize is taken into account better than before. Affected routines: matprint 30-06-'08: MIF-printable colorbars could not be selected yet. Affected routines: ChangeColorbarToContourf 16-07-'08: A problem was found when reading VNMR data that did not have the number of data points in it (so not ntraces*np). This might occur whenever a user stops an experiment prematurely. Now a check is performed. Affected routines: Qfidread 13-08-'08: When using large numbers the ranges in dealing with series would be truncated by Matlab. Now 10 digits precision is specified for the num2str conversion. Affected routines: regelBrukerSpectrareadSeries, regelCMXSpectrareadSeries, regelmatlaadSeries, regelQfidreadSeries, regelsimpsonasciilaadSeries, regelconcatevariables, regeladdvariables, regelnormalizevariables 10-09-'08: In certain cases the reference for the first order phase correction would become NaN. Now a reset is made to make sure this is corrected to the middle of the spectrum again. Affected routines: repair, updatebuttons 25-09-'08: When plotting a sliced spectrum the type of contours would not be remembered when using relative contours. Affected routines: regelplotcutspectrum 29-09-'08: When using the automatic removal of the Bruker digital filter, matNMR would try and load the acqus file. For this it used the same variable as for loading binary FIDs, meaning that the last filename would no longer be remembered. Affected routines: regelBrukerdig 03-10-'08: An additional zeroth-order phase shift was accidentally given when applying the removal of the Bruker digital filter. This can be annoying for certain applications and has been corrected. Affected routines: regelBrukerdig 03-10-'08: The routine for 1D baseline correction now plots an additional line after having performed the fit. Now the original spectrum is plotted as well so one can judge how well the simulated baseline fits the spectrum. Affected routines: doebasl1dcor, stopbasl1d 31-10-'08: Added a single-slice option to delete the current row/column from a 2D dataset Affected routines: matNMR1DButtons, regeldelete, RunMacro, AnalyseMacro 25-11-'08: Changed the routine for making contour plots with non-linear contour levels. Previously a complicated calculation was made to fit the right number of contours between the specified limits, using an ununderstandable factor. Now the same approach is used as in many other software packages for bio-NMR: a factor is taken and multiplied on top of the lower limit. The number of contours is cut off by the upper limit. Affected routines: calccontlevels, dispcont, regelcont 25-11-'08: I have improvised an extension to the "get position" routine in the 2D/3D viewer. Now the slices corresponding to the ones indicated by the crosshair can be displayed on the fly (option from the menubar only). May not be perfect yet but it works decent in most cases. Affected routines: matNMR2DPanelButtons, matNMR2DButtons, crsshair2d 26-11-'08: Implemented a routine that allows exporting a processed spectrum as a Bruker processed dataset. The initial goal is to make it readable by the Sparky software package. So only a limited number of parameters are stored alongside the spectrum. Affected routines: matNMR1DButtons, matNMRinitvars, asksavetoBrukerSpectrum, regelsavetoBrukerSpectrum 26-11-'08: Corrected an issue with setting the reference point for 1st-order phase correction. An interpolation was used to connect the value in units of the axis into an index in points. When setting the reference point outside the spectrum the interpolation would fail, resulting in NaN. Now an extrapolation is executed when the interpolation fails. Affected routines: matNMR1DButtons, setrefphase1 26-11-'08: Matlab 7.7 is now recognized. Affected routines: matNMRinitvars ============= !web release! : november 27 2008, version 3.9.59 ==> manual not updated yet since release 3.9.26 ============= 27-11-'08: Made an option that allows it to save strip plots and "defined plots" to the workspace. Affected routines: matNMRinitvars, askcutspectrum, regelcutspectrum, matNMR2DButtons, matNMR2DPanelButtons, askdefineplotlimits defineplotlimits 05-01-2009: When making a horizontal stack plot the imaginary part did not have NaN-blocks to separate slices, only the real part. Affected routines: dualdisp, stack1dhorizontal 16-01-'09: Updated the fitting routines such that they all use the correct definition for calculating the reduced chi^2 and all of them allow refitting data after a previously-stored variable is imported again. Affected routines: peakfit, T1fit, Difffit, simcsatensor, simquadtensor, simssa 20-01-'09: Implemented storing of constraints and sigma into the parameter structure for T1 fits. Also, the last variable name is now remembered when loading parameters or viewing previous fits. Affected routines: T1fit, matnmrinitvars 21-01-'09: Changed the fixed frequency resolution of the quadrupolar fitting routine to 0.05 ppm. This will be changed such that a button is given to decide what the resolution must be. Affected routines: fitquadtensor 23-01-'09: When changing the size of a 2D FID both dimensions would be switched to the default axis. Now, if the other dimension is not changed in size then the axis remains as it is. Affected routines: regelsize2d 28-01-'09: Implemented importing of Sparky data (UCSF data format) into Matlab. Affected routines: matNMR1DButtons, askUCSFlaad, UCSFlaad, regelUCSFread, readUCSF 05-02-'09: Found a Bruker Aspect file which did not conform to the current filter. Made a fix but don't know how general the problem really is. Affected routines: Qfidread 20-02-'09: When making a colorbar from the panel window in the 2D/3D viewer it was possible to have it end up in another window. Now the window is made active if necessary. Affected routines: contcbar 20-02-'09: Shifting a 1D by 0 points resulted in no output in the offline processing routine. Affected routines: matNMRLeftShift1D 25-02-'09: When switching the default mode for the default axis when the default axis was switched off, would not result in the default axis being switched on. This was annoying. Affected routines: regeldefaultaxisbutton 27-02-'09: Made a slight alteration to the processing script for phasing 2D datasets. Affected routines: matNMRSetPhase2D 12-03-'09: Added a parameter to the cos^2 apodization function. Now the span of the sine can be supplied. 1 yields the result obtained until now, i.e. 90 degrees. Affected routines: apodize1d, regellb, RunMacro, historyapodize, matNMRinitvars 30-03-'09: Fixed an issue with the refreshing of a legend, i.e. the reading of a legend from a given window and changing the legend interface window accordingly. This didn't work at all. Affected routines: QezLegend, stopnmr, stopmatnmr 07-04-'09: Linear prediction would produce an error when reprocessing macros because the reference for the first-order phase correction would be recalculated (interpolation) before the new default axis was calculated. Other routines also appear to be affected. So I made a try-catch clause in the repair routine which performs the interpolation Affected routines: regellp1d, regellp2d, repair 15-04-'09: Dual display of a structure without a reference carrierindex (deafult axis) would produce an error. Affected routines: checkinputdual 18-04-'09: Linear prediction would produce an error when reprocessing macros because the type of linear prediction would not be set by RunMacro (an old variable was used instead of the new dedicated one). Affected routines: RunMacro 27-05-'09: Found a bug in the routine that plots strip plots: the axes would not be defined by the checkinputcont routine, causing problems in some cases. Affected routines: checkinputcont 02-06-'09: Found two typo bugs. Affected routines: ResetAfterError, regelsavetoBrukerspectrum 03-06-'09: Defining axis rulers in the 2D/3D viewer caused lots of beeping because a variable was not defined by default in the QmatNMR structure, which caused the crsshair2d routine to beep. Affected routines: matNMRinitvars 05-06-'09: During reprocessing from macro certain large numeric values would be truncated by the num2str routine. Now a 10-digit accuracy is used. Affected routines: RunMacro 05-06-'09: Found that spectra exported as Bruker spectra could not be imported again due to missing parameters in the parameter files. Also, the routine was protected from loss of numerical accuracy as the data are stored as 32-bit integers (no decimals). Now the data will be scaled when this becomes an issue. Affected routines: regelsavetoBrukerSpectrum 05-06-'09: Finished the change of 21-01-'09. Affected routines: fitquadtensor, quadfit, Quadpk_udata, Quadpk_init 05-06-'09: Implemented the change of 20-01-'09 for all fitting routines. Affected routines: peakfit, matNMRinitvars, Difffit, csafit, quadfit, ssafit 05-06-'09: Fixed a bug introduced on 14-04-'08 that prevented the diffusion fitting from working. Affected routines: Diffpk_init, Difffit 09-06-'09: Fixed a bug in the regridding routine that would set the hypercomplex part to 0 but wouldn't necessarily make sure that it had the same size as the spectrum. Affected routines: regelregrid2d 10-06-'09: Implemented maximum entropy (MEM) reconstruction in 1D and 2D mode using the lpc algorithm. NOTE: it should be made clear in the manual that this is NOT the same as MaxEnt reconstruction, i.e. the regularized fitting of data using the entropy of the data as criterion besides the squared deviation. MEM works only on periodically and continuously sampled time-domain data and requires a good correlation of each data point to the next. The FID is modelled using a recursive model that requires only the first data point to reconstruct the data beyond the original range. It is in fact closely related to linear prediction techniques and not so much to MaxEnt reconstruction. Typically this approach fails for complicated lineshapes (powder lineshapes, overlap). Affected routines: matNMR1DButtons, matNMRinitvars, askmem1d, regelmem1d, askmem2d, regelmem2d, RunMacro, AnalyseMacro 16-06-'09: Second-order phase correction in TD1 was not working properly. Affected routines: setphase2d 18-08-'09: The matNMRReadBrukerSpectra routine did not work properly when no pathname was included (i.e. no filesep in the string with the filename present). Affected routines: matNMRReadBrukerSpectra 21-08-'09: Matlab 7.8 is now recognized. Affected routines: matNMRinitvars 27-08-'09: Added edit buttons in the main window to allow changing the number of undo-steps without having to enter the options menu. Affected routines: matNMR1DButtons, regelUNDO, Qoptions 27-08-'09: When changing the subplot configuration the default colourmap would be used again. Now the current map is used instead. Affected routines: SubPlots 27-08-'09: Supplying a matNMR structure when wanting to run a macro on a 3D matrix failed to work. Affected routines: matNMRinitvars, regelexecutemacro3d 27-08-'09: Most plot-manipulations routines had an incorrect return to their input routines whenever no subplots would be selected. Affected routines: contcbar, regelaxis, regelaxiscolors, regelaxislabels, regelaxislocation, regelaxisview, regelbox, regelclearaxis, regeldirs, regelfont, regelgrid, regelhold, regellight, regellims, regelSBCM, regelscales, regelshading, regeltick, regeltickdir, regelticklabel, regelticklengths, regeltitle 27-08-'09: By default now the default axis will remain on when setting an axis in ppm, Hz or kHz. Affected routines: scale1d 27-08-'09: In some cases the buttons for the status of the default axis were not updated. Now an update is always made. Affected routines: updatebuttons 27-08-'09: Selecting a default axis from the button in the main window would not switch the status to on. Affected routines: regeldefaultaxisbutton 01-09-'09: When creating a user-defined subplot configuration, the status variable QmatNMR.ContSubplots would not be set appropriately. Affected routines: SubPlots 04-09-'09: The regeltick routine produced an error whenever asking for automatic positioning of the tick marks. Affected routines: regeltick 29-09-'09: A generic error handling routine has been created that allows catching all errors. A window will pop up asking the user to send a bug report if the problem persists. Affected routines: all scripts (all functions excluded for now) 02-10-'09: An errror would occur if external functions created a uimenu in the 2D/3D panel window (during setting of properties of uicontrol objects). Now only uicontrols are selected. Affected routines: matNMR1DButtons, pos1d, stopcrsshair, matNMR2DPanelButtons 07-10-'09: When making a new axis ruler, the zoom limits would be stored until a "reset figure" would be done. Now the new limits are stored properly. Affected routines: scale1d 13-10-'09: The routine that converts 1D processing macro's to scripts had typos (1d instead of 1D), causing incorrect script names to be called. Affected routines: ConvertMacroToScript 13-10-'09: Setting the size for whole-echo acquisition wasn't supported yet in the offline processing routines. Affected routines: matNMRSetSize1D, ConvertMacroToScript, regelsize1d, RunMacro 13-10-'09: The conversion of the FT mode was incorrectly done by the routine that converts 1D processing macro's to scripts. Affected routines: ConvertMacroToScript ============= !web release! : october 27 2009, version 3.9.94 ==> manual not updated yet since release 3.9.26 ============= 16-11-'09: When plotting a series of spectra in the 2D/3D viewer, the macro was not executed after all spectra were plotted. This caused comptetion problems with setting of titles. This might be related to another issues being that the selected axes were not stored in the macro when using the default "title / axis labels" routine in the 2D/3D viewer. This made placing of the title random. Affected routines: regelplotseries, clabels 17-11-'09: No output to the history (text) was given by the routines that shift the spectrum in the FID Affected routines: regelshiftspectrum1d, regelshiftspectrum2d 02-12-'09: When concatenating series of variables now the history variable shows the action Affected routines: regelconcatenatevariables 05-01-'10: The change made on 14-06-'07 did not include using only the first value for the spectral frequency array for TD1. This would create problems with the processing macro. Affected routines: QReadParameterFiles 27-01-'10: Implemented import filters for EPR data (taken from easyspin) and MRI data (Siemens). Both have been given a separate menu item in the files menu in the main window. Affected routines: matNMR1DButtons, askimportEPR, regelimportEPR, askimportMRI, importMRI, regelimportMRI, QimportMRI, regelbuttonsimportMRI 27-01-'10: Fixed an issue with reading Bruker processed data that was processed by TopSpin 2.1. In that version they have stopped writing all parameters to the acqus and acqu2s files. It seems that only changes compared to acqu are stored. This was a problem when reading the spectral width. Previously the SW_h (Hz) was read, but TopSpin only updates SW (ppm) now. Hence, the SW_h is calculated from SW now. This should be backward compatible. Affected routines: DetermineBrukerSpectraRead 22-02-'10: Implemented loading of series of MRI data files. Affected routines: askimportMRI, askimportMRISeries, QimportMRI, regelimportMRISeries, regelinputbuttonsimportMRISeries, regelinputbuttonsimportMRISeries2, regelinputbuttonsimportMRISeries3 18-03-'10: Implemented loading of (series of) DICOM MRI data files. NOTE: this only reads spectroscopic data from the info header. No image data is loaded (mention in manual!). Affected routines: askimportMRI, askimportMRISeries, QimportMRI, importMRI, regelimportMRI, importMRISeries, regelimportMRISeries, regelinputbuttonsimportMRI, regelinputbuttonsimportMRISeries 24-03-'10: Reading multiple arrays in Chemagnetics format would not reproduce the correct arrays in the matNMR structure. Affected routines: QReadParameterFiles 01-04-'10: Used the solvent deconvolution routines to implement a running average routine in matNMR. Affected routines: matNMR1DButtons, RunMacro, AnalyseMacro, askrunningav1d, regelrunningav1d, askrunningav2d, regelrunningav2d 12-04-'10: Implemented the option of making the edges of 1D bar plots the same colour as the face colour (main window only). Affected routines: matNMRinitvars, askmake1dbar, regelmake1dbar, asknamedual, dualdisp 07-05-'10: Implemented a routine for reading generic binary data files with variable data formats, byte ordering and ordering of the complex data points. The reading of series has been implemented by default. Affected routines: importGENERIC, askimportGENERIC, regelimportGENERIC, QimportGENERIC, matNMRinitvars, matNMR1DButtons, regelinputbuttonsGENERICSeries3 13-07-'10: implemented an option to export 1D data to CSV ASCII format. Affected routines: matNMR1DButtons, asksavetoCSVASCII, regelsavetoCSVASCII 13-07-'10: Fixed the issue of multiple error windows popping up sometimes (because of nested routines). Affected routines: errorhandler 25-08-'10: Implemented the new style of using series in importing data for binary FIDs, Bruker spectra. Affected routines: matNMR1DButtons, askfidlaad, regelQfidread, askBrukerlaad, regelBrukerSpectraRead, askCMXlaad, regelCMXSpectraRead, matlaad, askmatlaad, regelmatlaad, asksimpsonasciilaad, regelsimpsonasciilaad, askUCSFlaad regelUCSFlaad, askimportMRI, regelimportMRI, regeladdvariables, addvariables2, regelnormalizevariables 27-08-'10: Implemented a check in the matprint routine against unequal lengths of tick positions and tick labels. Matlab tends to screw up the print if this happens and now the user is warned against this. Affected routines: matprint 15-09-'10: A bug was found in the matNMRFT2D script: the HyperComplexPresent flag wasn't set when entering 5 input arguments. Affected routines: matNMRFT2D 15-09-'10: A bug was found in the matNMRSetPhase2D script: the return transpose was incorrect for the hypercomplex part. Affected routines: matNMRSetPhase2D 15-09-'10: A bug was found in the matNMRShearingTransformationTD script: an old variable had not been replaced yet by the one currently in use. Affected routines: matNMRShearingTransformationTD 15-09-'10: A bug was found in the regelshearingTD routines: When processing the same data within GUI, the following output within "Processing History" seems to give reversed SW TD2 and SW TD1 values (also unit should be kHz, rather than Hz) (the processing itself is OK, just a book-keeping problem) Affected routines: regelshearingTD 12-10-'10: When starting the shearing in time domain an error would appear when using STATES-TPPI processing. Affected routines: askshearingTD 14-10-'10: Checking the norm of spectra before plotting resulted in an error message if Inf entries were present. Now a try-catch is used to prevent errors. Affected routines: checkinputcont, checkinputdual, checkinput2d, checkinput1d 20-10-'10: An Echo-anti-Echo experiment that was loaded in Varian or Bruker format could not be processed by the routine that converts such data into States, since that routine only worked for non-hypercomplex data. Now it also accepts hypercomplex data such that Bruker/Varian data are first converted into hypercomplex data, and then from EAE to States. Affected routines: regelconvertEAE, makenew2D, regelconvertBruker, regelconvertVarian, convertEAE 26-10-'10: Introduced a feature in the 2D/3D viewer that makes a window with subplots have square spectra. This assumes that the axes units are the same for all subplots. Affected routines: asksquareplots, regelsquareplots, matNMR2DButtons, RestoreSubplots 26-10-'10: Fixed a minor bug in the regelplotcutspectrum routine, which produced axis labels in incorrect axes sometimes. Affected routines: regelplotcutspectrum 16-11-'10: Plotting complex data with a non-linear axis in "both" mode would result in a strange plot because the plotting command uses the axis increment QmatNMR.Rincr to offset the imaginary signal from the real. Unfortunately, for non-linear axes this increment was calculated as the difference between the first and the last value of the axis, which could result in rather large values. Now, the average value is calculated. Affected routines: detaxisprops 18-11-'10: When plotting as pseudo-color in the 2D/3D viewer, the axes would be changed to have the axis values in the middle of each datapoint. This was, however, only done if BOTH axes were linear. Now this is done also if only one of the two axes is linear. Affected routines: dispmesh 23-11-'10: The ZoomMatNMR routine caused problems when switching the context menu back on. Now the context menu is searched for in the window. Affected routines: ZoomMatNMR 01-12-'10: Several small bugs were fixed in the peak fitting routine regarding reading and showing previous fitting results. Affected routines: peakfit 01-12-'10: The spectral widths were not converted from Hz to kHz when reading MacNMR or NTNMR data. Affected routines: Qfidread 01-12-'10: Finally removed all visible instances of PPM and replaced it by ppm. Affected routines: matNMR1DButtons, stats1d, stats2d, scale1d 02-08-'11: The axis parameters were not set properly in regelmake1derrorbar (color scheme settings have never been implemented). Now the same is used again as in asaanpas. The same problem was found for the 1D bar plot. Affected routines: regelmake1derrorbar, regelmake1dbar 05-08-'11: Fixed the age-old problem of not being able to enter as input complicated syntax with structures. Now everything relies on a try-catch. If the try, which tries to adapt the input to matNMR structures, fails then the overall expression is used. If this fails then an error is produced. Affected routines: checkinput1d, checkinputdual 05-12-'11: The errorhandler routine has been changed to deal with the Matlab version properly (belowe Matlab 7.5 the error handling is too primitive) Affected routines: errorhandler 05-12-'11: A long-standing issue with reading TopSpin data has been solved: until now it was not clear to me how to deal with the time domain saize properly. Now I have introduced the minimum buffer size of 256 (as used by Bruker) and this seems to solve the problems. Affected routines: Qfidread, QReadParameterFiles 22-04-'12: Added -dpdf to the matprint routine. According to the Matlab help interface this may not work for all systems! Affected routines: matprint 02-07-'12: Reading binary data formats in offline mode suffered from an implicit demand for complex data. This has already been limited to a few data formats only in the main code, but not yet in the offline routine. Affected routines: matNMRReadBinaryFID ============= !web release! : january 8 2014, version 3.9.130 ==> manual not updated yet since release 3.9.26 ============= 13-08-'14: The paperposition was undefined for 2D/3D viewer windows. That led to an inconsistency between Matlab versions when using CopyFigure (and trying to print from there. =============================================================================================================================== Issues to get matNMR to work again for R2014b and newer: 14-05-'15: The handle for the UIcontrol was encoded in the callback of the UImenu itself as a double. Now the handle is called directly (the variable was already stored in the QmatNMR variable anyway). Affected routines: matNMR2DPanelButtons 14-05-'15: Up to version 8.5 (R2015a) is now accepted by matNMR. Affected routines: matNMRinitvars.m 14-05-'15: The stop routines used incompatible ways to detect figure handles. Now everything is done using try-catch loops, which works in all versions. Affected routines: stopnmr, stopnmr2d, stopmatnmr, stopT1fit, stopcsafit, stopquadfit, stoppeakfit, stopDifffit, Qdefault 14-05-'15: The automatic link between the axis foreground colour and the colour of the axis labels appears to be broken. Now this is set directly. Affected routines: asaanpas 14-05-'15: The menubar was not switched off in the peak fitting window. Affected routines: pk_init 14-05-'15: Pre-defining variables for figure handles must now be done using [] instead of 0. In all routines the check will now be done using isempty instead of (x > 0). Affected routines: matNMRinitvars, basl1dmenu, matNMR3DButtons, Qdefault, Qoptions, Qscreenops, QuiInput, regelnaam, stats2d, stopbasl1d, stopbasl2d, basl2dmenu, clabels, doeopties, klabels, makenew3D, matNMR3DButtons, matNMRintro, Qfileops, Qfontops, Qlinedata, Qscreenops, Qsetcolorscheme, Qtextdata, QuiInput_2, regelstepwisebuttons, stats1d, stats2d, stopbasl1d, stopbasl2d, whataxis1d, whataxis2d, nmr, nmr2d 14-05-'15: Changing the size of the windows was no longer functional because several old-style window types were being called. Now only the current name for the 2D/3D window is called. Also, the old setunits routine was called. Affected routines: Qdefault 14-05-'15: Using subplots was no longer functional due to the new style of handles and the way cell2mat reacts to that. Now arrays of handles are operated on using a for loop, if a parameter from the handle is addressed. Affected routines: Subplots 14-05-'15: Rotate3DmatNMR was no longer functional. This was a useful error because it pointed to the fact that the Rotate3DmatNMR routine was not yet completely independent from its mathworks original rotate3d. Why this error hasn't popped up before is unclear to me. Affected routines: Rotate3DmatNMR 29-05-'15: The copy figure routine crashed due to a handle issue. Affected routines: CopyFig 13-09-'15: Exactly the same issue occured in regelsavefitdisk, that also produced problems in CopyFig. Affected routines: regelsavefitdisk 13-09-'15: The matprint routine was severely affected by a handle issue. Affected routines: matprint 21-11-'15: Release R2015b is now recognized. =============================================================================================================================== TO DO: finish the processing scripts for the Cadzow filtering and the conversion from macro to script. TO DO: finish the processing scripts for shifting a spectrum in the FD + conversion to script for 1D!! TO DO: implement MEM in script-based processing for 1D and 2D + make a conversion from macro to script for 1D MEM. TO DO: the asklinecolor routine doesn't exist yet even though it is in the plot manipulations menus. TO DO: all line properties zo maken dat ze ook in de 2D/3D viewer werken op verschillende assen, net als bij de andere functies.