Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • exec_auto_adjust_trace
  • let_variables
  • v1.4.1
  • v1.4.0
  • v1.3.0
  • v1.2.0
  • v1.1.0
  • v1.0.0
9 results

build.gradle

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    blockedReact.R NaN GiB
    #  blockedReact.R
    #  FBA and friends with R.
    #
    #  Copyright (C) 2010-2014 Gabriel Gelius-Dietrich, Dpt. for Bioinformatics,
    #  Institute for Informatics, Heinrich-Heine-University, Duesseldorf, Germany.
    #  All right reserved.
    #  Email: geliudie@uni-duesseldorf.de
    #  
    #  This file is part of sybil.
    #
    #  Sybil is free software: you can redistribute it and/or modify
    #  it under the terms of the GNU General Public License as published by
    #  the Free Software Foundation, either version 3 of the License, or
    #  (at your option) any later version.
    #
    #  Sybil is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #
    #  You should have received a copy of the GNU General Public License
    #  along with sybil.  If not, see <http://www.gnu.org/licenses/>.
    
    
    ################################################
    # Function: blockedReact
    #
    # This function finds blocked reactions in a specified IO-environment.
    #
    #
    
    
    blockedReact <- function(model,
                             tol = SYBIL_SETTINGS("TOLERANCE"),
                             exex = TRUE,
                             fld = FALSE,
                             retOptSol = FALSE,
                             verboseMode = 2,
                             ...
                            ) {
    
        .Deprecated(new = "fluxVar")
    
        if (!is(model, "modelorg")) {
            stop("needs an object of class modelorg!")
        }
    
        modIrr <- ifelse(is(model, "modelorg_irrev"), TRUE, FALSE) 
    
        intReact <- NA
    
        # remove exchange reactions from analysis
        if (isTRUE(exex)) {
            exchReact <- findExchReact(model)
            ex <- react_pos(exchReact)
            intReact <- 1:react_num(model)
            intReact <- intReact[-ex]
            
            if (length(intReact) < 1) {
                stop("model contains no internal reactions!")
            }
        }
        else {
            intReact <- 1:react_num(model)
        }
    
        # memory for results
        nObj <- ifelse(isTRUE(modIrr), length(intReact), 2 * length(intReact)) 
        blocked_react <- logical(react_num(model))
    
        if (isTRUE(retOptSol)) {
            obj   <- numeric(nObj)
            ok    <- integer(nObj)
            stat  <- integer(nObj)
            if (isTRUE(fld)) {
                flux <- Matrix::Matrix(0, nrow = react_num(model), ncol = nObj)
            }
            else {
                flux <- NA
            }
        }
        
        obj_mod <- obj_coef(model)
        obj_coef(model) <- as.integer(rep(0, react_num(model)))
    
    	lpmod <- sysBiolAlg(model, algorithm = "fv", tol = tol, ...)
    
      
    #------------------------------------------------------------------------------#
    #                        finding blocked reactions                             #
    #------------------------------------------------------------------------------#
    
        if (verboseMode > 0) { message("calculating blocked reactions ...") }
    
        obj_max <- 0
        obj_min <- 0
        
        if (verboseMode > 1) { progr <- .progressBar() }
      
        for (i in seq(along = intReact)) {
    
            solpl <- ifelse(isTRUE(modIrr), i+1, 2*i)
            
    #         if (uppbnd(model)[intReact[i]] > 0) {
            
                #print(intReact[i])
                sol <- optimizeProb(lpmod, lpdir = "max",
                                    react = intReact[i], obj_coef = 1)
                obj_max <- sol$obj
                if (isTRUE(retOptSol)) {
                    obj[(solpl-1)]   <- sol$obj
                    ok[(solpl-1)]    <- sol$ok
                    stat[(solpl-1)]  <- sol$stat
                    if (isTRUE(fld)) {
                        flux[,(solpl-1)] <- sol$fluxes
                    }
                }
    #         }
    #         else {
    #             obj_max <- 0
    #             if (isTRUE(retOptSol)) {
    #                 obj[(i*2-1)]   <- 0
    #                 ok[(i*2-1)]    <- NA
    #                 stat[(i*2-1)]  <- NA
    #                 if (isTRUE(fld)) {
    #                     flux[,(i*2-1)] <- NA
    #                 }
    #             }
    #         }
    
    #         if (lowbnd(model)[intReact[i]] < 0) {
            if (!is(model, "modelorg_irrev")) {
            
                sol <- optimizeProb(lpmod, lpdir = "min",
                                    react = intReact[i], obj_coef = 1)
                obj_min <- sol$obj
                if (isTRUE(retOptSol)) {
                    obj[solpl]   <- sol$obj
                    ok[solpl]    <- sol$ok
                    stat[solpl]  <- sol$stat
                    if (isTRUE(fld)) {
                        flux[,solpl] <- sol$fluxes
                    }
                }
            }
    #         }
    #         else {
    #             obj_min <- 0
    #             if (isTRUE(retOptSol)) {
    #                 obj[(i*2)]   <- 0
    #                 ok[(i*2)]    <- NA
    #                 stat[(i*2)]  <- NA
    #                 if (isTRUE(fld)) {
    #                     flux[,(i*2)] <- NA
    #                 }
    #             }
    #         }
    
            #print(paste("i", i))
            #print(paste("max", obj_max))
            #print(paste("min", obj_min))
            #print(" ")
    
            if (is(model, "modelorg_irrev")) {
                blocked_react[intReact[i]] <- ifelse(abs(obj_max) < tol, TRUE, FALSE)
            }
            else {
                if ( (abs(obj_max) < tol) && (abs(obj_min) < tol) ) {
                    blocked_react[intReact[i]] <- TRUE
                }
                else {
                    blocked_react[intReact[i]] <- FALSE
                }
            }
    
            if (verboseMode > 1) {
                progr <- .progressBar(i, length(intReact), progr)
            }
    
        }
    
        #print(nObj)
        #print(obj)
        #print(ok)
        #print(blocked_react)
    
        if (isTRUE(retOptSol)) {
            optsol <- new("optsol_blockedReact",
                mod_id       = mod_id(model),
                mod_key      = mod_key(model),
                solver       = solver(problem(lpmod)),
                method       = method(problem(lpmod)),
                algorithm    = algorithm(lpmod),
                num_of_prob  = as.integer(nObj),
                lp_num_cols  = nc(lpmod),
                lp_num_rows  = nr(lpmod),
                lp_obj       = as.numeric(obj),
                lp_ok        = as.integer(ok),
                lp_stat      = as.integer(stat),
                lp_dir       = factor(rep(c("max", "min"), length(intReact))),
                obj_coef     = obj_mod,
                fldind       = fldind(lpmod),
                fluxdist     = fluxDistribution(flux),
        
                blocked      = blocked_react,
                react        = new("reactId",
                                   mod_id  = mod_id(model),
                                   mod_key = mod_key(model),
                                   pnt     = intReact,
                                   id      = react_id(model)[intReact])
            )
        }
        else {
            optsol <- blocked_react
        }
    
        return(optsol)
    
    }