Decontam去污染:一个尝试

news2024/12/25 12:41:21

为了程序运行的便利性,不想将Decontam放到windows的Rstudio里面运行,需要直接在Ubuntu中运行,并且为了在Decontam时进行其他操作,使用python去运行R

 首先你需要有一个conda环境,安装了R,Decontam,phyloseq,rpy2

mamba create -c bioconda -c conda-forge -p {os.path.join(args['conda_env_dir'], 'LBSWrap-Decontam')} r-base=4.3.1 python=3.10 -y >/dev/null 2>&1
mamba install -p {os.path.join(args['conda_env_dir'], 'LBSWrap-Decontam')} bioconda::bioconductor-decontam -y >/dev/null 2>&1
mamba install -p {os.path.join(args['conda_env_dir'], 'LBSWrap-Decontam')} bioconda::bioconductor-phyloseq -y >/dev/null 2>&1
mamba install -p {os.path.join(args['conda_env_dir'], 'LBSWrap-Decontam')} biopython -y >/dev/null 2>&1
os.path.join(args['conda_env_dir'], 'LBSWrap-Decontam', 'pip')} install rpy2 >/dev/null 2>&1

然后建立这个python文件,chmod 755给权限就行了

需要有你的fasta文件(用于输出通过过滤的和未通过过滤的fasta序列),otu文件,metadata文件 

#! /usr/bin/env python
#########################################################
# run Decontam (method="prevalence") in Ubuntu through python
# written by PeiZhong in IFR of CAAS

import argparse
import rpy2.robjects as robjects
from Bio import SeqIO
import os

parser = argparse.ArgumentParser(description='run Decontam (method="prevalence") in Ubuntu through python')
parser.add_argument('--otu_txt', '-otu', type=str, required=True, help='< OTU table file >')
parser.add_argument('--metadata_txt', '-metadata', required=True, type=str, help='< Metadata file >')
parser.add_argument('--way', '-w', type=str, required=True, help='< choice from isNotContaminant or isContaminant >')
parser.add_argument('--threshold', '-t', type=float, default=None, help='< Threshold , isNotContaminant default = 0.5, isContaminant default = 0.1 >')
parser.add_argument('--result_txt', '-r', type=str, required=True, help='< result txt from Decontam >')
parser.add_argument('--input_fasta', '-ifa', type=str, required=True, help='< your fasta file >')
parser.add_argument('--output_fasta', '-ofa', type=str, required=True, help='< clean fasta according to the result of Decontam >')
parser.add_argument('--contamination_fasta', '-cfa', type=str, required=True, help='< contamination fasta according to the result of Decontam >')

args = parser.parse_args()

for filepath in [args.otu_txt, args.metadata_txt, args.input_fasta]:
    if not os.path.exists(filepath):
        raise FileNotFoundError(f"The file {filepath} does not exist.")

if args.way not in ["isNotContaminant", "isContaminant"]:
    raise ValueError("The 'way' parameter must be either 'isNotContaminant' or 'isContaminant'.")

if args.threshold is None:
    args.threshold = 0.5 if args.way == "isNotContaminant" else 0.1

shi, fou = ("TRUE", "FALSE") if args.way == "isNotContaminant" else ("FALSE", "TRUE")

r_code = f"""
library(ggplot2)
library(decontam)
library(phyloseq)

otu <- read.table("{args.otu_txt}", header=TRUE, row.names = 1)
sample <- read.table("{args.metadata_txt}", header=TRUE, row.names = 1)

otu_table <- otu_table(t(otu), taxa_are_rows = FALSE)
sample_data <- sample_data(sample)
ps <- phyloseq(otu_table, sample_data)

sample_data(ps)$is.neg <- sample_data(ps)$Sample_or_Control == "Control"
contamdf.notcontam <- {args.way}(ps, method="prevalence", neg="is.neg", threshold={args.threshold},detail=TRUE) # isNotContaminant -> True means non-contaminants
write.table(contamdf.notcontam, file="{args.result_txt}", sep="\t", quote=F, row.names=T)
"""
robjects.r(r_code)

df, df_contam = {}, {}
with open(args.result_txt,"r") as read_result:
    for line in read_result.readlines():
        if "p.prev" not in line and len(line.split("\t")) >= 6:
            name, determine = line.split("\t")[0].strip("\n"), line.split("\t")[6].strip("\n")
            if determine == shi:
                df[name] = 0
            elif determine == fou:
                df_contam[name] = 0

with open(args.input_fasta, 'r') as fasta_file:
    sequences = SeqIO.to_dict(SeqIO.parse(fasta_file, 'fasta'))

clean_sequences = {key: sequences[key] for key in df}
contaminated_sequences = {key: sequences[key] for key in df_contam}

with open(args.output_fasta, 'w') as clean_file, open(args.contamination_fasta, 'w') as contaminated_file:
    SeqIO.write(clean_sequences.values(), clean_file, 'fasta')
    SeqIO.write(contaminated_sequences.values(), contaminated_file, 'fasta')

OTU示例和metadata示例参考....emmm算了比较麻烦,我给你们看我的文件

注意R里面"-"这个横杠会被识别为".",容易出错

使用示例

/home/zhongpei/hard_disk_sda2/zhongpei/Software/my_script/Decontam.py -t 0.5 \ 
-otu ${zubie}_${ruanjian}_decontam_pre.txt -metadata ${zubie}_metadata.txt \
 -w isContaminant -r ${zubie}_${ruanjian}_decontam.report \ 
-ifa ${zubie}_${ruanjian}_all.fa -ofa ${zubie}_${ruanjian}_decontam.fa \ 
-cfa ${zubie}_${ruanjian}_notgood.fa

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1500278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迅速上手:CentOS 系统下 SSH 服务配置指南

前言 掌握 SSH 服务&#xff0c;就像拥有了一把解锁网络世界的钥匙。本文深入浅出地介绍了如何使用 SSH&#xff08;Secure Shell&#xff09;服务&#xff0c;从连接远程服务器到安全文件传输&#xff0c;让你轻松驾驭远程管理与数据传输&#xff0c;提高工作效率&#xff0c…

安全防御-第七次

在FW5和FW6之间建立一条IPSEC通道保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 NAT&#xff1a; 安全策略&#xff1a; NAT: 安全策略&#xff1a; 修改服务器映射&#xff1a; 配置IPSEC&#xff1a;

常州大学-吴颖:参加数维杯竞赛后,我成功拿到梦寐以求的奖项

转眼间&#xff0c;数维杯数模竞赛已经进行到了第八年&#xff0c;这八年中&#xff0c;成千上万的数模人乘着属于自己的船成功抵达梦想的彼岸&#xff0c;每一场比赛都留下了他们努力的痕迹&#xff0c;更成为每次想起都觉得极为宝贵的经历。 当然&#xff0c;每个人的参赛经…

SpringCloud之Nacos入门与实战系列

目录 一、Nacos介绍 1.1、配置中心和注册中心的概念 1.2 Nacos 优点 二、Nacos的使用 2.1 以单机模式启动Nacos 2.2 Nacos部署方式介绍 2.3 配置数据源 2.4 开启控制台权限登录 三、配置中心的使用 3.1 创建配置信息 3.2 SpringBoot使用配置中心 四、注册中心的使用 4…

如何在云服务器上面安装宝塔

一、宝塔面板 1.进入宝塔面板免费注册账号 2.找到安装宝 复制centos安装脚本 二、云服务器上安装宝塔 1.输入centos安装脚本 等待安装 出现这个表示安装成功 外网面板地址: https://云服务器内网IP:30230/d3032ee5内网面板地址: https://本地IP:30230/d3032ee5username: p27…

每日学习总结20240308

每日总结 20240305 常用控件 QPushButton&#xff08;按钮&#xff09;&#xff1a;用于触发操作或响应用户点击事件。QLabel&#xff08;标签&#xff09;&#xff1a;用于显示文本或图像。QLineEdit&#xff08;行编辑器&#xff09;&#xff1a;单行文本输入框&#xff0…

测试用例编写详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、概念 测试用例的基本概念&#xff1a; 测试用例&#xff…

【物联网】stm32芯片结构组成,固件库、启动过程、时钟系统、GPIO、NVIC、DMA、UART以及看门狗电路的全面详解

一、stm32的介绍 1、概述 stm32: ST&#xff1a;指意法半导体 M&#xff1a;指定微处理器 32&#xff1a;表示计算机处理器位数 与ARM关系:采用ARM推出cortex-A&#xff0c;R,M三系中的M系列&#xff0c;其架构主要基于ARMv7-M实现 ARM分成三个系列&#xff1a; Cortex-A&…

position定位学习

加了绝对定位的盒子不能通过margin:0 auto水平居中 脱标元素不会产生外边距合并问题

macos m1 arm芯片 使用jpype报错 FileNotFoundError: [Errno 2] JVM DLL not found

startJVM(jpype.getDefaultJVMPath()) 报错 Traceback (most recent call last):File "/Users/thomas990p/PycharmProjects/tuya/volcano-biz-scripts/WenKongFa/FinalCode/java2python/CallJavaAPI.py", line 12, in <module>startJVM(jpype.getDefaultJVMPa…

【Azure 架构师学习笔记】- Azure Private Endpoint

本文属于【Azure 架构师学习笔记】系列。 前言 公有云的其中一个特点是默认允许公网访问&#xff0c; 这就对企业环境带来风险&#xff0c;也是很多年前企业对公有云抵触的其中一个原因&#xff0c;现在这类问题已经很少&#xff0c;因为有了很多技术来确保云上的资源被安全地…

讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so

1.需求 最近linux下的Qt项目中要连接oracle数据库&#xff0c;用户需要我们访问他们的oracle数据库&#xff0c;查询数据 2.遇到的问题 qt连接oracle数据库需要oracle的驱动库libqsqloci.so插件&#xff0c;需要编译下&#xff0c;之前没有编译过&#xff0c;看了网上的…

#微信小程序(布局、渲染层基础知识)

1.IDE&#xff1a;微信开发者工具 2.实验&#xff1a; 3.记录: &#xff08;1&#xff09;view&#xff08;类似于div&#xff09; &#xff08;2&#xff09;块级元素不占满一行且水平均分布局flex,justify(space-around) &#xff08;3&#xff09;滚动<scroll view sc…

一文搞懂电容两端电压为啥不能突变?

大家好&#xff0c;我是砖一。 我们工作学习过程中&#xff0c;经常会遇到的电容&#xff0c;对于电容的作用&#xff0c;可能大家一般去网上搜有很多&#xff0c;比如储能&#xff0c;滤波&#xff0c;旁路&#xff0c;去耦等等。 但是我要告诉大家的是&#xff0c;电容最重…

基于yolov5的SAR舰船检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的SAR舰船检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的SAR舰船检测系统是在pytorch框架下实现的&#xff0c;这是一个完整的项目&…

ai直播数字人:AI大模型应用开发的神奇世界

当AI技术的发展走向一个新的高峰&#xff0c;AI直播数字人逐渐成为人们关注的焦点。这种全新的数字人形态&#xff0c;通过大模型应用开发&#xff0c;带来了一个神奇世界。 在这个神奇世界里&#xff0c;AI直播数字人可以展现出与真实人类相媲美的外貌和声音。通过先进的图像…

RoaringBitmap 源码

当调用add方法时&#xff0c;先把x分成高16位和低16位。 ">>> "是 Java 中的无符号右移操作符&#xff0c;表示将 x 的二进制表示向右移动 16 位 当x为 65535 &#xff0c;二进制为1111111111111111&#xff0c;16个1&#xff0c;即丢掉右16位&#xff0c;左…

FX110网:CTRL FX 是典型的诈骗平台!汇友发出肺腑之言

“CTRL FX 是一个典型的投资骗局&#xff0c;以‘出金缴税’等为幌子反复割韭菜&#xff0c;入金了这么多&#xff0c;但没有一次出金获得批准。揭露他们的骗局&#xff0c;保护受害者对我是一种宽慰。” 这是近日一汇友在对CTRL FX平台彻底失望后发出的声音。珍惜别的投资者用…

如何使用apk2url从APK中快速提取IP地址和URL节点

关于apk2url apk2url是一款功能强大的公开资源情报OSINT工具&#xff0c;该工具可以通过对APK文件执行反汇编和反编译&#xff0c;以从中快速提取出IP地址和URL节点&#xff0c;然后将结果过滤并存储到一个.txt输出文件中。 该工具本质上是一个Shell脚本&#xff0c;专为红队…

Claude3综合能力媲美GPT4.0!逻辑推理能力独一档的存在!

当人们还在期待GPT5.0的时候&#xff0c;openai竞争对手Anthropic公司又献出了Claude3&#xff0c;它在综合能力实测当中可以媲美GPT4.0&#xff01;尤其它的逻辑推理能力&#xff0c;有过之而无不及&#xff0c;几乎独一档的存在。一问世就吸引了大量用户使用。 接下来分享一…