You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
6.1 KiB
R

##################################################
################ tifftags2df #####################
##################################################
tifftags2df <- function(tiffimage) {
## Description:
## Extracts all tags from a TIFF image file
## using the tiffinfo tool and stores
## a selection of the tags in a dataframe.
## Usage:
## tifftags2df(fulltiffpath)
## Arguments:
## tiffimage: character string, the full filename
## (with path) to one TIFF file.
## Value:
## A dataframe with three columns:
## sampleid, parameter, value.
#
substrate.id <- strsplit(basename(tiffimage), "\\.")[[1]][1]
tifftags <- system(paste("tiffinfo", tiffimage, sep = " "),
intern = TRUE, ignore.stderr = TRUE)
# Clean certain special characters from the tiff tags strings
# If these strings are left untreated, they cause all sorts of weird errors later
tifftags.clean <-
sub("[ ]+$", "", #trim trailing spaces, if any
sub("\\r$", "", #remove trailing \r
gsub("\\xb9", "", #remove special character
gsub("\\xb8", "", #remove special character
gsub("\\xb7", "", #remove special character
gsub("\\xb6", "", #remove special character
gsub("\\xb5", "", #remove special character
gsub("\\xb4", "", #remove special character
gsub("\\xb3", "", #remove special character
gsub("\\xb2", "", #remove special character
gsub("\\xb1", "", #remove special character
gsub("\\xb0", "", tifftags,
useBytes=T),
useBytes=T),
useBytes=T),
useBytes=T),
useBytes=T),
useBytes=T),
useBytes=T),
useBytes=T),
useBytes=T),
useBytes=T)))
# These are the tags we are looking for
tags.df <- data.frame(stringsAsFactors = FALSE, substrate.id, matrix(#
# Name # REGEXP # splitchar # unit
c("EHT", "AP\\_ACTUALKV", " = ", "\\kilo\\volt",
"High current", "DP\\_HIGH\\_CURRENT", " = ", "",
"WD", "AP\\_WD", " = ", "\\milli\\metre",
"Magnification", "AP\\_MAG", " = ", "", # could warrant special treatment
"Brightness", "AP\\_BRIGHTNESS", " = ", "\\percent",
"Contrast", "AP\\_CONTRAST", " = ", "\\percent",
"Signal A", "DP\\_DETECTOR\\_CHANNEL", " = ", "",
"SCM status", "DP\\_SCM\\_STATUS", " = ", "",
"Specimen current", "AP\\_SCM", " = ", "\\femto\\ampere",
# Beam
#"Filament curent", "AP\\_ACTUALCURRENT", " = ", "\\ampere",
"Stigmation Y", "AP\\_STIG\\_Y", " = ", "\\percent",
"Stigmation X", "AP\\_STIG\\_X", " = ", "\\percent",
"Aperture align Y", "AP\\_APERTURE\\_ALIGN\\_Y", " = ", "\\percent",
"Aperture align X", "AP\\_APERTURE\\_ALIGN\\_X", " = ", "\\percent",
"Aperture size", "AP\\_APERTURESIZE", " = ", "\\micro\\metre",
"Beam shift Y", "AP\\_BEAMSHIFT\\_Y", " = ", "\\percent",
"Beam shift X", "AP\\_BEAMSHIFT\\_X", " = ", "\\percent",
#"Beam offset Y", "AP\\_BEAM\\_OFFSET\\_Y", " = ", "\\nano\\metre",
#"Beam offset X", "AP\\_BEAM\\_OFFSET\\_X", " = ", "\\nano\\metre",
# Stage
"Track Z", "DP\\_TRACK\\_Z", " = ", "",
"Stage at Z", "AP\\_STAGE\\_AT\\_Z", " = ", "\\milli\\metre",
"Stage at Y", "AP\\_STAGE\\_AT\\_Y", " = ", "\\milli\\metre",
"Stage at X", "AP\\_STAGE\\_AT\\_X", " = ", "\\milli\\metre",
# Tilt
"Stage tilted?", "DP\\_STAGE\\_TILTED", " = ", "",
"Tilt angle", "AP\\_TILT\\_ANGLE", " = ", "",
"Tilt axis", "AP\\_TILT\\_AXIS", " = ", "",
# Image
"Scan speed", "DP\\_SCANRATE", " = ", "",
"Cycle time", "AP\\_FRAME\\_TIME", " = ", "\\second",
"Freeze on", "DP\\_FREEZE\\_ON", " = ", "",
"Dwell time", "DP\\_DWELL\\_TIME", " = ", "\\nano\\second",
"Noise reduction", "DP\\_NOISE\\_REDUCTION", " = ", "",
"Frames to integrate", "AP\\_FRAME\\_INT\\_COUNT", " = ", "",
"Frames to average", "AP\\_FRAME\\_AVERAGE\\_COUNT", " = ", "",
#"Profile width", "AP\\_PROFILE\\_W", " = ", "\\micro\\metre",
"Pixel size", "AP\\_PIXEL\\_SIZE", " = ", "\\nano\\metre",
# System
"Gun vacuum", "AP\\_COLUMN\\_VAC", " = ", "\\milli\\bar",
"System vacuum", "AP\\_SYSTEM\\_VAC", " = ", "\\milli\\bar",
"Filament age", "AP\\_FILAMENT\\_AGE", " = ", "\\hour",
# Misc
"Photo no.", "AP\\_PHOTO\\_NUMBER", " = ", "",
"Date", "AP\\_DATE", " :", "",
"Time", "AP\\_TIME", " :", ""),
ncol = 4, byrow = T))
names(tags.df) <- c("sampleid", "name", "regexp", "splitchar", "unit")
for (i in 1:dim(tags.df)[1]) {
current.tag <- which(regexpr(tags.df$regexp[i], tifftags.clean) == 1) + 1
value.tmp <- strsplit(tifftags.clean[current.tag], split = tags.df$splitchar[i])[[1]][2]
# Remove leading spaces from tags.df$value
tags.df$value[i] <- sub("^\\s+", "", value.tmp, useBytes = T)
if (tags.df$unit[i] != "") {
tags.df$value[i] <- paste("\\SI{", strsplit(tags.df$value[i], split = " ")[[1]][1], "}{", tags.df$unit[i], "}", sep = "")
}
}
tags <- data.frame(stringsAsFactors = FALSE,
sampleid = tags.df$sampleid,
parameter = tags.df$name,
value = tags.df$value)
return(tags)
}