Decontam去污染:一个尝试

为了程序运行的便利性,不想将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 CAASimport argparse
import rpy2.robjects as robjects
from Bio import SeqIO
import osparser = 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.1shi, 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] = 0elif determine == fou:df_contam[name] = 0with 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.mzph.cn/news/734568.shtml

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

相关文章

云计算的部署方式(公有云、私有云、混合云、社区云)

云计算的部署方式(公有云、私有云、混合云、社区云) 目录 零、00时光宝盒 一、云计算的部署方式 1.1、公有云&#xff08;Public Cloud&#xff09; 1.2、私有云&#xff08;Private Cloud&#xff09;  1.3、混合云&#xff08;Hybrid Cloud&#xff09; 1.4、社区云&am…

【C++】list模拟实现list迭代器失效问题

list模拟实现&list迭代器失效问题 一&#xff0c;list模拟实现1. list的主要框架接口模拟2. list构造&拷贝构造&析构3. list迭代器3.1 普通迭代器3.2 const迭代器 4. 增删查改 二&#xff0c;迭代器失效问题1. list的迭代器失效原因2. 解决办法 一&#xff0c;list…

Java 汇编源码查看环境搭建

目录 一、简介 二、在IDEA开发环境中搭建汇编环境 2.1 在IDEA中搭建字节码查看环境 2.1.1 搭建步骤 2.1.1.1 第一步 2.1.1.2 第二步 2.1.1.3 第三步 2.1.1.4 第四步 2.1.2 验证 2.2 在IDEA开发环境中搭建汇编代码查看环境 2.2.2 配置HSDIS插件 2.2.3 验证HSDIS插件是…

js随机整数

在JavaScript中&#xff0c;您可以使用 Math.random() 函数生成一个0到1之间的随机数&#xff08;包括0&#xff0c;但不包括1&#xff09;&#xff0c;然后通过适当的缩放和取整&#xff0c;可以得到一个随机整数。以下是一个简单的函数&#xff0c;用于生成指定范围内的随机整…

[虚拟机保护逆向] [HGAME 2023 week4]vm

[虚拟机保护逆向] [HGAME 2023 week4]vm 虚拟机逆向的注意点&#xff1a;具体每个函数的功能&#xff0c;和其对应的硬件编码的*长度* 和 *含义*&#xff0c;都分析出来后就可以编写脚本将题目的opcode转化位vm实际执行的指令 &#xff1a;分析完成函数功能后就可以编写脚本输出…

概率论与数理统计 P6 条件概率

文章目录 P6 条件概率一.条件概率二.乘法定理三.全概率公式 & 贝叶斯公式3.1 全概率公式&#xff08;由因求果&#xff09;3.2 贝叶斯公式&#xff08;由果导因&#xff09; P6 条件概率 一.条件概率 1.Def&#xff1a;设A、B是两个事件&#xff0c;且 P ( A ) > 0 P(…

深度学习在硬件和计算平台上的优化:实现更快、更高效的突破

引言 深度学习&#xff0c;作为机器学习领域的一个子集&#xff0c;通过模拟人脑神经元的连接方式&#xff0c;构建复杂的网络结构来处理和分析数据。然而&#xff0c;随着深度学习模型规模的不断扩大和复杂度的提高&#xff0c;其对计算资源的需求也呈指数级增长。因此&#…

【MySQL】表的增删改查——MySQL基本查询、数据库表的创建、表的读取、表的更新、表的删除

文章目录 MySQL表的增删查改1. Create&#xff08;创建&#xff09;1.1 单行插入1.2 多行插入1.3 替换 2. Retrieve&#xff08;读取&#xff09;2.1 select查看2.2 where条件2.3 结果排序2.4 筛选分页结果 3. Update&#xff08;更新&#xff09;3.1 更新单个数据3.2 更新多个…

如何保证消息的可靠传输

数据的丢失问题&#xff0c;可能出现在生产者、MQ、消费者中 生产者丢失&#xff1a; 生产者将数据发送到 RabbitMQ 的时候&#xff0c;可能数据就在半路给搞丢了&#xff0c;因为网络问题啥的&#xff0c;都有可能。此时可以选择用 RabbitMQ 提供的事务功能&#xff0c;就是生…

Unmanaged PowerShell

简介 在渗透测试当中经常会使用到PowerShell来执行脚本, 但是直接使用PowerShell.exe是一个非常敏感的行为, EDR等产品对PowerShell.exe进程的创建监控的很密切, 并且随着PowerShell的渗透测试工具的普及, 越来越多的EDR会利用微软提供的AMSI接口对PS脚本进行扫描, 但是对于低…

vue实现购物车功能

实现功能 CSS部分 <style>.tr {display: flex;}.th {margin: 10px;width: 20%;height: 50%;}.td {display: flex;margin: 10px;width: 20%;height: 100px;align-items: center;}.app-container .banner-box {border-radius: 20px;overflow: hidden;margin-bottom: 10px;}…

input中文输入法导致的高频事件

这是基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>中文输入法的高频事件</title&…

以题为例 浅谈前缀和算法

前缀求和算法是什么 前缀和算法就是以空间去换取时间&#xff0c;可用于快速求数组的区间和&#xff0c;它可以用于一维数组和二维数组&#xff0c;但我现在只接触了一维数组并没有接触二维数组&#xff0c;所以在这里先介绍一维数组前缀和相关的知识 前缀和典型代码 for(int…

通信-CAN-01 总线拓扑

本文主要介绍CAN总线拓扑&#xff0c;并结合实际用到CAN设备做些说明。 1 总线拓扑 拓扑结构中分为CPU&#xff0c;CAN 控制器&#xff0c;收发器&#xff0c;双绞线。CAN控制器根据两根线上的电位差来判断总线电平。发送方通过使总线发生变化&#xff0c;将消息发送给接收方…

BPSK调制解调

BPSK数字调制是相移键控PSK的一种&#xff0c;通过数字信号&#xff0c;调制载波的相位&#xff0c;利用载波的相位变化来反映数字信号&#xff0c;载波的振幅和频率均不变化。PSK应用很广泛&#xff0c;抗噪声性能比ASK和FSK要好&#xff0c;频带利用率较高。BPSK中&#xff0…

探讨:C#运行程序文件并获取输出的小问题

尝试了一下用C#运行一个控制台程序&#xff0c;希望获取输出并在适当的时候输入&#xff0c;看起来挺简单&#xff0c;不过实际使用发现只能让程序一次性执行完毕并获取输出&#xff08;并没有仔细尝试各种方式&#xff09;。 代码很简单&#xff1a; private void Test(){Proc…

Java实战:Spring Boot 利用 Redis 解决海量重复提交问题

本文将详细介绍如何在 Spring Boot 应用程序中利用 Redis 解决海量重复提交问题。我们将深入探讨重复提交问题的原因和影响&#xff0c;以及如何使用 Redis 的数据结构和原子操作来控制请求的重复提交。 1. 引言 在现代的互联网应用中&#xff0c;用户可能会频繁地提交相同的…

前端文件流、切片下载和上传

前端文件流、切片下载和上传技术在提升文件传输效率和优化用户体验方面发挥着关键作用。这些技术不仅可以帮助解决大文件传输过程中可能遇到的问题&#xff0c;如网络超时、内存溢出等&#xff0c;还能通过并行传输和断点续传等功能&#xff0c;提高传输速度和稳定性。 一、前端…

C++高级面试提:请解释 C++ 中的指针算术和指针迭代器的区别。

请解释 C 中的指针算术和指针迭代器的区别。 在 C 中&#xff0c;指针算术&#xff08;Pointer Arithmetic&#xff09;和指针迭代器&#xff08;Pointer Iterators&#xff09;是处理指针的两种不同方法。 指针算术&#xff08;Pointer Arithmetic&#xff09;&#xff1a; …

webpack5基础--07_自动清空上次打包资源

自动清空上次打包资源 1. 配置 const path require("path");module.exports {entry: "./src/main.js",output: {path: path.resolve(__dirname, "dist"),filename: "static/js/main.js",clean: true, // 自动将上次打包目录资源清…