From 4fff82be0c96a2bb6c6904f029828fcddbeb9ac7 Mon Sep 17 00:00:00 2001 From: Taha Ahmed Date: Sat, 6 Aug 2011 03:18:46 +0200 Subject: [PATCH] Complete re-write of tifftags2df (only internal changes). No changes in input or output of this function, only of the internal mechanism with which tags are chosen and formatted for output. init.R contains the sourceDir() function which is necessary for sourcing all .R files in a directory. --- LEO1550/tifftags2df.R | 165 ++++++++++++++++++++---------------------- init.R | 13 ++++ 2 files changed, 91 insertions(+), 87 deletions(-) create mode 100644 init.R diff --git a/LEO1550/tifftags2df.R b/LEO1550/tifftags2df.R index 38a8131..97b8fa7 100644 --- a/LEO1550/tifftags2df.R +++ b/LEO1550/tifftags2df.R @@ -1,5 +1,3 @@ -source("/home/taha/chepec/chetex/common/R/common.R") - ################################################## ################ tifftags2df ##################### ################################################## @@ -20,10 +18,10 @@ tifftags2df <- function(tiffimage) { substrate.id <- strsplit(basename(tiffimage), "\\.")[[1]][1] tifftags <- system(paste("tiffinfo", tiffimage, sep = " "), intern = TRUE, ignore.stderr = TRUE) - # The first 47 rows of tifftags contains info about - # the image itself, and is not interesting - # The last row of tifftags is the empty string - trimtags <- + + # 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 @@ -35,7 +33,7 @@ tifftags2df <- function(tiffimage) { gsub("\\xb3", "", #remove special character gsub("\\xb2", "", #remove special character gsub("\\xb1", "", #remove special character - gsub("\\xb0", "", tifftags[48:length(tifftags) - 1], + gsub("\\xb0", "", tifftags, useBytes=T), useBytes=T), useBytes=T), @@ -46,85 +44,78 @@ tifftags2df <- function(tiffimage) { useBytes=T), useBytes=T), useBytes=T))) - oddtags <- trimtags[seq(1, length(trimtags), by = 2)] - eventags <- trimtags[seq(2, length(trimtags), by = 2)] - tmp.tagsdf <- - data.frame(stringsAsFactors = FALSE, - sampleid = substrate.id, - tag = oddtags, - value = eventags) - # A vector of displayed tags - displaytags <- - c("AP_ACTUALKV", # EHT = 5.00 kV - "DP_HIGH_CURRENT", # High Current = Off # commonly used for EDS analysis - "AP_WD", # WD = 4.1 mm - "AP_MAG", # Mag = 15.00 K X - "AP_BRIGHTNESS", # Brightness = 49.0 % - "AP_CONTRAST", # Contrast = 32.4 % - "DP_DETECTOR_CHANNEL", # InLens - "DP_SCM_STATUS", # SCM Status = Off - "AP_SCM", # Specimen I = 0 fA # zero if SCM Status = Off - # Beam - #notrelevant#"AP_ACTUALCURRENT", # Fil I = 2.370 A - "AP_STIG_Y", # Stigmation Y = -0.2 % - "AP_STIG_X", # Stigmation X = 1.9 % - "AP_APERTURE_ALIGN_Y", # Aperture Align Y = -1.5 % - "AP_APERTURE_ALIGN_X", # Aperture Align X = -2.4 % - "AP_APERTURESIZE", # Aperture Size = 30.00 m - "AP_BEAMSHIFT_Y", # Beam Shift Y = 0.1% - "AP_BEAMSHIFT_X", # Beam Shift X = 0.1% - #notrelevant#"AP_BEAM_OFFSET_Y", # Beam Offset Y = 13.89 nm - #notrelevant#"AP_BEAM_OFFSET_X", # Beam Offset X = 9.13 nm - # Stage - "DP_TRACK_Z", # Track Z = On - "AP_STAGE_AT_Z", # Stage at Z = 25.857 mm - "AP_STAGE_AT_Y", # Stage at Y = 49.0708 mm - "AP_STAGE_AT_X", # Stage at X = 50.0753 mm - # Tilt - "DP_STAGE_TILTED", # Stage Tilt = In Y - "AP_TILT_ANGLE", # Tilt Angle = 0.0 - "AP_TILT_AXIS", # Tilt Axis = 0.0 - # Image - "DP_SCANRATE", # Scan Speed = 10 - "AP_FRAME_TIME", # Cycle Time = 48.7 Secs - "DP_FREEZE_ON", # Freeze on = End Frame - "DP_DWELL_TIME", # Dwell time = 100 ns - "DP_NOISE_REDUCTION", # Noise Reduction = Pixel Avg. - "AP_FRAME_INT_COUNT", # Frames to integrate = 0 - "AP_FRAME_AVERAGE_COUNT", # Frames to average = 1 - #notrelevant#"AP_PROFILE_W", # Profile Width = 71.79 m - "AP_PIXEL_SIZE", # Pixel Size = 23.96 nm - # System - "AP_COLUMN_VAC", # Gun Vacuum = 1.74e-009 mbar - "AP_SYSTEM_VAC", # System Vacuum = 2.32e-006 mbar - "AP_FILAMENT_AGE", # Filament Age = 1378.35 Hours - # Misc - "AP_PHOTO_NUMBER", # Photo No. = 9069 - "AP_DATE", # Date :23 Mar 2011 - "AP_TIME") # Time :19:10:46 - # - extracted.tagsdf <- data.frame() - for (i in 1:length(displaytags)) { - rows.extract <- which(displaytags[i] == tmp.tagsdf$tag) - extracted.tagsdf <- rbind(extracted.tagsdf, - data.frame(stringsAsFactors = FALSE, - tmp.tagsdf[rows.extract, ])) - } - # Fix split of time and date fields - splittags <- strsplit(extracted.tagsdf$value, " = ") - for (i in 1:length(splittags)) { - if (length(splittags[[i]]) == 1) { - splittags[[i]] <- strsplit(splittags[[i]], " :")[[1]] - } + + + + # 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 = "") } - tagsdf <- data.frame() - for (i in 1:length(splittags)) { - tagsdf <- rbind(tagsdf, - data.frame(stringsAsFactors = FALSE, - sampleid = extracted.tagsdf$sampleid[i], - parameter = splittags[[i]][1], - value = splittags[[i]][2])) - } - # - return(tagsdf) + } + + + tags <- data.frame(stringsAsFactors = FALSE, + sampleid = tags.df$sampleid, + parameter = tags.df$name, + value = tags.df$value) + + return(tags) } \ No newline at end of file diff --git a/init.R b/init.R new file mode 100644 index 0000000..1024552 --- /dev/null +++ b/init.R @@ -0,0 +1,13 @@ +# To source a bunch of files in the same directory + +sourceDir <- function(path, trace = TRUE) { + for (nm in list.files(path, pattern = "\\.[Rr]$")) { + if(trace) { + cat(nm,":") + } + source(file.path(path, nm)) + if(trace) { + cat("\n") + } + } +} \ No newline at end of file