This function supervises the entire import process. Not all official formats are supported, see the vignettes. Prior to release, this package is checked against a very large number of files in the author's collection. However, the JCAMP-DX standard allows many variations and it is difficult to anticipate all permutations. Error messages will generally let you know what's going on. If you have a file that you feel should be supported but gives an error, please file an issue at Github and share the file.
readJDX(file = "", SOFC = TRUE, debug = 0)
Character. The file name to import.
Logical. "Stop on Failed Check"
The default is TRUE
i.e. stop when something is not right.
This ensures that correct data is returned. Change to FALSE
at your own risk.
NOTE: Only certain checks can be skipped via this option, as there are some
parameters that must be available and correct in order to return any answer.
For instance, one must end up with the same number of X and Y values.
This option is provided for those advanced
users who have carefully checked their original files and want to skip the
required checks. It may also be useful for troubleshooting.
The JCAMP-DX standard typically requires
several checks of the data as it is decompressed. These checks are essential
to obtaining the correct results. However, some JCAMP-DX writing programs
do not follow the standard to the letter. For instance we have observed that
not all JCAMP-DX writers put FIRSTY into the metadata, even though it is required by
the standard. In other cases values in the file have low precision (see section on precision).
Another example we have observed is NMR files where the X values are the count/index of data points,
and FIRSTY is given in Hz. Since the field strength and center of the sweep frequency are needed
to convert to ppm, and these are parameters not required in the standard, one cannot return an
answer in either ppm or Hz automatically.
In cases like this, one can set SOFC = FALSE
and then manually convert the X axis.
Integer. The level of debug reporting desired. For those options giving
a lot of output, you may wish to consider directing the output via sinkall
and then search the results for the problematic lines.
1 or higher = import progress is reported.
2 = details about the variable lists, compression formats and parameters that were found.
3 = print the extracted X values (huge output!).
4 = detailed info on the Y value processing (huge output!).
5 = detailed info about processing the Y values when DUP is in use (huge output!).
6 = detailed info about processing the Y values when DIF is in use (huge output!).
In cases when an error is about to stop execution, you get additional information regardless of
the debug
value.
A list, as follows:
The first element is a data frame summarizing the pieces of the imported file.
The second element is the file metadata.
The third element is a integer vector giving the comment lines found (exclusive of the metdata, which typically contains many comments).
Additional elements contain the extracted data as follows:
If the file contains one non-NMR spectrum, or a processed NMR spectrum (i.e. only the final real data), a single data frame.
If the file contains the real and imaginary parts of a 1D NMR spectrum, there will be two data frames, one containing the real portion and the other the imaginary portion.
In all cases above, the data frame has elements x
and y
.
In the case of 2D NMR data, additional named list elements are returned including the F2 frequency values, the F1 frequency values, and a matrix containing the 2D data.
In the case of LC-MS or GC-MS data, a data frame is returned for each time point.
The data frame has elements mz
and int
(intensity). Each time point
is named with the time from the file.
The examples make use of data files included with the package:
File SBO.jdx
is an IR spectrum of Smart Balance Original spread (a butter
substitute). The spectrum is presented in transmission format, and was recorded on a
ThermoFisher instrument. The file uses AFFN compression, and was written
with the JCAMP-DX 5.01 standard. Note that even though the Y-axis was recorded in
percent transmission, in the JDX file it is stored on [0...1].
File PCRF.jdx
is a 1H NMR spectrum of a hexane extract of a reduced fat potato chip.
The spectrum was recorded on a JEOL instrument. The file uses SQZ DIF DUP compression,
and was written with the JCAMP-DX 6.00 standard.
File PCRF_line265.jdx
has a deliberate error in it.
File isasspc1.jdx
is a 2D NMR file recorded on a JEOL GX 400 instrument.
The file is freely available at http://www.jcamp-dx.org/.
File MiniDIFDUP.JDX
is a small demonstration file, used in the vignettes to
illustrate the decompression process. It is derived from a freely available file.
Internally, this package uses a tolerance factor when comparing values during certain checks.
This is desirable because the original values in the files
are text strings of varying lengths which get converted to numerical values by R
. Occasionally
values in the file, such as FIRSTY, are stored with low precision, and the computation of the
value to be compared occurs with much greater precision. In these cases the check can fail
even when the tolerance is pretty loose. In these cases one might consider setting
SOFC = FALSE
to allow the calculation to proceed. If you do this, be certain to check
the results carefully as described under SOFC
.
The standard requires a "Y Value Check" when in DIF mode. Extra Y values have been appended to each line to use in the check, and the last Y value on a line must equal the first Y value on the next line IFF one is in DIF mode. After a successful check, the extra Y value must be removed. In actual practice, some vendors, at least some of the time, seem to differ as to the meaning of "being in DIF mode". In turn, this determines how the Y value check should proceed.
The standard says "When, and only when, the last ordinate of a line is in DIF form ... The first ordinate of the next line ... is always an actual value, equal to the last calculated ordinate of the previous line". See section 5.8.3 of the 1988 publication.
Taking this definition literally, the Y value check (and removal of the extra value), should occur when one sees e.g. ... DIF DIF DIF (end of line). Let's call this "literal DIF". A literal DIF is easy to detect and act on.
In other cases, something like ... DIF DUP DUP (end of line) is considered to be in DIF mode for Y value check purposes. In these cases we have look backwards to see if we are in DIF mode. Let's call this "relayed DIF".
However, some vendors may treat ... DIF DUP DUP (end of line) as not in DIF mode, and hence one should not do the Y value check and not remove any values, as this vendor would not have added an extra Y value.
In addition to these three possibilities, readJDX
through versions 0.3.xx used a different
definition, namely if there were any DIF entries anywhere on the line, then DIF mode was
assumed and the Y value check carried out. This worked for many files, but not all.
In the 0.4.xx series, readJDX
detects both the literal and relayed definitions and
tries to keep moving forward as much as possible.
readJDX
is not particularly fast. Priority has been given to assuring correct answers,
helpful debugging messages and understandable code.
Do browseVignettes("readJDX")
for background information,
references, supported formats, and details about the roles of each function.
If you have a multiblock file (which contains multiple spectra, but not 2D NMR,
LC-MS or GC-MS data sets), please see
splitMultiblockDX
for a function to break such files into
individual files which can then be processed in the normal way.
# IR spectrum
sbo <- system.file("extdata", "SBO.jdx", package = "readJDX")
chk <- readJDX(sbo)
plot(chk[[4]]$x, chk[[4]]$y / 100,
type = "l", main = "Original Smart Balance Spread",
xlab = "wavenumber", ylab = "Percent Transmission"
)
# 1H NMR spectrum
pcrf <- system.file("extdata", "PCRF.jdx", package = "readJDX")
chk <- readJDX(pcrf)
plot(chk[[4]]$x, chk[[4]]$y,
type = "l", main = "Reduced Fat Potato Chip Extract",
xlab = "ppm", ylab = "Intensity"
)
# Capturing processing for troubleshooting
mdd <- system.file("extdata", "MiniDIFDUP.JDX", package = "readJDX")
tf <- tempfile(pattern = "Troubleshooting", fileext = "txt")
sinkall(tf)
chk <- readJDX(mdd, debug = 6)
#>
#>
#> Processing file /home/runner/work/_temp/Library/readJDX/extdata/MiniDIFDUP.JDX which appears to contain XYY data
#>
#> Processing variable list...
#>
#>
#>
#> ==================== Raw lines:
#>
#> Line_17
#> "4861896G493jknkJlkJjJlK%jO%kNTjNKJNKMlmKq%MnKk%OjJKJKTN%NM%NK%JM%JjKTJTkMlKlKJ"
#> Line_18
#> "4729586G542nNjKmJM%JmMjljKmklT%lJkN%jMLN%TMKl%Kj%mkjkTlokmqkqj0oTrj4j3j9k3k8l8"
#> Line_19
#> "4611099G336m7o0q2j07j38j73k10k40k62k53k11j55p2K0J09J76K11K28K20J97J70J45J22J01"
#> Line_20
#> "4563705G025Q6P0O0N1M4L8L2K8K4K1J7J8J1RTQNMTkMTjNLNMJULJKUJjJkTnmkTLTJ0OLRMULJM"
#> Line_21
#> "4453117G637JTLJKTJ%JLkKLl%LjJL%KjTMJ%jLJjKl%KL%l%jKJjJKTJlj%KJ%TlKTkLTjKJTMJTK"
#> Line_22
#> "4320808G688JKTkLjJOkjJTjTKkK%Uk%jLNkmLj%LlJKlOmjKkM%JT%TkNKkJjkJjLTmKJkKkLJmJL"
#> Line_23
#> "4186523G715%jTKLKlJLkjKJ%jUKUkJKTljKnMJ%LmNJjUMkLkT%UjM%KJKjj3J1PnMKLJ%TKj%MkK"
#> Line_24
#> "4050263G750J%jKJTK%Jq%NKJlKlKTpNMlK%KlJ%Uj%TOj9%J8k%jKklL%lKLmMj%JNj1j2K0lQj5"
#> Line_25
#> "3929802G753k9L4QmOkM%nJMkNJ%TkJKJlKTmTQk%Mk4LK3kJlJN%LkLJL%MnJKjLl8JK7lJ0MjLlj"
#> Line_26
#> "3811316G794Jk%Mk%MpKkMmTnPJ5r1J2Q0k2J7kTjqJ6rPqOmn3L1K3L%m8L3K0j4J3pOjrMTkJl%"
#>
#>
#>
#> ==================== Lines after preliminary processing:
#>
#> $Line_17
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "4861896" "G493" "j" "k" "n" "k" "J" "l"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "k" "J" "j" "J" "l" "K" "%" "j"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "O" "%" "k" "N" "T" "j" "N" "K"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J" "N" "K" "M" "l" "m" "K" "q"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "%" "M" "n" "K" "k" "%" "O" "j"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "J" "K" "J" "K" "T" "N" "%" "N"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "M" "%" "N" "K" "%" "J" "M" "%"
#> DIF DIF DIF DUP DIF DUP DIF DIF
#> "J" "j" "K" "T" "J" "T" "k" "M"
#> DIF DIF DIF DIF DIF
#> "l" "K" "l" "K" "J"
#>
#> $Line_18
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "4729586" "G542" "n" "N" "j" "K" "m" "J"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "M" "%" "J" "m" "M" "j" "l" "j"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "K" "m" "k" "l" "T" "%" "l" "J"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "k" "N" "%" "j" "M" "L" "N" "%"
#> DUP DIF DIF DIF DIF DIF DIF DIF
#> "T" "M" "K" "l" "%" "K" "j" "%"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "m" "k" "j" "k" "T" "l" "o" "k"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "m" "q" "k" "q" "j0" "o" "T" "r"
#> DIF DIF DIF DIF DIF DIF
#> "j4" "j3" "j9" "k3" "k8" "l8"
#>
#> $Line_19
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "4611099" "G336" "m7" "o0" "q2" "j07" "j38" "j73"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "k10" "k40" "k62" "k53" "k11" "j55" "p2" "K0"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J09" "J76" "K11" "K28" "K20" "J97" "J70" "J45"
#> DIF DIF
#> "J22" "J01"
#>
#> $Line_20
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "4563705" "G025" "Q6" "P0" "O0" "N1" "M4" "L8"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "L2" "K8" "K4" "K1" "J7" "J8" "J1" "R"
#> DUP DIF DIF DIF DUP DIF DIF DUP
#> "T" "Q" "N" "M" "T" "k" "M" "T"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "j" "N" "L" "N" "M" "J" "U" "L"
#> DIF DIF DUP DIF DIF DIF DIF DUP
#> "J" "K" "U" "J" "j" "J" "k" "T"
#> DIF DIF DIF DUP DIF DUP DIF DIF
#> "n" "m" "k" "T" "L" "T" "J0" "O"
#> DIF DIF DIF DUP DIF DIF DIF
#> "L" "R" "M" "U" "L" "J" "M"
#>
#> $Line_21
#> NUM SQZ DIF DUP DIF DIF DIF DUP
#> "4453117" "G637" "J" "T" "L" "J" "K" "T"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J" "%" "J" "L" "k" "K" "L" "l"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "%" "L" "j" "J" "L" "%" "K" "j"
#> DUP DIF DIF DIF DIF DIF DIF DIF
#> "T" "M" "J" "%" "j" "L" "J" "j"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "K" "l" "%" "K" "L" "%" "l" "%"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "j" "K" "J" "j" "J" "K" "T" "J"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "l" "j" "%" "K" "J" "%" "T" "l"
#> DIF DUP DIF DIF DUP DIF DIF DIF
#> "K" "T" "k" "L" "T" "j" "K" "J"
#> DUP DIF DIF DUP DIF
#> "T" "M" "J" "T" "K"
#>
#> $Line_22
#> NUM SQZ DIF DIF DUP DIF DIF DIF
#> "4320808" "G688" "J" "K" "T" "k" "L" "j"
#> DIF DIF DIF DIF DIF DUP DIF DUP
#> "J" "O" "k" "j" "J" "T" "j" "T"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "K" "k" "K" "%" "U" "k" "%" "j"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "L" "N" "k" "m" "L" "j" "%" "L"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "l" "J" "K" "l" "O" "m" "j" "K"
#> DIF DIF DIF DIF DUP DIF DUP DIF
#> "k" "M" "%" "J" "T" "%" "T" "k"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "N" "K" "k" "J" "j" "k" "J" "j"
#> DIF DUP DIF DIF DIF DIF DIF DIF
#> "L" "T" "m" "K" "J" "k" "K" "k"
#> DIF DIF DIF DIF DIF
#> "L" "J" "m" "J" "L"
#>
#> $Line_23
#> NUM SQZ DIF DIF DUP DIF DIF DIF
#> "4186523" "G715" "%" "j" "T" "K" "L" "K"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "l" "J" "L" "k" "j" "K" "J" "%"
#> DIF DUP DIF DUP DIF DIF DIF DUP
#> "j" "U" "K" "U" "k" "J" "K" "T"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "l" "j" "K" "n" "M" "J" "%" "L"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "m" "N" "J" "j" "U" "M" "k" "L"
#> DIF DUP DIF DUP DIF DIF DIF DIF
#> "k" "T" "%" "U" "j" "M" "%" "K"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J" "K" "j" "j3" "J1" "P" "n" "M"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "K" "L" "J" "%" "T" "K" "j" "%"
#> DIF DIF DIF
#> "M" "k" "K"
#>
#> $Line_24
#> NUM SQZ DIF DIF DIF DIF DIF DUP
#> "4050263" "G750" "J" "%" "j" "K" "J" "T"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "K" "%" "J" "q" "%" "N" "K" "J"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "l" "K" "l" "K" "T" "p" "N" "M"
#> DIF DIF DIF DIF DIF DIF DIF DUP
#> "l" "K" "%" "K" "l" "J" "%" "U"
#> DIF DIF DUP DIF DIF DIF DIF DIF
#> "j" "%" "T" "O" "j9" "%" "J8" "k"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "%" "j" "K" "k" "l" "L" "%" "l"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "K" "L" "m" "M" "j" "%" "J" "N"
#> DIF DIF DIF DIF DIF DIF
#> "j1" "j2" "K0" "l" "Q" "j5"
#>
#> $Line_25
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "3929802" "G753" "k9" "L4" "Q" "m" "O" "k"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "M" "%" "n" "J" "M" "k" "N" "J"
#> DIF DUP DIF DIF DIF DIF DIF DIF
#> "%" "T" "k" "J" "K" "J" "l" "K"
#> DUP DIF DUP DIF DIF DIF DIF DIF
#> "T" "m" "T" "Q" "k" "%" "M" "k4"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "L" "K3" "k" "J" "l" "J" "N" "%"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "L" "k" "L" "J" "L" "%" "M" "n"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J" "K" "j" "L" "l8" "J" "K7" "l"
#> DIF DIF DIF DIF DIF DIF
#> "J0" "M" "j" "L" "l" "j"
#>
#> $Line_26
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "3811316" "G794" "J" "k" "%" "M" "k" "%"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "M" "p" "K" "k" "M" "m" "T" "n"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "P" "J5" "r1" "J2" "Q0" "k2" "J7" "k"
#> DUP DIF DIF DIF DIF DIF DIF DIF
#> "T" "j" "q" "J6" "r" "P" "q" "O"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "m" "n3" "L1" "K3" "L" "%" "m8" "L3"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "K0" "j4" "J3" "p" "O" "j" "r" "M"
#> DUP DIF DIF DIF DIF
#> "T" "k" "J" "l" "%"
#>
#>
#> Undoing DIF compression:
#>
#> Line_17 passed to deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "4861896" "7493" "j" "k" "n" "k" "J" "l"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "k" "J" "j" "J" "l" "K" "%" "j"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "O" "%" "k" "N" "N" "j" "N" "K"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J" "N" "K" "M" "l" "m" "K" "q"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "%" "M" "n" "K" "k" "%" "O" "j"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "J" "K" "J" "K" "K" "N" "%" "N"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "M" "%" "N" "K" "%" "J" "M" "%"
#> DIF DIF DIF DUP DIF DUP DIF DIF
#> "J" "j" "K" "K" "J" "J" "k" "M"
#> DIF DIF DIF DIF DIF
#> "l" "K" "l" "K" "J"
#>
#> Line_17 as processed by deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF DIF DIF
#> 4861896 7493 7492 7490 7485 7483 7484 7481 7479 7480
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7479 7480 7477 7479 7479 7478 7484 7484 7482 7487
#> DUP DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7492 7491 7496 7498 7499 7504 7506 7510 7507 7503
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7505 7497 7497 7501 7496 7498 7496 7496 7502 7501
#> DIF DIF DIF DIF DUP DIF DIF DIF DIF DIF
#> 7502 7504 7505 7507 7509 7514 7514 7519 7523 7523
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DUP
#> 7528 7530 7530 7531 7535 7535 7536 7535 7537 7539
#> DIF DUP DIF DIF DIF DIF DIF DIF DIF
#> 7540 7541 7539 7543 7540 7542 7539 7541 7542
#>
#> Undoing DIF compression:
#>
#> Line_18 passed to deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "4729586" "7542" "n" "N" "j" "K" "m" "J"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "M" "%" "J" "m" "M" "j" "l" "j"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "K" "m" "k" "l" "l" "%" "l" "J"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "k" "N" "%" "j" "M" "L" "N" "%"
#> DUP DIF DIF DIF DIF DIF DIF DIF
#> "%" "M" "K" "l" "%" "K" "j" "%"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "m" "k" "j" "k" "k" "l" "o" "k"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "m" "q" "k" "q" "j0" "o" "o" "r"
#> DIF DIF DIF DIF DIF DIF
#> "j4" "j3" "j9" "k3" "k8" "l8"
#>
#> Line_18 as processed by deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF DIF DIF
#> 4729586 7542 7537 7542 7541 7543 7539 7540 7544 7544
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7545 7541 7545 7544 7541 7540 7542 7538 7536 7533
#> DUP DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7530 7530 7527 7528 7526 7531 7531 7530 7534 7537
#> DIF DIF DUP DIF DIF DIF DIF DIF DIF DIF
#> 7542 7542 7542 7546 7548 7545 7545 7547 7546 7546
#> DIF DIF DIF DIF DUP DIF DIF DIF DIF DIF
#> 7542 7540 7539 7537 7535 7532 7526 7524 7520 7512
#> DIF DIF DIF DIF DUP DIF DIF DIF DIF DIF
#> 7510 7502 7492 7486 7480 7471 7457 7444 7425 7402
#> DIF DIF
#> 7374 7336
#>
#> Undoing DIF compression:
#>
#> Line_19 passed to deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "4611099" "7336" "m7" "o0" "q2" "j07" "j38" "j73"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "k10" "k40" "k62" "k53" "k11" "j55" "p2" "K0"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J09" "J76" "K11" "K28" "K20" "J97" "J70" "J45"
#> DIF DIF
#> "J22" "J01"
#>
#> Line_19 as processed by deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF DIF DIF
#> 4611099 7336 7289 7229 7147 7040 6902 6729 6519 6279
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 6017 5764 5553 5398 5326 5346 5455 5631 5842 6070
#> DIF DIF DIF DIF DIF DIF
#> 6290 6487 6657 6802 6924 7025
#>
#> Undoing DIF compression:
#>
#> Line_20 passed to deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "4563705" "7025" "Q6" "P0" "O0" "N1" "M4" "L8"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "L2" "K8" "K4" "K1" "J7" "J8" "J1" "R"
#> DUP DIF DIF DIF DUP DIF DIF DUP
#> "R" "Q" "N" "M" "M" "k" "M" "M"
#> DIF DIF DIF DIF DIF DIF DUP DUP
#> "j" "N" "L" "N" "M" "J" "J" "J"
#> DIF DIF DIF DUP DUP DIF DIF DIF
#> "L" "J" "K" "K" "K" "J" "j" "J"
#> DIF DUP DIF DIF DIF DUP DIF DUP
#> "k" "k" "n" "m" "k" "k" "L" "L"
#> DIF DIF DIF DIF DIF DUP DUP DIF
#> "J0" "O" "L" "R" "M" "M" "M" "L"
#> DIF DIF
#> "J" "M"
#>
#> Line_20 as processed by deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF DIF DIF
#> 4563705 7025 7111 7181 7241 7292 7336 7374 7406 7434
#> DIF DIF DIF DIF DIF DIF DUP DIF DIF DIF
#> 7458 7479 7496 7514 7525 7534 7543 7551 7556 7560
#> DUP DIF DIF DUP DIF DIF DIF DIF DIF DIF
#> 7564 7562 7566 7570 7569 7574 7577 7582 7586 7587
#> DUP DUP DIF DIF DIF DUP DUP DIF DIF DIF
#> 7588 7589 7592 7593 7595 7597 7599 7600 7599 7600
#> DIF DUP DIF DIF DIF DUP DIF DUP DIF DIF
#> 7598 7596 7591 7587 7585 7583 7586 7589 7599 7605
#> DIF DIF DIF DUP DUP DIF DIF DIF
#> 7608 7617 7621 7625 7629 7632 7633 7637
#>
#> Undoing DIF compression:
#>
#> Line_21 passed to deDIF:
#> NUM SQZ DIF DUP DIF DIF DIF DUP
#> "4453117" "7637" "J" "J" "L" "J" "K" "K"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J" "%" "J" "L" "k" "K" "L" "l"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "%" "L" "j" "J" "L" "%" "K" "j"
#> DUP DIF DIF DIF DIF DIF DIF DIF
#> "j" "M" "J" "%" "j" "L" "J" "j"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "K" "l" "%" "K" "L" "%" "l" "%"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "j" "K" "J" "j" "J" "K" "K" "J"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "l" "j" "%" "K" "J" "%" "%" "l"
#> DIF DUP DIF DIF DUP DIF DIF DIF
#> "K" "K" "k" "L" "L" "j" "K" "J"
#> DUP DIF DIF DUP DIF
#> "J" "M" "J" "J" "K"
#>
#> Line_21 as processed by deDIF:
#> NUM SQZ DIF DUP DIF DIF DIF DUP DIF DIF
#> 4453117 7637 7638 7639 7642 7643 7645 7647 7648 7648
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7649 7652 7650 7652 7655 7652 7652 7655 7654 7655
#> DIF DIF DIF DIF DUP DIF DIF DIF DIF DIF
#> 7658 7658 7660 7659 7658 7662 7663 7663 7662 7665
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7666 7665 7667 7664 7664 7666 7669 7669 7666 7666
#> DIF DIF DIF DIF DIF DIF DUP DIF DIF DIF
#> 7665 7667 7668 7667 7668 7670 7672 7673 7670 7669
#> DIF DIF DIF DIF DUP DIF DIF DUP DIF DIF
#> 7669 7671 7672 7672 7672 7669 7671 7673 7671 7674
#> DUP DIF DIF DIF DUP DIF DIF DUP DIF
#> 7677 7676 7678 7679 7680 7684 7685 7686 7688
#>
#> Undoing DIF compression:
#>
#> Line_22 passed to deDIF:
#> NUM SQZ DIF DIF DUP DIF DIF DIF
#> "4320808" "7688" "J" "K" "K" "k" "L" "j"
#> DIF DIF DIF DIF DIF DUP DIF DUP
#> "J" "O" "k" "j" "J" "J" "j" "j"
#> DIF DIF DIF DIF DUP DUP DIF DIF
#> "K" "k" "K" "%" "%" "%" "k" "%"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "j" "L" "N" "k" "m" "L" "j" "%"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "L" "l" "J" "K" "l" "O" "m" "j"
#> DIF DIF DIF DIF DIF DUP DIF DUP
#> "K" "k" "M" "%" "J" "J" "%" "%"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "k" "N" "K" "k" "J" "j" "k" "J"
#> DIF DIF DUP DIF DIF DIF DIF DIF
#> "j" "L" "L" "m" "K" "J" "k" "K"
#> DIF DIF DIF DIF DIF DIF
#> "k" "L" "J" "m" "J" "L"
#>
#> Line_22 as processed by deDIF:
#> NUM SQZ DIF DIF DUP DIF DIF DIF DIF DIF
#> 4320808 7688 7689 7691 7693 7691 7694 7693 7694 7700
#> DIF DIF DIF DUP DIF DUP DIF DIF DIF DIF
#> 7698 7697 7698 7699 7698 7697 7699 7697 7699 7699
#> DUP DUP DIF DIF DIF DIF DIF DIF DIF DIF
#> 7699 7699 7697 7697 7696 7699 7704 7702 7698 7701
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7700 7700 7703 7700 7701 7703 7700 7706 7702 7701
#> DIF DIF DIF DIF DIF DUP DIF DUP DIF DIF
#> 7703 7701 7705 7705 7706 7707 7707 7707 7705 7710
#> DIF DIF DIF DIF DIF DIF DIF DIF DUP DIF
#> 7712 7710 7711 7710 7708 7709 7708 7711 7714 7710
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7712 7713 7711 7713 7711 7714 7715 7711 7712 7715
#>
#> Undoing DIF compression:
#>
#> Line_23 passed to deDIF:
#> NUM SQZ DIF DIF DUP DIF DIF DIF
#> "4186523" "7715" "%" "j" "j" "K" "L" "K"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "l" "J" "L" "k" "j" "K" "J" "%"
#> DIF DUP DUP DIF DUP DUP DIF DIF
#> "j" "j" "j" "K" "K" "K" "k" "J"
#> DIF DUP DIF DIF DIF DIF DIF DIF
#> "K" "K" "l" "j" "K" "n" "M" "J"
#> DIF DIF DIF DIF DIF DIF DUP DUP
#> "%" "L" "m" "N" "J" "j" "j" "j"
#> DIF DIF DIF DIF DUP DIF DUP DUP
#> "M" "k" "L" "k" "k" "%" "%" "%"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "j" "M" "%" "K" "J" "K" "j" "j3"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J1" "P" "n" "M" "K" "L" "J" "%"
#> DUP DIF DIF DIF DIF DIF DIF
#> "%" "K" "j" "%" "M" "k" "K"
#>
#> Line_23 as processed by deDIF:
#> NUM SQZ DIF DIF DUP DIF DIF DIF DIF DIF
#> 4186523 7715 7715 7714 7713 7715 7718 7720 7717 7718
#> DIF DIF DIF DIF DIF DIF DIF DUP DUP DIF
#> 7721 7719 7718 7720 7721 7721 7720 7719 7718 7720
#> DUP DUP DIF DIF DIF DUP DIF DIF DIF DIF
#> 7722 7724 7722 7723 7725 7727 7724 7723 7725 7720
#> DIF DIF DIF DIF DIF DIF DIF DIF DUP DUP
#> 7724 7725 7725 7728 7724 7729 7730 7729 7728 7727
#> DIF DIF DIF DIF DUP DIF DUP DUP DIF DIF
#> 7731 7729 7732 7730 7728 7728 7728 7728 7727 7731
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7731 7733 7734 7736 7735 7722 7733 7740 7735 7739
#> DIF DIF DIF DIF DUP DIF DIF DIF DIF DIF
#> 7741 7744 7745 7745 7745 7747 7746 7746 7750 7748
#> DIF
#> 7750
#>
#> Undoing DIF compression:
#>
#> Line_24 passed to deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DUP
#> "4050263" "7750" "J" "%" "j" "K" "J" "J"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "K" "%" "J" "q" "%" "N" "K" "J"
#> DIF DIF DIF DIF DUP DIF DIF DIF
#> "l" "K" "l" "K" "K" "p" "N" "M"
#> DIF DIF DIF DIF DIF DIF DIF DUP
#> "l" "K" "%" "K" "l" "J" "%" "%"
#> DUP DIF DIF DUP DIF DIF DIF DIF
#> "%" "j" "%" "%" "O" "j9" "%" "J8"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "k" "%" "j" "K" "k" "l" "L" "%"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "l" "K" "L" "m" "M" "j" "%" "J"
#> DIF DIF DIF DIF DIF DIF DIF
#> "N" "j1" "j2" "K0" "l" "Q" "j5"
#>
#> Line_24 as processed by deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DUP DIF DIF
#> 4050263 7750 7751 7751 7750 7752 7753 7754 7756 7756
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7757 7749 7749 7754 7756 7757 7754 7756 7753 7755
#> DUP DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7757 7750 7755 7759 7756 7758 7758 7760 7757 7758
#> DIF DUP DUP DIF DIF DUP DIF DIF DIF DIF
#> 7758 7758 7758 7757 7757 7757 7763 7744 7744 7762
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7760 7760 7759 7761 7759 7756 7759 7759 7756 7758
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7761 7757 7761 7760 7760 7761 7766 7755 7743 7763
#> DIF DIF DIF
#> 7760 7768 7753
#>
#> Undoing DIF compression:
#>
#> Line_25 passed to deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "3929802" "7753" "k9" "L4" "Q" "m" "O" "k"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "M" "%" "n" "J" "M" "k" "N" "J"
#> DIF DUP DIF DIF DIF DIF DIF DIF
#> "%" "%" "k" "J" "K" "J" "l" "K"
#> DUP DIF DUP DIF DIF DIF DIF DIF
#> "K" "m" "m" "Q" "k" "%" "M" "k4"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "L" "K3" "k" "J" "l" "J" "N" "%"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "L" "k" "L" "J" "L" "%" "M" "n"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "J" "K" "j" "L" "l8" "J" "K7" "l"
#> DIF DIF DIF DIF DIF DIF
#> "J0" "M" "j" "L" "l" "j"
#>
#> Line_25 as processed by deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF DIF DIF
#> 3929802 7753 7724 7758 7766 7762 7768 7766 7770 7770
#> DIF DIF DIF DIF DIF DIF DIF DUP DIF DIF
#> 7765 7766 7770 7768 7773 7774 7774 7774 7772 7773
#> DIF DIF DIF DIF DUP DIF DUP DIF DIF DIF
#> 7775 7776 7773 7775 7777 7773 7769 7777 7775 7775
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7779 7755 7758 7781 7779 7780 7777 7778 7783 7783
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7786 7784 7787 7788 7791 7791 7795 7790 7791 7793
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7792 7795 7757 7758 7785 7782 7792 7796 7795 7798
#> DIF DIF
#> 7795 7794
#>
#> Undoing DIF compression:
#>
#> Line_26 passed to deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF
#> "3811316" "7794" "J" "k" "%" "M" "k" "%"
#> DIF DIF DIF DIF DIF DIF DUP DIF
#> "M" "p" "K" "k" "M" "m" "m" "n"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "P" "J5" "r1" "J2" "Q0" "k2" "J7" "k"
#> DUP DIF DIF DIF DIF DIF DIF DIF
#> "k" "j" "q" "J6" "r" "P" "q" "O"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "m" "n3" "L1" "K3" "L" "%" "m8" "L3"
#> DIF DIF DIF DIF DIF DIF DIF DIF
#> "K0" "j4" "J3" "p" "O" "j" "r" "M"
#> DUP DIF DIF DIF DIF
#> "M" "k" "J" "l" "%"
#>
#> Line_26 as processed by deDIF:
#> NUM SQZ DIF DIF DIF DIF DIF DIF DIF DIF
#> 3811316 7794 7795 7793 7793 7797 7795 7795 7799 7792
#> DIF DIF DIF DIF DUP DIF DIF DIF DIF DIF
#> 7794 7792 7796 7792 7788 7783 7790 7805 7714 7726
#> DIF DIF DIF DIF DUP DIF DIF DIF DIF DIF
#> 7806 7784 7801 7799 7797 7796 7788 7804 7795 7802
#> DIF DIF DIF DIF DIF DIF DIF DIF DIF DIF
#> 7794 7800 7796 7743 7774 7797 7800 7800 7752 7785
#> DIF DIF DIF DIF DIF DIF DIF DIF DUP DIF
#> 7805 7791 7804 7797 7803 7802 7793 7797 7801 7799
#> DIF DIF DIF
#> 7800 7797 7797
#>
#> Carrying out Y value checks...
#>
#> yValueCheck sees a literal DIF mode on Line_17
#> yValueCheck is removing the last value, 7542 from Line_17
#>
#> yValueCheck sees a literal DIF mode on Line_18
#> yValueCheck is removing the last value, 7336 from Line_18
#>
#> yValueCheck sees a literal DIF mode on Line_19
#> yValueCheck is removing the last value, 7025 from Line_19
#>
#> yValueCheck sees a literal DIF mode on Line_20
#> yValueCheck is removing the last value, 7637 from Line_20
#>
#> yValueCheck sees a literal DIF mode on Line_21
#> yValueCheck is removing the last value, 7688 from Line_21
#>
#> yValueCheck sees a literal DIF mode on Line_22
#> yValueCheck is removing the last value, 7715 from Line_22
#>
#> yValueCheck sees a literal DIF mode on Line_23
#> yValueCheck is removing the last value, 7750 from Line_23
#>
#> yValueCheck sees a literal DIF mode on Line_24
#> yValueCheck is removing the last value, 7753 from Line_24
#>
#> yValueCheck sees a literal DIF mode on Line_25
#> yValueCheck is removing the last value, 7794 from Line_25
#>
#>
#> yValueCheck: Line_26 does not appear to be a checkpoint line
#>
#>
#> ...Y value checks completed
#>
#>
#>
#> ==================== Lines after full processing to numeric:
#>
#> $Line_17
#> [1] 4861896 7493 7492 7490 7485 7483 7484 7481 7479
#> [10] 7480 7479 7480 7477 7479 7479 7478 7484 7484
#> [19] 7482 7487 7492 7491 7496 7498 7499 7504 7506
#> [28] 7510 7507 7503 7505 7497 7497 7501 7496 7498
#> [37] 7496 7496 7502 7501 7502 7504 7505 7507 7509
#> [46] 7514 7514 7519 7523 7523 7528 7530 7530 7531
#> [55] 7535 7535 7536 7535 7537 7539 7540 7541 7539
#> [64] 7543 7540 7542 7539 7541
#>
#> $Line_18
#> [1] 4729586 7542 7537 7542 7541 7543 7539 7540 7544
#> [10] 7544 7545 7541 7545 7544 7541 7540 7542 7538
#> [19] 7536 7533 7530 7530 7527 7528 7526 7531 7531
#> [28] 7530 7534 7537 7542 7542 7542 7546 7548 7545
#> [37] 7545 7547 7546 7546 7542 7540 7539 7537 7535
#> [46] 7532 7526 7524 7520 7512 7510 7502 7492 7486
#> [55] 7480 7471 7457 7444 7425 7402 7374
#>
#> $Line_19
#> [1] 4611099 7336 7289 7229 7147 7040 6902 6729 6519
#> [10] 6279 6017 5764 5553 5398 5326 5346 5455 5631
#> [19] 5842 6070 6290 6487 6657 6802 6924
#>
#> $Line_20
#> [1] 4563705 7025 7111 7181 7241 7292 7336 7374 7406
#> [10] 7434 7458 7479 7496 7514 7525 7534 7543 7551
#> [19] 7556 7560 7564 7562 7566 7570 7569 7574 7577
#> [28] 7582 7586 7587 7588 7589 7592 7593 7595 7597
#> [37] 7599 7600 7599 7600 7598 7596 7591 7587 7585
#> [46] 7583 7586 7589 7599 7605 7608 7617 7621 7625
#> [55] 7629 7632 7633
#>
#> $Line_21
#> [1] 4453117 7637 7638 7639 7642 7643 7645 7647 7648
#> [10] 7648 7649 7652 7650 7652 7655 7652 7652 7655
#> [19] 7654 7655 7658 7658 7660 7659 7658 7662 7663
#> [28] 7663 7662 7665 7666 7665 7667 7664 7664 7666
#> [37] 7669 7669 7666 7666 7665 7667 7668 7667 7668
#> [46] 7670 7672 7673 7670 7669 7669 7671 7672 7672
#> [55] 7672 7669 7671 7673 7671 7674 7677 7676 7678
#> [64] 7679 7680 7684 7685 7686
#>
#> $Line_22
#> [1] 4320808 7688 7689 7691 7693 7691 7694 7693 7694
#> [10] 7700 7698 7697 7698 7699 7698 7697 7699 7697
#> [19] 7699 7699 7699 7699 7697 7697 7696 7699 7704
#> [28] 7702 7698 7701 7700 7700 7703 7700 7701 7703
#> [37] 7700 7706 7702 7701 7703 7701 7705 7705 7706
#> [46] 7707 7707 7707 7705 7710 7712 7710 7711 7710
#> [55] 7708 7709 7708 7711 7714 7710 7712 7713 7711
#> [64] 7713 7711 7714 7715 7711 7712
#>
#> $Line_23
#> [1] 4186523 7715 7715 7714 7713 7715 7718 7720 7717
#> [10] 7718 7721 7719 7718 7720 7721 7721 7720 7719
#> [19] 7718 7720 7722 7724 7722 7723 7725 7727 7724
#> [28] 7723 7725 7720 7724 7725 7725 7728 7724 7729
#> [37] 7730 7729 7728 7727 7731 7729 7732 7730 7728
#> [46] 7728 7728 7728 7727 7731 7731 7733 7734 7736
#> [55] 7735 7722 7733 7740 7735 7739 7741 7744 7745
#> [64] 7745 7745 7747 7746 7746 7750 7748
#>
#> $Line_24
#> [1] 4050263 7750 7751 7751 7750 7752 7753 7754 7756
#> [10] 7756 7757 7749 7749 7754 7756 7757 7754 7756
#> [19] 7753 7755 7757 7750 7755 7759 7756 7758 7758
#> [28] 7760 7757 7758 7758 7758 7758 7757 7757 7757
#> [37] 7763 7744 7744 7762 7760 7760 7759 7761 7759
#> [46] 7756 7759 7759 7756 7758 7761 7757 7761 7760
#> [55] 7760 7761 7766 7755 7743 7763 7760 7768
#>
#> $Line_25
#> [1] 3929802 7753 7724 7758 7766 7762 7768 7766 7770
#> [10] 7770 7765 7766 7770 7768 7773 7774 7774 7774
#> [19] 7772 7773 7775 7776 7773 7775 7777 7773 7769
#> [28] 7777 7775 7775 7779 7755 7758 7781 7779 7780
#> [37] 7777 7778 7783 7783 7786 7784 7787 7788 7791
#> [46] 7791 7795 7790 7791 7793 7792 7795 7757 7758
#> [55] 7785 7782 7792 7796 7795 7798 7795 7794
#>
#> $Line_26
#> [1] 3811316 7795 7793 7793 7797 7795 7795 7799 7792
#> [10] 7794 7792 7796 7792 7788 7783 7790 7805 7714
#> [19] 7726 7806 7784 7801 7799 7797 7796 7788 7804
#> [28] 7795 7802 7794 7800 7796 7743 7774 7797 7800
#> [37] 7800 7752 7785 7805 7791 7804 7797 7803 7802
#> [46] 7793 7797 7801 7799 7800 7797 7797
#>
#>
#> Done processing /home/runner/work/_temp/Library/readJDX/extdata/MiniDIFDUP.JDX
sinkall() # close the file connection
file.show(tf)
# 2D HETCORR spectrum
if (FALSE) {
nmr2d <- system.file("extdata", "isasspc1.dx", package = "readJDX")
chk <- readJDX(nmr2d)
contour(chk$Matrix, drawlabels = FALSE) # default contours not optimal
}
if (FALSE) {
# Line 265 has an N -> G error. Try with various levels of debug.
# Even with debug = 0 you get useful diagnostic info.
problem <- system.file("extdata", "PCRF_line265.jdx", package = "readJDX")
chk <- readJDX(problem)
}