Source code for metage2metabo.m2m.community_addedvalue

# Copyright (C) 2019-2024 Clémence Frioux & Arnaud Belcour - Inria Dyliss - Pleiade - Microcosme
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program 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 Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>

import json
import logging
import os
import sys

from metage2metabo import utils

logger = logging.getLogger(__name__)


[docs] def addedvalue(iscope_rm, cscope_rm, out_dir): """Compute the added value of considering interaction with microbiota metabolism rather than individual metabolisms. Args: iscope_rm (set): union of metabolites in all individual scopes cscope_rm (set): metabolites reachable by community/microbiota out_dir (str): output directory Returns: set: set of metabolites that can only be reached by a community """ logger.info('\n###############################################') logger.info('# #') logger.info('# Added-value of metabolic interactions #') logger.info('# #') logger.info('###############################################\n') # Community targets = what can be produced only if cooperation occurs between species newtargets = cscope_rm - iscope_rm logger.info("\nAdded value of cooperation over individual metabolism: " + str(len(newtargets)) + " newly reachable metabolites: \n") logger.info('\n'.join(newtargets)) logger.info("\n") miscoto_dir = os.path.join(out_dir, 'community_analysis') addedvalue_json_path = os.path.join(miscoto_dir, 'addedvalue.json') if not utils.is_valid_dir(miscoto_dir): logger.critical('Impossible to access/create output directory') sys.exit(1) dict_av = {'addedvalue': list(newtargets)} with open(addedvalue_json_path, 'w') as dumpfile: json.dump(dict_av, dumpfile, indent=4, default=lambda x: x.__dict__) logger.info(f'Added-value of cooperation written in {addedvalue_json_path}') return newtargets