22# '
33# ' Parser for reading 'Waters MassLynx (.raw) files into R.
44# '
5+ # ' @importFrom stats setNames
56# ' @param path Path to \code{.raw} file.
67# ' @param format_out Class of output. Either \code{matrix}, \code{data.frame},
78# ' or \code{data.table}.
@@ -23,23 +24,49 @@ read_waters_raw <- function(path, format_out = c("matrix", "data.frame", "data.t
2324
2425 format_out <- check_format_out(format_out )
2526 data_format <- match.arg(data_format , c(" wide" , " long" ))
26- metadata_format <- match.arg(metadata_format , c(" chromconverter" , " raw" ))
27+ metadata_format <- match.arg(tolower(metadata_format ),
28+ c(" chromconverter" , " raw" ))
29+ metadata_format <- switch (metadata_format ,
30+ chromconverter = " waters_raw" , raw = " raw" )
31+ uv_paths <- list.files(path , pattern = " _CHRO" , full.names = TRUE , ignore.case = TRUE )
32+ meta_path <- grep(" \\ .INF$" , uv_paths , value = TRUE , ignore.case = TRUE )
33+ uv_paths <- grep(" \\ .INF$" , uv_paths , invert = TRUE , value = TRUE , ignore.case = TRUE )
2734
28- uv_paths <- list.files(path , pattern = " _CHRO" , full.names = TRUE )
29- meta_path <- grep(" \\ .INF" , uv_paths , value = TRUE )
30- uv_paths <- grep(" \\ .INF" , uv_paths , invert = TRUE , value = TRUE )
35+ if (read_metadata ){
36+ hdr_path <- list.files(path , pattern = " _HEADER.TXT" ,
37+ full.names = TRUE , ignore.case = TRUE )
38+ hdr <- readLines(hdr_path )
39+ hdr <- gsub(" \\ $\\ $ " , " " , hdr )
40+ hdr <- stringr :: str_split_fixed(hdr , " :" , n = 2 )
41+ hdr [,2 ] <- gsub(" ^ " , " " , hdr [,2 ])
42+ hdr [hdr [,2 ] == " " , 2 ] <- NA
43+ hdr [,1 ] <- gsub(" " , " _" , hdr [,1 ])
44+ hdr <- as.list(setNames(hdr [,2 ], hdr [,1 ]))
45+ }
3146
3247 dat <- lapply(uv_paths , read_waters_chro , format_out = format_out ,
33- data_format = data_format , read_metadata = read_metadata ,
34- metadata_format = metadata_format )
48+ data_format = data_format )
3549
3650 meta <- readLines(meta_path , skipNul = TRUE , warn = FALSE ,
3751 encoding = " Latin-1" )
3852 meta <- iconv(meta , sub = " " )
39- meta <- strsplit(meta ," \\ ([0-9] \\ ) " )[[1 ]][- 1 ]
40- meta <- gsub(" ^ |\\ $CC\\ $" , " " , sapply(strsplit(meta , " ," ), function ( x ) x [ 1 ] ))
53+ meta <- strsplit(meta , " \0 01 " )[[1 ]][- c( 1 : 3 ) ]
54+ nms <- gsub(" ^ |\\ $CC\\ $" , " " , sapply(strsplit(meta , " ," ), `[` , 1 ))
4155
42- names(dat ) <- meta
56+ if (read_metadata ){
57+ detector_unit <- sapply(strsplit(meta , " ," ), `[` , 6 )
58+ dat <- lapply(seq_along(dat ), function (i ){
59+ attach_metadata(x = dat [[i ]], meta = c(hdr , Detector_Unit = detector_unit [i ]),
60+ format_in = metadata_format ,
61+ format_out = format_out ,
62+ data_format = data_format ,
63+ parser = " chromconverter" ,
64+ source_file = path ,
65+ source_file_format = " waters_raw" ,
66+ scale = FALSE )
67+ })
68+ }
69+ names(dat ) <- gsub(" ^\\ ([0-9]+\\ )\\ s*" , " " , nms )
4370 dat
4471}
4572
@@ -51,9 +78,6 @@ read_waters_raw <- function(path, format_out = c("matrix", "data.frame", "data.t
5178# ' @param path Path to \code{.dat} file.
5279# ' @param format_out Matrix or data.frame.
5380# ' @param data_format Either \code{wide} (default) or \code{long}.
54- # ' @param read_metadata Logical. Whether to attach metadata.
55- # ' @param metadata_format Format to output metadata. Either \code{chromconverter}
56- # ' or \code{raw}.
5781# ' @return A chromatogram in the format specified by \code{format_out}
5882# ' (retention time x wavelength).
5983# ' @author Ethan Bass
@@ -62,14 +86,9 @@ read_waters_raw <- function(path, format_out = c("matrix", "data.frame", "data.t
6286# magic 80000100 08000200
6387
6488read_waters_chro <- function (path , format_out = " data.frame" ,
65- data_format = c(" wide" , " long" ),
66- read_metadata = TRUE ,
67- metadata_format = c(" chromconverter" , " raw" )){
89+ data_format = c(" wide" , " long" )){
6890
6991 data_format <- match.arg(data_format , c(" wide" , " long" ))
70- metadata_format <- match.arg(metadata_format , c(" chromconverter" , " raw" ))
71- # metadata_format <- switch(metadata_format,
72- # chromconverter = "waters_uv", raw = "raw")
7392
7493 f <- file(path , " rb" )
7594 on.exit(close(f ))
0 commit comments