diff --git a/RBBGCMuso/R/calibMuso.R b/RBBGCMuso/R/calibMuso.R index aa086dd..f0826f7 100644 --- a/RBBGCMuso/R/calibMuso.R +++ b/RBBGCMuso/R/calibMuso.R @@ -113,10 +113,14 @@ calibMuso <- function(settings=setupMuso(), calibrationPar=NULL, ##change the epc file if and only if there are given parameters if(!is.null(parameters)){ - changemulline(filePaths = epcInput, + changemulline(filePaths = epc[2], calibrationPar = calibrationPar, contents = parameters, - fileOut = toModif, + src = if(file.exists(bck)){ + bck + } else { + NULL + }) # fileToChange = fileToChange,) } diff --git a/RBBGCMuso/R/changeMuso.R b/RBBGCMuso/R/changeMuso.R index d772223..97b70e7 100644 --- a/RBBGCMuso/R/changeMuso.R +++ b/RBBGCMuso/R/changeMuso.R @@ -7,45 +7,30 @@ #' @keywords internal #' -changemulline <- function(filePaths, calibrationPar, contents, fileOut, fileToChange, modifyOriginal=FALSE){ - selectFileToWrite <- function(filePaths, fileTochange){ - if(fileToChange == "epc"){ - return(1) - } else{ - return(2) - } +changemulline <- function(filePaths, calibrationPar, contents, src){ + # browser() + if(is.null(src)){ + src <- filePaths } - if(xor(is.list(calibrationPar), is.list(contents)) ){ - stop("If you change epc and ini files also, you have to use list for calibrationPar, and paramateters.") - } - - if(!is.element(fileToChange,c("ini","epc","both"))){ - stop("RBBGCMuso can only change ini or epc file, so fileToChange can be 'epc/ini/both'") - } + fileStringVector <- readLines(src) + Map(function(index, content){ + fileStringVector <<- changeByIndex(index, content, fileStringVector) - if(fileToChange == "epc" | fileToChange == "ini"){ - parMat<-matrix(c(calibrationPar, contents),nrow=length(calibrationPar)) - if(nrow(parMat)!=1){ - parMat <- parMat[order(parMat[,1]),] - } - changeMusoC(inFile = filePaths[selectFileToWrite(filePaths, fileToChange)], - outFile = fileOut[selectFileToWrite(filePaths, fileToChange)], - parMat) - } + }, calibrationPar, contents) + writeLines(fileStringVector, filePaths) - if(fileToChange == "both"){ - parMat[[1]]<-cbind(calibrationPar[[1]], contents[[1]]) - parMat[[1]]<- parMat[[1]][order(parMat[[1]][,1]),] - parMat[[2]]<-cbind(calibrationPar[[2]], contents[[2]]) - parmat[[2]]<- parMat[[2]][order(parMat[[2]][,1]),] - - browser() - changeMusoC(filePaths[1],fileOut[1],parMat[[1]] ) - changeMusoC(filePaths[2],fileOut[2],parMat[[2]] ) - } - } +changeNth <- function (string,place,replacement) { + trimws(gsub(sprintf("^((.*?\\s+){%s})(.*?\\s+)", place), sprintf("\\1%s ", replacement), paste0(string," "), perl=TRUE), + which="right") +} +changeByIndex <- function (rowIndex, parameter, fileStringVector){ + h <- round((rowIndex*100) %% 10) + i <- as.integer(rowIndex) + fileStringVector[i] <- changeNth(fileStringVector[i], h, parameter) + fileStringVector +}