################### Usage ################## # this file is a set of staging functions for the NORM website to communicate # with the vowels.R package. # this should be executed from the command line, like so: # > R --vanilla --slave --args [16 arguments, see below] < norm11_stage.R ################### Set up R session ################## # clear memory rm(list=ls(all=TRUE)) # source the vowels.R library package source(paste(getwd(),"/","vowels.R", sep="")) #################### Set up parameters ################### cmd.args <- commandArgs(trailingOnly = TRUE) method.list <- cmd.args[1] value.type <- cmd.args[2] using.f3 <- cmd.args[3] scale.vals <- cmd.args[4] plot.type <- cmd.args[5] labels <- cmd.args[6] legend <- cmd.args[7] shape.vowels<- cmd.args[8] size.vowels <- cmd.args[9] sd.type <- cmd.args[10] sd.bars <- cmd.args[11] plot.title <- cmd.args[12] color.vowels<- cmd.args[13] color.choice<- cmd.args[14] out.prefix <- cmd.args[15] input.file <- cmd.args[16] if (is.na(method.list)) { method.list <- "bark" value.type <- "group_means" using.f3 <- 0 scale.vals <- 0 plot.type <- "indiv_speakers" labels <- "vowels" legend <- "normal" shape.vowels <- "shape_vowels" plot.title <- "Testing" color.vowels <- "color_vowels" color.choice <- "#ff0000-#0000ff-#00ff00-#ff9900-#cd00cd-#00cdcd-#cdcd00-#800000-#008000-#333399-#ffff00-#808080-#cc99ff" out.prefix <- "norm-temp/out-" input.file <- "norm-temp/CentralOhioNORM.txt" } methods <- strsplit(method.list, split='-', fixed=TRUE)[[1]] using.f3 <- (using.f3=="yes") scale.vals <- (scale.vals=="yes") ellip <- (sd.type=="ellip") color.list <- strsplit(color.choice, split='-', fixed=TRUE)[[1]] colors.for <- NA if (color.vowels == "color_vowels") { colors.for <- "vowels" } else if (color.vowels == "color_speakers") { colors.for <- "speakers" } shapes.for <- "speakers" if (shape.vowels == "shape_vowels") { shapes.for <- "vowels" } if (size.vowels != "default") { size.vowels <- as.numeric(size.vowels) } else { size.vowels <- NA } if (plot.title == "[ Default ]") plot.title <- "" ######### counter <- 0 out.method<-vector() out.names<-vector() out.files<-vector() out.plots<-vector() # jpg.plots<-vector() for (method in methods) { vowels <- load.vowels(input.file) # Remove any blank lines, determined by blank speaker and vowel fields # These should only be in the user's file by accident, e.g., maybe hidden # at the end of the file. vowels <- vowels[vowels[,1]!="" & vowels[,2]!="",] if (method == "bark") { vowels<-norm.bark(vowels) } else if (method %in% c("labov", "labov_g", "labov_n09")){ g.val<-NA geom<-TRUE if (method=="labov") { if (using.f3) { f1.gls<-vowels[,7] f1.gls[is.na(f1.gls)]<-vowels[,4] f2.gls<-vowels[,8] f2.gls[is.na(f2.gls)]<-vowels[,5] f3.gls<-vowels[,9] f3.gls[is.na(f3.gls)]<-vowels[,6] g.val<-log(exp(mean(log(c(vowels[,4], vowels[,5], vowels[,6], f1.gls, f2.gls, f3.gls))))) } else { f1.gls<-vowels[,7] f1.gls[is.na(f1.gls)]<-vowels[,4] f2.gls<-vowels[,8] f2.gls[is.na(f2.gls)]<-vowels[,5] g.val<-log(exp(mean(log(c(vowels[,4], vowels[,5], f1.gls, f2.gls))))) } } if (method == "labov_n09") geom<-FALSE vowels<-norm.labov(vowels, G.value=g.val, use.f3=using.f3, geomean=geom) } else if (method == "lobanov") { vowels<-norm.lobanov(vowels) if (scale.vals) { vowels <- scalevowels(vowels) } } else if (method == "nearey1" | method == "nearey2") { formant.int <- FALSE if (method == "nearey1") formant.int<-TRUE vowels<-norm.nearey(vowels, formant.int=formant.int, use.f3=using.f3) if (scale.vals) { vowels <- scalevowels(vowels) } } else if (method == "wattfabricius" | method == "wattfabricius_mod") { use.mod <- FALSE if (method == "wattfabricius_mod") use.mod <- TRUE vowels<-norm.wattfabricius(vowels, norm.means=(value.type=="means" & !(sd.bars > 0)), mod.WF=use.mod) if (scale.vals) { vowels <- scalevowels(vowels) } } # if the values should be converted to means and they aren't # already, convert to means. ovowels<-vowels if (value.type=="means" & is.null(attributes(vowels)$mean.values)) { vowels <- compute.means(vowels, separate=TRUE) } else if (value.type=="group_means") { ovowels[,1]<-rep("AllSpkrs", times=length(ovowels[,1])) vowels <- compute.means(vowels) } out.file.name <- paste(out.prefix, "vowel-data-",counter,".txt",sep="") write.table(vowels, out.file.name, sep="\t", col.names=TRUE, row.names=FALSE, quote=FALSE) leg <- "speakers" l.size <- NA if (legend=="none") { leg <- NA } else if (legend=="small") { l.size <- 0.6 } else if (legend=="large") { l.size <- 1.0 } # if user is adding standard dev bars or ellipses for means # modify the axes to fit the bars xrange <- NA yrange <- NA if ((value.type == "means" | value.type == "group_means") & (sd.bars > 0)) { sdmult <- as.numeric(sd.bars) ymax <-max(compute.means(ovowels)[,4]+(sdmult*compute.sds(ovowels)[,4])) ymin <-min(compute.means(ovowels)[,4]-(sdmult*compute.sds(ovowels)[,4])) xmax <-max(compute.means(ovowels)[,5]+(sdmult*compute.sds(ovowels)[,5])) xmin <-min(compute.means(ovowels)[,5]-(sdmult*compute.sds(ovowels)[,5])) # reverse the axes if using the Bark Difference method if (method == "bark") { xrange = c(xmin, xmax) yrange = c(ymin, ymax) } else { xrange = c(xmax, xmin) yrange = c(ymax, ymin) } } if (plot.type == "all_speakers" | value.type == "group_means") { out.plots[length(out.plots)+1] <- paste(out.prefix, "vowel-plot-",counter,".eps",sep="") out.files[length(out.files)+1] <- out.file.name out.names[length(out.names)+1]<-"All Speakers" out.method[length(out.method)+1]<-method postscript(file=out.plots[length(out.plots)], family="sans", paper="special", width=8, height=8, horizontal=FALSE) vowelplot(vowels, shape=shapes.for, size=size.vowels, color=colors.for, color.choice=color.list, title=plot.title, labels=labels, leg=leg, l.size=l.size, xlim=xrange, ylim=yrange) if (sd.bars > 0) { add.spread.vowelplot(ovowels, sd.mult=sd.bars, ellipsis=ellip, shape=shapes.for, color=colors.for, color.choice=color.list) } dev.off() # also create jpeg version # jpg.plots[length(jpg.plots)+1] <- paste(out.prefix, "vowel-plot-",counter,".jpg",sep="") # jpeg(filename = jpg.plots[length(jpg.plots)], width = 400, height = 400, units = "px", pointsize = 10, quality = 100, bg = "white", type = "cairo") # vowelplot(vowels, shape=shapes.for, size=size.vowels, color=colors.for, color.choice=color.list, title=plot.title, labels=labels, leg=leg, l.size=l.size, xlim=xrange, ylim=yrange) # if (sd.bars > 0) { # add.spread.vowelplot(ovowels, sd.mult=sd.bars, ellipsis=ellip, shape=shapes.for, color=colors.for, color.choice=color.list) # } # dev.off() counter <- counter + 1 } else if (plot.type == "indiv_speakers") { indivs <- as.character(unique(vowels[,1])) color.opts <- color.list for (k in (counter+1):(counter+length(indivs))) { out.plots[length(out.plots)+1] <- paste(out.prefix, "vowel-plot-",k,".eps",sep="") out.files[length(out.files)+1]<-out.file.name out.names[length(out.names)+1]<-indivs[k-counter] out.method[length(out.method)+1]<-method postscript(file=out.plots[length(out.plots)], family="sans", paper="special", width=8, height=8, horizontal=FALSE) vowelplot(vowels, speaker=indivs[k-counter], shape=shapes.for, size=size.vowels, color=colors.for, color.choice=color.opts, title=plot.title, labels=labels, leg=leg, l.size=l.size, xlim=xrange, ylim=yrange) if (sd.bars > 0) { add.spread.vowelplot(ovowels, sd.mult=sd.bars, ellipsis=ellip, speaker=indivs[k-counter], shape=shapes.for, color=colors.for, color.choice=color.opts) } dev.off() # also create jpeg version # jpg.plots[length(jpg.plots)+1] <- paste(out.prefix, "vowel-plot-",counter,".jpg",sep="") # jpeg(filename = jpg.plots[length(jpg.plots)], width = 400, height = 400, units = "px", pointsize = 10, quality = 100, bg = "white", type = "cairo") # vowelplot(vowels, speaker=indivs[k-counter], shape=shapes.for, size=size.vowels, color=colors.for, color.choice=color.opts, title=plot.title, labels=labels, leg=leg, l.size=l.size, xlim=c(xmax, xmin), ylim=c(ymax, ymin)) # if (sd.bars > 0) { # add.spread.vowelplot(ovowels, sd.mult=sd.bars, ellipsis=ellip, speaker=indivs[k-counter], shape=shapes.for, color=colors.for, color.choice=color.opts) # } # dev.off() if (is.na(colors.for)) { } else if ((colors.for == "vowels") | (length(color.opts) < 2)){ color.opts <- color.list } else { color.opts <- color.opts[2:length(color.opts)] } } counter <- counter + k } else { out.files[length(out.files)+1] <- out.file.name out.names[length(out.names)+1]<-"All Speakers" out.method[length(out.method)+1]<-method out.plots[length(out.plots)+1]<-"" # jpg.plots[length(jpg.plots)+1]<-"" counter <- counter + 1 } } # make a txt file describing the results of this script, this # makes it easier for php to know the outcome of this script outs<-data.frame(out.method, out.names, out.files, out.plots) # outs<-data.frame(out.method, out.names, out.files, out.plots, jpg.plots) write.table(outs, paste(out.prefix,"summary.txt",sep=""), sep="\t", col.names=FALSE, row.names=FALSE, quote=FALSE)