From d22fa993b27be9a377275561326c4c2ffad196d2 Mon Sep 17 00:00:00 2001
From: Sajjad Ghaffarinasabsharabiani <ghaffas@hhu.de>
Date: Tue, 9 Aug 2022 10:17:37 +0000
Subject: [PATCH] Upload New File

---
 .../helper/fastBlockedReact.R                 | 139 ++++++++++++++++++
 1 file changed, 139 insertions(+)
 create mode 100644 networkComplexityBigg/helper/fastBlockedReact.R

diff --git a/networkComplexityBigg/helper/fastBlockedReact.R b/networkComplexityBigg/helper/fastBlockedReact.R
new file mode 100644
index 0000000..a02439b
--- /dev/null
+++ b/networkComplexityBigg/helper/fastBlockedReact.R
@@ -0,0 +1,139 @@
+fastBlockedReact <- function(model, tol=SYBIL_SETTINGS("TOLERANCE"), exex=TRUE){
+	stopifnot(is(model, "modelorg"))
+	
+	obj_coef(model) <- rep(0, react_num(model))
+	sba <- sysBiolAlg(model, algorithm="fba")
+	
+	toCheck <- rep(T, react_num(model))
+	blocked <- rep(F, react_num(model))
+	
+	if(exex){
+		toCheck[react_pos(findExchReact(model))] <- F
+	}
+	pb <- txtProgressBar(min=0, max=react_num(model), style=3)
+	while(any(toCheck)){
+		setTxtProgressBar(pb, react_num(model)-sum(toCheck))
+#		rid <- sample(which(toCheck), 1)
+		rid <- which(toCheck)[1]
+		max <- optimizeProb(sba, react=rid, obj_coef=1, lpdir="max")
+		if(length(checkSolStat(max$stat))!=0){
+			if(SYBIL_SETTINGS("SOLVER") == "cplexAPI"){
+				if(max$stat == CPX_STAT_OPTIMAL_INFEAS){
+					warning(paste0("Status was:", getMeanStatus(max$stat)))
+				}
+			}else{
+				stop(paste0("Solution is not optimal", getMeanStatus(max$stat)))
+			}
+		}
+		toCheck[toCheck][abs(max$fluxes[toCheck]) > tol] <- F
+		min <- optimizeProb(sba, react=rid, obj_coef=1, lpdir="min")
+		if(length(checkSolStat(min$stat))!=0){
+			if(SYBIL_SETTINGS("SOLVER") == "cplexAPI"){
+				if(min$stat == CPX_STAT_OPTIMAL_INFEAS){
+					warning(paste0("Status was:", getMeanStatus(min$stat)))
+				}
+			}else{
+				stop(paste0("Solution is not optimal", getMeanStatus(min$stat)))
+			}
+		}
+		toCheck[toCheck][abs(min$fluxes[toCheck]) > tol] <- F
+		
+		
+		if(abs(max$obj) < tol && abs(min$obj) < tol ){
+			blocked[rid] <- T
+		}
+		
+		toCheck[rid] <- F
+	}
+	close(pb)
+	return(blocked)
+}
+
+#irrevBlockedReact <- function(model, exex=TRUE, tol=SYBIL_SETTINGS("TOLERANCE")){
+#	stopifnot(is(model, "modelorg_irrev"))
+#	
+#	sba <- sysBiolAlg(model, algorithm="fba")
+#	toCheck <- rep(T, react_num(model))
+##	blocked <- rep(F, react_num(model))
+#	
+#	if(exex){
+#		toCheck[react_pos(findExchReact(model))] <- F
+#	}
+#	while(any(toCheck)){
+#		print(sum(toCheck))
+#		checkVector <- rep(0, react_num(model))
+#		checkVector[toCheck] <- 1
+#		fba <- optimizeProb(sba,
+#							react=1:(1*react_num(model)),
+#							obj_coef=c(checkVector))
+#		stopifnot(length(checkSolStat(fba$stat))==0)
+#		
+#		f <- fba$fluxes
+#		toCheck[toCheck][abs(f[toCheck]) > tol] <- F
+##		blocked[toCheck][abs(f[toCheck]) > tol] <- F
+#		
+#		print(fba[c("obj", "stat")])
+#		if(abs(fba$obj) < tol){
+#			break
+#		}
+#	}
+#	return(toCheck)
+#}
+
+
+
+#superFastBlockedReact <- function(model, tol=SYBIL_SETTINGS("TOLERANCE"), exex=TRUE){
+#	stopifnot(is(model, "modelorg"))
+#	
+#	sba <- sysBiolAlg(model, algorithm="mtf", wtobj=0, lpdir="max")
+#	
+#	toCheck <- rep(T, react_num(model))
+##	blocked <- rep(F, react_num(model))
+#	
+#	if(exex){
+#		toCheck[react_pos(findExchReact(model))] <- F
+#	}
+#	while(any(toCheck)){
+#		print(sum(toCheck))
+#		checkVector <- rep(0, react_num(model))
+#		checkVector[toCheck] <- 1
+#		mtf <- optimizeProb(sba, fldind=FALSE,
+#							react=1:(3*react_num(model)),
+#							obj_coef=c(rep(0, react_num(model)), checkVector, checkVector))
+#		stopifnot(length(checkSolStat(mtf$stat))==0)
+#		
+#		f <- mtf$fluxes[1:react_num(model)]
+#		toCheck[toCheck][abs(f[toCheck]) > tol] <- F
+##		blocked[toCheck][abs(f[toCheck]) > tol] <- F
+#		
+#		print(mtf[c("obj", "stat")])
+#		browser()
+#		if(abs(mtf$obj) < tol){
+#			toCheck <- F
+#		}
+#		
+#	}
+#	return(toCheck)
+#}
+
+#library(sybil)
+#data(Ec_core)
+#source("helperScripts/fastBlockedReact.R")
+#superFastBlockedReact(Ec_core)
+
+#all(fastBlockedReact(Ec_core) == blockedReact(Ec_core))
+#load("~/workspace/models/iAF1260.Rdata")
+#data.frame(round(f), checkVector, round(mtf$fluxes[react_num(model)+(1:react_num(model))]))
+
+
+
+
+
+
+
+
+
+
+
+
+
-- 
GitLab