Skip to content
Snippets Groups Projects
Select Git revision
  • 01a69b118b72ec9f205dcab70b8b8fc481a881e3
  • develop default protected
  • master protected
  • kristin_optim_test
  • 3.9.0
  • 3.8.0
  • 3.7.0
  • 3.6.0
  • 3.5.0
  • 3.4.1
  • 3.4.0
  • 3.3.3
  • 3.3.2
  • 3.3.0
  • 3.2.14
  • 3.2.13
  • 3.2.12
17 results

pubring.gpg.enc

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    analyseUniversalModel.R 8.71 KiB
    #!/usr/bin/Rscript
    library(methods)
    library(sybil)
    
    print(load("../models/universalBiGG.ver1.Rdata"))
    
    #source("../helperScripts/parallelBlockedReact.R")
    source("../helper/fastBlockedReact.R")
    
    SYBIL_SETTINGS("SOLVER", "cplexAPI")
    sp <- list(	CPX_PARAM_EPINT=1e-10, 		# tolerance to integer values
    			CPX_PARAM_EPRHS=1e-9, 		# tolerance to bounds
    			CPX_PARAM_TILIM=60*10, 		# timelimit in seconds
    			CPX_PARAM_WORKMEM=1024*5, 	# workspace memory limit
    			CPX_PARAM_TRELIM=1024*5, 	# tree memory limit
    			CPX_PARAM_THREADS=7L, 		# only use 1 thread
    			CPX_PARAM_PARALLELMODE=CPX_PARALLEL_OPPORTUNISTIC # no deterministic search
    )
    
    
    cat(">>> resetting directions exchanges, demand reactions, sinks (EX, DM, SK)\n")
    ex <- findExchReact(uni)
    stopifnot(all(grepl("^DM|^SK|^EX", react_id(ex))))
    
    lowbnd(uni)[react_pos(ex)[grep("^DM", react_id(ex))]] <- 0
    uppbnd(uni)[react_pos(ex)[grep("^DM", react_id(ex))]] <- 1000
    
    lowbnd(uni)[react_pos(ex)[grep("^SK", react_id(ex))]] <- 0
    uppbnd(uni)[react_pos(ex)[grep("^SK", react_id(ex))]] <- 1000
    
    lowbnd(uni)[react_pos(ex)[grep("^EX", react_id(ex))]] <- -1000
    uppbnd(uni)[react_pos(ex)[grep("^EX", react_id(ex))]] <- 1000
    
    cat(">>> updating reaction reversibility slot\n")
    
    react_rev(uni) <- sapply(1:react_num(uni), function(i){
    	if(lowbnd(uni)[i] == -1000 && uppbnd(uni)[i] == 1000 ){
    		return(T)
    	}
    	if(lowbnd(uni)[i] == 0 && uppbnd(uni)[i] == 1000 ){
    		return(F)
    	}
    	if(lowbnd(uni)[i] == -1000 && uppbnd(uni)[i] == 0 ){
    		return(F)
    	}
    	print(i)
    	print(c(lowbnd(uni)[i], uppbnd(uni)[i]))
    	stop("unknown direction")
    })
    
    
    
    ex <- findExchReact(uni)
    lowbnd(uni)[react_pos(ex)] <- -1000
    uppbnd(uni)[react_pos(ex)] <- 1000
    
    if(!exists("bl")){
    	cat(">>> calculating blocked reactions\n")
    	bl <- fastBlockedReact(uni)
    	save(bl, file="blockedReact.Rdata")
    	cat(">>> blocked reactions calculated.\n")
    }
    
    rmReactId <- react_id(uni)[bl]
    
    
    lowbnd(uni)[react_pos(ex)] <- lowbnd(ex)
    uppbnd(uni)[react_pos(ex)] <- uppbnd(ex)
    uniBlkRm <- rmReact(uni, which(bl))
    ex <- findExchReact(uniBlkRm)
    obj_coef(uniBlkRm) <- rep(0, react_num(uniBlkRm))
    
    modelBiomassMap <- lapply(modelBiomassMap, function(x){
    	x[x %in% react_id(uniBlkRm)]
    })
    modelReactMap <- lapply(modelReactMap, function(x){
    	x[x %in% react_id(uniBlkRm)]
    })
    
    uni1.1 <- uniBlkRm
    cat(">>> removing duplicated reactions\n")
    
    if(!exists("dr")){
    	dr <- doubleReact(uni1.1, checkRev=T, linInd=T)
    }
    skipped <- list()
    toRemove <- integer(0)
    for(p in dr){
    	if(length(unique(lowbnd(uni1.1)[p]))>1){
    		print(p)
    		skipped <- append(skipped, list(p))
    		next
    	}
    	if(length(unique(uppbnd(uni1.1)[p]))>1){
    		print(p)
    		skipped <- append(skipped, list(p))
    		next
    	}
    	
    	p <- react_id(uni1.1)[p]
    	
    	toRemove <- append(toRemove, p[-1])
    	modelReactMap <- lapply(modelReactMap, function(x){
    		if(any(p[-1] %in% x)){
    			return(union(p[1], setdiff(x, p[-1])))
    		}
    		return(x)
    	})
    }
    cat(">>> skipping these pairs due different reaction direction.\n")
    print(skipped)
    
    toRemove <- setdiff(toRemove, c(grep("^FCC_", react_id(uni)), "ENERGY_BOF", "GENERAL_BOF"))
    uni1.1 <- rmReact(uni1.1, toRemove)
    modelReactMap <- lapply(modelReactMap, function(x) union(x, c("ENERGY_BOF", "GENERAL_BOF")))
    
    
    
    ex <- findExchReact(uni1.1)
    exPos <- react_pos(ex)[grep("_(LR|RL|B)$", react_id(ex), value=F)]
    exId <- grep("_(LR|RL|B)$", react_id(ex), value=T)
    react_id(uni1.1)[exPos] <- gsub("_(LR|RL|B)$", "", react_id(uni1.1)[exPos])
    
    
    modelReactMap <- lapply(modelReactMap, function(x){
    	x[x %in% exId] <- gsub("_(LR|RL|B)$", "", x[x %in% exId])
    	return(x)
    })
    
    stopifnot(anyDuplicated(react_id(uni1.1)) == FALSE)
    
    # remove energy generating cycles based on iJO1366 paper
    #egcOff <- scan(text="CAT,DHPTDNR,DHPTDNRN,FHL,SPODM,SPODMpp,SUCASPtpp,SUCFUMtpp,SUCMALtpp,SUCTARTtpp", sep=",", what="character")
    #egcOff <- unlist(lapply(egcOff, function(x) grep(paste0("^", x, "(_.+)*$"), react_id(uni1.1), value=T, ignore.case=T)))
    #egcOffId <- na.omit(egcOff, react_id(uni1.1))
    
    #lowbnd(uni1.1)[egcOffId] <- 0
    #uppbnd(uni1.1)[egcOffId] <- 0
    
    
    uniFCC <- uni1.1
    uniFCC <- changeObjFunc(uniFCC, grep("^FCC_", react_id(uniFCC)))
    lowbnd(uniFCC)[react_pos(ex)] <- 0
    
    uniFCCSba <- sysBiolAlg(uniFCC, algorithm="fba", solverParm=sp)
    
    
    print(optimizeProb(uniFCCSba)["obj"])
    
    fccReact <- grep("^FCC_", react_id(uniFCC), value=T)
    fccResult <- lapply(modelReactMap, function(reacts){
    	on <- union(reacts, fccReact)
    	onId <- match(on, react_id(uniFCC))
    	onId <- na.omit(onId)
    	offId <- setdiff(1:react_num(uniFCC), onId)
    	optimizeProb(uniFCCSba, react=offId, lb=rep(0, length(offId)), ub=rep(0, length(offId)))
    })
    
    # if all these conditions are true, single models dont have cycles
    
    
    stopifnot(all(sapply(fccResult, "[[", "ok")==0))
    stopifnot(all(sapply(fccResult, "[[", "stat")==1))
    #stopifnot(all(sapply(fccResult, "[[", "obj")==0))
    
    fcc <- match(fccReact, react_id(uniFCC))
    a <- sapply(fccResult, function(x) x$fluxes[fcc])
    b <- apply(a, 2, function(x) fccReact[round(x, digits=6) != 0])
    
    cat(">>> these models have energy cycles\n")
    print(b[sapply(b, length) > 0 ])
    
    
    biomassReacts <- unique(unlist(modelBiomassMap))
    uniSba <- sysBiolAlg(uni1.1, algorithm="fba", solverParm=sp)
    
    biomassResults <- lapply(names(modelBiomassMap), function(n){
    	r <- modelBiomassMap[[n]]
    	mid <- match(modelReactMap[[n]], react_id(uni1.1))
    	mid <- setdiff(1:react_num(uni1.1), mid)
    	
    	id <- match(r, react_id(uni1.1))
    	res <- lapply(id, function(singleid) optimizeProb(uniSba, 
    							react=c(singleid, mid),
    							lb=rep(0, length(mid)+1), 
    							ub=c(1000, rep(0,length(mid))), 
    							obj_coef=c(1, rep(0, length(mid))))[c("stat", "obj")])
    	for(ri in res){
    		if(length(checkSolStat(ri$stat))!=0){
    			print(n)
    			print(id)
    			print(ri$stat)
    #			browser()
    			stop()
    		}
    	}
    	sapply(res, "[[", "obj")
    })
    names(biomassResults) <- names(modelBiomassMap)
    
    
    biomassReactionTable <- lapply(names(modelBiomassMap[sapply(modelBiomassMap, length)!=0]), function(x) data.frame(modelBiomassMap[[x]], x, length(modelBiomassMap[[x]])))
    biomassReactionTable <- do.call(rbind, biomassReactionTable)
    
    colnames(biomassReactionTable) <- c("react_id", "modelName", "numberBiomassReactions")
    biomassReactionTable$use <- ""
    biomassReactionTable$reactionName <- react_name(uni)[match(biomassReactionTable$react_id, react_id(uni))]
    write.csv(biomassReactionTable, file="selectBiomassTable.csv", row.names=F)
    
    ################################################################################
    
    # Manual Step
    
    if(!file.exists("selectBiomassTable_mod.csv")){
    	stop("select biomass reactions for each model by placing a X and save selectBiomassTable.csv as selectBiomassTable_mod.csv")
    }
    
    ################################################################################
    
    
    selectedBiomasses <- read.table("selectBiomassTable_mod.csv", sep=",", header=T, stringsAsFactors=F)
    stopifnot(all(selectedBiomasses$use %in% c("X", "")))
    l <- split(selectedBiomasses[c("use", "react_id")], selectedBiomasses$modelName)
    biomassReactions <- sapply(l, function(x) with(x, react_id[use=="X"]))
    
    modelBiomassMapNew <- rep(NA, length(modelBiomassMap))
    names(modelBiomassMapNew) <- names(modelBiomassMap)
    
    modelBiomassMapNew[names(biomassReactions)] <- biomassReactions
    
    r <- unlist(modelBiomassMap)[!unlist(modelBiomassMap) %in% modelBiomassMapNew]
    r <- match(r, react_id(uni1.1))
    lowbnd(uni1.1)[r] <- uppbnd(uni1.1)[r] <- 0
    lowbnd(uniFCC)[r] <- uppbnd(uniFCC)[r] <- 0
    
    
    
    
    
    
    
    modelBiomassMapSelection <- modelBiomassMapNew[names(modelBiomassMap)]
    save(file="../models/universalBiGG.ver1.1.Rdata", uni1.1, modelReactMap, modelBiomassMap, modelBiomassMapSelection)
    
    
    # removing of compartments not necessary:
    
    ##reactions in compartments:
    
    #metCompMatrix <- sapply(seq(along=mod_compart(uni1.1)), function(x){
    #	return(met_comp(uni1.1)==x)
    #})
    
    #sbin <- S(uni1.1) != 0
    
    
    #reactionCompMatrix <- t(metCompMatrix) %*% sbin
    #reactionsPerComp <- rowSums(reactionCompMatrix!=0)
    #names(reactionsPerComp) <- mod_compart(uni1.1)
    
    #keepComp <- c("c", "e", "p")
    #removeComp <- setdiff(mod_compart(uni1.1), keepComp)
    #rownames(reactionCompMatrix) <- mod_compart(uni1.1)
    #removeCompReact <- which(colSums(reactionCompMatrix[removeComp, ])>0)
    
    #uniFCC <- rmReact(uniFCC, react=react_id(uni1.1)[removeCompReact])
    #uni1.1 <- rmReact(uni1.1, react=react_id(uni1.1)[removeCompReact])
    #save(file="universalBiGG.ver1.1_compRemoved.Rdata", uniFCC, uni1.1, modelReactMap, modelBiomassMap, modelBiomassMapSelection)
    
    
    
    
    #r <- lapply(modelReactMap, function(x) 1:react_num(uni1.1))
    #off <- lapply(modelReactMap, function(x) !react_id(uni1.1) %in% x)
    #u <- lapply(off, function(x) ifelse(x, rep(0, react_num(uni1.1)), uppbnd(uni1.1)))
    #l <- lapply(off, function(x) ifelse(x, rep(0, react_num(uni1.1)), lowbnd(uni1.1)))
    #o <- lapply(modelBiomassMapSelection, function(x){
    #	v <- rep(0, react_num(uni1.1))
    #	if(is.na(x)){
    #		return(v)
    #	}
    #	v[grep(x, react_id(uni1.1))] <- 1
    #	return(v)
    #})
    
    #fbaResult <- optimizer(uni1.1, react=r, ub=u, lb=l, obj_coef=o)
    # / remove of compartments