生物信息学分析领域领先的特制语言环境NGLess(Next Generation Less)介绍、安装配置和详细使用方法

介绍

NGLess(Next Generation Less)是一种用于生物信息学分析的领先的领域特定语言(DSL)。它旨在简化和加速NGS(Next Generation Sequencing)数据的分析过程。NGLess具有清晰的语法和功能,使用户能够轻松地进行复杂的分析,而无需深入了解编程语言。 NGLess还提供了许多内置的功能和工具,以支持用户进行快速、高效和可重复的数据分析。

文章:NG-meta-profiler: fast processing of metagenomes using NGLess, a domain-specific language | Microbiome | Full Text

NGLess的主要特点和功能:

1. 简化和精简的语言

  • 简单易用:NGLess采用了简洁的领域特定语言(DSL),使用户可以更轻松地编写分析流程。
  • 简化操作:DSL语法旨在减少冗余和复杂性,使分析过程更直观、更容易理解和调试。

2. 多样化的功能模块

  • 多模块支持:NGLess具有多个内置模块,支持从质控到序列比对、组装、注释等一系列功能。
  • 内建工具:包括用于质量控制、序列比对(如Bowtie2、BWA-MEM)、组装(例如MEGAHIT)和功能注释(例如HMMER、BLAST)的内建工具。

3. 强大的数据处理能力

  • 并行计算:NGLess能够有效利用多核心和多线程进行并行计算,提高了数据处理和分析的效率。
  • 数据规范化:对于多样化的数据类型(例如RNA-Seq、DNA-Seq等),NGLess能够提供标准化的处理方法。

4. 内建容错机制和自动化流程

  • 错误处理:NGLess具有内建的错误处理机制,能够有效处理数据分析中的常见错误,提高了分析的可靠性。
  • 自动化流程:用户可以通过编写简单的脚本来定义整个分析流程,NGLess会自动处理流程中的各个步骤。

5. 支持不同数据类型和数据源

  • 数据类型广泛:支持处理多种不同类型的高通量测序数据,包括但不限于RNA-Seq、DNA-Seq、宏基因组学等数据类型。
  • 数据源多样:能够处理来自不同平台(如Illumina、PacBio、ONT等)生成的数据。

6. 可扩展性和灵活性

  • 插件支持:NGLess支持插件,用户可以自定义添加新的工具和功能模块。
  • 灵活配置:用户可以根据实验设计和数据特点灵活配置NGLess的分析流程和参数。

7. 高质量的输出结果和报告

  • 结果可视化:NGLess生成清晰、易读的报告和输出文件,便于结果解读和进一步分析。
  • 结果可导出:结果数据以标准格式输出,可方便地与其他生物信息学工具和软件进行整合和分析。

NGLess主要用途

1. 测序数据处理和预处理

NGLess可以用于各种类型的高通量测序数据的预处理,包括质量控制、去除低质量序列、去除接头序列、去除PCR重复等。它可以帮助用户在分析之前对原始数据进行优化和处理。

2. 序列比对和组装

该工具可以进行序列比对,比如将测序数据与参考基因组或转录组进行比对分析,找出序列相似性和匹配度。此外,NGLess也支持序列组装,将碎片化的序列数据拼接成更长的序列片段或完整的基因组。

3. 功能注释和分类分析

NGLess提供功能注释的功能,可以对序列进行注释,了解其功能、结构和生物学意义。此外,它也支持分类分析,可以对序列进行分类,了解其生物学分类信息。

4. RNA-Seq和DNA-Seq分析

NGLess可用于RNA-Seq和DNA-Seq数据的分析。对于RNA-Seq数据,可以进行基因表达分析、差异表达分析等。对于DNA-Seq数据,可以进行变异检测、SNP分析等。

5. 宏基因组学和宏转录组学分析

NGLess广泛应用于宏基因组学和宏转录组学数据的分析,可用于了解和研究微生物组成、功能和结构等。

6. 数据标准化和整合

它可以帮助用户对不同来源、不同类型的测序数据进行标准化处理,使得这些数据可以更方便地整合和比较。

7. 工具集成和自定义分析流程

NGLess可以作为一个通用的工具平台,支持用户自定义分析流程,集成不同的分析工具和算法,根据研究需要进行灵活的分析和处理。

8. 数据可视化和结果报告

除了提供分析结果外,NGLess还支持结果的可视化展示,生成清晰易读的报告,有助于用户对分析结果进行理解和进一步的研究。

NGLess 支持的主要数据类型:

1. DNA-Seq 数据

  • Whole Genome Sequencing (WGS):整个基因组测序数据,用于对个体的完整基因组进行分析。
  • Targeted Sequencing:针对特定基因、区域或基因组的测序,如靶向捕获测序。
  • Metagenomic Sequencing:用于分析微生物群落的DNA测序数据,研究不同环境中的微生物组成。
  • Variant Calling:用于检测个体间或样本间的单核苷酸变异(SNV)和结构变异(SV)等。

2. RNA-Seq 数据

  • Total RNA Sequencing:全转录组测序数据,包括mRNA、ncRNA等的测序,用于基因表达分析、可变剪接等研究。
  • Small RNA Sequencing:研究小分子RNA如miRNA、siRNA等的测序数据。
  • Single Cell RNA-Seq:用于单细胞水平的转录组测序数据分析,探索单个细胞的表达谱。

3. 宏基因组学数据

  • Metagenomic Sequencing:分析环境样品中的宏基因组数据,了解微生物群落的多样性和功能。
  • Metatranscriptomic Sequencing:宏转录组数据,研究环境样品中微生物群落的转录活动。

4. 其他数据类型

  • ChIP-Seq 数据:用于研究染色质免疫沉淀测序数据,研究蛋白质与DNA的相互作用。
  • Methyl-Seq 数据:甲基化组测序数据,用于研究DNA甲基化变化。

NGLess的主要受益用户

主要受益用户群体包括但不限于以下几类:

1. 生物信息学研究人员:

  • 数据分析人员:生物信息学家和数据分析人员可以利用NGLess快速进行高通量测序数据的分析,执行序列比对、组装、注释等各种任务,减少了繁琐的数据预处理和分析步骤,提高了分析效率。
  • 算法开发者:对于开发新的生物信息学分析算法的研究人员,NGLess提供了一个灵活且易于使用的平台,可用于测试新算法的性能和效果。

2. 生物学研究人员和实验室科学家:

  • 生物学家:生物学家和实验室科学家可以使用NGLess进行基因组学、转录组学等多种高通量数据的分析,快速获得数据处理和分析结果,帮助理解生物学问题。
  • 实验室技术人员:在实验室中产生的大规模测序数据可以利用NGLess进行快速和可靠的分析,为实验结果提供支持和解释。

3. 教育和培训机构:

  • 教育机构:在生物信息学课程中,NGLess可以作为教学工具,帮助学生理解和学习高通量测序数据的分析方法和技术,提高教学效率。
  • 培训机构:生物信息学培训机构可以利用NGLess作为培训内容的一部分,向学员介绍和演示如何使用工具进行生物信息学分析。

4. 行业应用和医学研究:

  • 生物技术公司:生物技术公司和医学研究机构可以利用NGLess进行基因组学、转录组学等数据的分析和处理,支持药物开发、生物工程和医学研究领域。
  • 医学研究:在医学研究中,NGLess可以帮助分析大规模的测序数据,用于疾病研究、生物标志物鉴定等领域。

运行环境支持和运行方式

可安装平台:

  1. Linux

    • NGLess最常见且推荐的运行环境是Linux,特别是基于Debian或Red Hat的发行版。
    • 支持在各种Linux发行版上使用包管理器或源代码进行安装。
  2. macOS

    • 在macOS上也可以安装运行NGLess,但由于macOS和Linux之间的一些差异,可能需要进行特定配置或适应性调整。
  3. Windows

    • 尽管NGLess没有专门为Windows开发,但可以通过在Windows系统上安装虚拟机、Docker或Windows Subsystem for Linux(WSL)等方式,在Linux环境中运行NGLess。

安装方式:

  1. 源代码编译安装

    • 用户可以从NGLess的GitHub页面下载源代码,然后在目标系统上编译和安装。
    • 在Linux环境下,可以使用类似于make命令编译和安装。
  2. 包管理器安装

    • 某些Linux发行版可能提供NGLess的软件包,可以通过包管理器(如APT、yum等)直接安装。

运行方式:

  1. 命令行运行

    • NGLess主要以命令行方式运行,用户可以编写NGLess脚本文件(使用NGLess的DSL语言),然后通过命令行执行这些脚本。
  2. 交互式环境

    • NGLess也可以在交互式环境下运行,方便用户在实时中测试和调试代码。

 

NGLess的安装配置 

在 Linux 上安装 NGLess:

方法一:使用包管理器安装(例如在 Ubuntu 上)

在 Ubuntu 中可以使用 APT 包管理器安装 NGLess:

  1. 更新系统的软件包列表:

    sudo apt update
  2. 安装 NGLess:

    sudo apt install ngless
方法二:从源代码编译安装

从 GitHub 上下载 NGLess 源代码并编译安装:

  1. 安装编译所需的依赖项:

    sudo apt install build-essential cmake git
  2. 克隆 NGLess 仓库:

    git clone https://github.com/ngless-toolkit/ngless.git
  3. 进入目录并编译安装:

    cd ngless 
    make 
    sudo make install
方法三:conda环境安装

conda环境安装可参考:轻快小miniconda3在linux下的安装配置-centos9stream-Miniconda3 Linux 64-bit-CSDN博客

conda create -n ngless_env python=3
conda activate ngless
conda install -c bioconda ngless# 或mamba
mamba create -n ngless_env python=3
mamba activate negless
mamba install -c bioconda ngless
 方法四:docker安装
docker pull ngless/nglessdocker run -it ngless/ngless

注意事项:

  • 在 Docker 中运行 NGLess,您可以在容器中执行各种 NGLess 操作,但默认情况下,容器中的任何更改都不会保留。如果希望保留结果或输出文件,请将宿主机的文件夹与 Docker 容器中的文件夹进行挂载。

  • 若要将宿主机的文件夹挂载到 Docker 容器中,可以使用 -v 参数。例如:

    docker run -it -v /path/to/host/folder:/path/to/container/folder ngless/ngless
    

    这将把宿主机的 /path/to/host/folder 目录挂载到容器的 /path/to/container/folder 目录中。

在 macOS 上安装 NGLess:

在 macOS 上安装 NGLess 可以使用 Homebrew 或手动编译安装:

方法一:使用 Homebrew 安装
  1. 安装 Homebrew(如果尚未安装):

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 使用 Homebrew 安装 NGLess:

    brew install ngless
方法二:从源代码编译安装
  1. 安装 Xcode Command Line Tools:

    xcode-select --install
  2. 安装编译所需的依赖项(使用 Homebrew):

    brew install cmake
  3. 克隆 NGLess 仓库并编译安装:

    git clone https://github.com/ngless-toolkit/ngless.git 
    cd ngless 
    make 
    sudo make install

在 Windows 上安装 NGLess:

在 Windows 上可以通过虚拟机、Docker 或 Windows Subsystem for Linux(WSL)来运行 NGLess。以下是使用 WSL 安装 NGLess 的步骤:

  1. 启用 WSL 和安装 Linux 发行版(如 Ubuntu):请参考 Microsoft 官方文档中关于 WSL 的说明和安装步骤。

  2. 安装 NGLess(可参考前述 Linux 安装方法):在 WSL 中按照 Linux 的安装步骤进行操作。

NGLess常用功能函数

NGLess Builtin Functions — NGLess 1.5.0 documentation

NGLess是一个用于处理和分析NGS(Next-Generation Sequencing)数据的编程语言和工具。下面是NGLess的一些常用函数和示例代码:

count() - 计算一个序列文件中的序列数量

input = fastq('input.fastq.gz')
reads = count(input)

 write() - 将结果写入到一个输出文件

input = fastq('input.fastq.gz')
write(input, ofile='output.fastq')

parse_fastq() - 解析FASTQ文件

input = parse_fastq('input.fastq')

select() - 选择符合条件的序列

input = fastq('input.fastq.gz')
selected = select(input, keep_if=(length >= 50))

reject() - 拒绝符合条件的序列

input = fastq('input.fastq.gz')
filtered = reject(input, keep_if=(mean_quality < 20))

substrim() - 对序列进行质量截断

input = fastq('input.fastq.gz')
trimmed = substrim(input, cutoff=20)

map() - 对序列进行比对

input = fastq('input.fastq.gz')
index = faidx('reference.fasta')
mapped = map(input, index)

unmapped_only() - 选择未比对的序列

input = fastq('input.fastq.gz')
mapped = map(input, index)
unmapped = unmapped_only(mapped)

group_by() - 按照指定的键值进行分组

input = ... # 一些数据
grouped = group_by(input, key='sample')

sort() - 对序列进行排序

input = ... # 一些数据
sorted_data = sort(input, by='value', reverse=True)

mean() - 计算一组数字的平均值

data = [1, 2, 3, 4, 5]
avg = mean(data)

median() - 计算一组数字的中位数

data = [1, 2, 3, 4, 5]
med = median(data)

sum() - 计算一组数字的总和

data = [1, 2, 3, 4, 5]
total = sum(data)

range() - 生成一个整数序列

numbers = range(1, 10)

length() - 计算序列或字符串的长度

seq = 'ATCG'
len = length(seq)

reverse_complement() - 对序列取反补

seq = 'ATCG'
rc_seq = reverse_complement(seq)

translate() - 将DNA序列翻译成氨基酸序列

dna_seq = 'ATGCTGAACTG'
aa_seq = translate(dna_seq)

gc_content() - 计算序列的GC含量

seq = 'ATCGATCG'
gc = gc_content(seq)

subsample() - 对序列进行子抽样

input = fastq('input.fastq.gz')
subsampled = subsample(input, fraction=0.1)

merge() - 合并两个或多个序列文件

input1 = fastq('input1.fastq.gz')
input2 = fastq('input2.fastq.gz')
merged = merge(input1, input2)

average_quality() - 计算序列的平均质量

input = fastq('input.fastq.gz')
avg_qual = average_quality(input)

trim_polya() - 对序列进行poly(A)尾修剪

input = fastq('input.fastq.gz')
trimmed = trim_polya(input)

annotate() - 对序列进行注释

input = ... # 一些序列
annotation = ... # 一些注释信息
annotated = annotate(input, with=annotation)

to_fasta() - 将序列文件转换为FASTA格式

input = fastq('input.fastq.gz')
fasta = to_fasta(input)

to_fastq() - 将序列文件转换为FASTQ格式

input = fasta('input.fasta')
fastq = to_fastq(input)

reverse() - 对序列进行反转

seq = 'ATCG'
reversed_seq = reverse(seq)

complement() - 对序列进行互补

seq = 'ATCG'
comp_seq = complement(seq)

is_paired() - 判断序列是否成对出现

input = fastq('input.fastq.gz')
paired = is_paired(input)

pair() - 对成对的序列进行配对

input = fastq('input.fastq.gz')
paired = pair(input)

is_unique() - 判断序列是否唯一

input = fastq('input.fastq.gz')
unique = is_unique(input)

unique_only() - 选择唯一的序列

input = fastq('input.fastq.gz')
unique = unique_only(input)

random() - 生成一个随机数

rand_num = random()

shuffle() - 对序列进行随机重排

input = fastq('input.fastq.gz')
shuffled = shuffle(input)

annotate_gff() - 对序列进行基因组注释

input = fasta('input.fasta')
gff_file = 'annotation.gff'
annotated = annotate_gff(input, gff_file)

align() - 对序列进行局部或全局比对

input = fasta('input.fasta')
ref_seq = fasta('reference.fasta')
alignment = align(input, ref_seq)

align_sam() - 对序列进行SAM格式比对

input = fasta('input.fasta')
sam_file = 'alignment.sam'
aligned = align_sam(input, sam_file)

align_bam() - 对序列进行BAM格式比对

input = fasta('input.fasta')
bam_file = 'alignment.bam'
aligned = align_bam(input, bam_file)

compress() - 对文件进行压缩

input_file = 'input.txt'
compressed_file = compress(input_file, format='gzip')

decompress() - 对文件进行解压缩

compressed_file = 'input.gz'
decompressed_file = decompress(compressed_file)

distance() - 计算两个序列之间的距离

seq1 = 'ATCG'
seq2 = 'AGCG'
dist = distance(seq1, seq2)

intersect() - 计算两个序列集合的交集

input1 = fasta('input1.fasta')
input2 = fasta('input2.fasta')
intersected = intersect(input1, input2)

union() - 计算两个序列集合的并集

input1 = fasta('input1.fasta')
input2 = fasta('input2.fasta')
unioned = union(input1, input2)

subtract() - 计算两个序列集合的差集

input1 = fasta('input1.fasta')
input2 = fasta('input2.fasta')
subtracted = subtract(input1, input2)

average() - 计算一组数字的平均值

data = [1, 2, 3, 4, 5]
avg = average(data)

maximum() - 计算一组数字的最大值

data = [1, 2, 3, 4, 5]
max_val = maximum(data)

minimum() - 计算一组数字的最小值

data = [1, 2, 3, 4, 5]
min_val = minimum(data)

standard_deviation() - 计算一组数字的标准差

data

常见生信分析代码片段

下面是常用的NGless功能函数处理宏基因组数据的代码片段:

从FASTQ文件中过滤低质量的reads,并将结果输出到新文件中:

ngless "1.0"
input = fastq('input.fq')
preprocess(input, phred=33) using |read|:if read.avg_qual < 20:discard
input | keep | add_sequence_length | sum | write(`filtered.fq`, compression=Fastq)

根据OTU表将reads映射到参考数据库,并生成OTU表:

ngless "1.0"
input = fastq('input.fq')
reference = fasta('ref.fasta')mapped = map(input, reference, exact=False, sensitive=True)
otu_table(mapped, reference) | write(`otu_table.txt`, format="csv")

对OTU表进行物种注释,并生成注释表:

ngless "1.0"
otu_table = csv('otu_table.csv')
annotation_db = csv('annotation_db.csv')annotated = annotate_species(otu_table, annotation_db)
annotated | write(`annotated_otu_table.csv`, format="csv")

根据OTU丰度信息生成热图:

ngless "1.0"
otu_table = csv('otu_table.csv')heatmap(otu_table) | write(`heatmap.png`, format="png")

对样品进行稀释,并生成稀释后的OTU表:

ngless "1.0"
otu_table = csv('otu_table.csv')
diluted = dilute(otu_table, factor=10)
diluted | write(`diluted_otu_table.csv`, format="csv")

对OTU表进行组间差异分析,使用差异显著性检验方法:

ngless "1.0"
otu_table = csv('otu_table.csv')
groups = csv('groups.csv')differential(abundance(otu_table), groups) | write(`differential_analysis.csv`, format="csv")

对样品进行Beta多样性分析,并生成PCoA图:

ngless "1.0"
otu_table = csv('otu_table.csv')pcoa_table = pcoa(otu_table)
pcoa_table | plot(`pcoa.png`, format="png")

对OTU表进行功能注释,并生成功能注释表:

ngless "1.0"
otu_table = csv('otu_table.csv')
gene_db = csv('gene_db.csv')annotated = annotate_functions(otu_table, gene_db)
annotated | write(`annotated_otu_table.csv`, format="csv")

根据OTU表进行物种多样性分析,并生成物种多样性指数表:

ngless "1.0"
otu_table = csv('otu_table.csv')diversity_indices(otu_table) | write(`diversity_indices.csv`, format="csv")

对样品进行Alpha多样性分析,并生成稀释曲线图:

ngless "1.0"
otu_table = csv('otu_table.csv')alpha_table = alpha_diversity(otu_table)
alpha_table | plot(`alpha_diversity.png`, format="png")

对OTU表进行物种丰度分析,并生成物种丰度柱状图:

ngless "1.0"
otu_table = csv('otu_table.csv')species_abundance(otu_table) | plot(`species_abundance.png`, format="png")

根据OTU表进行共生网络分析,并生成共生网络图:

ngless "1.0"
otu_table = csv('otu_table.csv')cooccurrence_network(otu_table) | plot(`cooccurrence_network.png`, format="png")

对样品进行微生物组成分析,并生成样品组成饼图:

ngless "1.0"
otu_table = csv('otu_table.csv')sample_composition(otu_table) | plot(`sample_composition.png`, format="png")

对OTU表进行代谢通路分析,并生成代谢通路富集柱状图:

ngless "1.0"
otu_table = csv('otu_table.csv')
pathway_db = csv('pathway_db.csv')enriched_pathways(otu_table, pathway_db) | plot(`enriched_pathways.png`, format="png")

对OTU表进行进化分析,并生成进化树:

ngless "1.0"
otu_table = csv('otu_table.csv')evolutionary_analysis(otu_table) | plot(`evolutionary_tree.png`, format="png")

将多个OTU表进行合并:

ngless "1.0"
otu_table1 = csv('otu_table1.csv')
otu_table2 = csv('otu_table2.csv')combined = merge(otu_table1, otu_table2)
combined | write(`merged_otu_table.csv`, format="csv")

对OTU表进行样品分类,并生成分类树:

ngless "1.0"
otu_table = csv('otu_table.csv')taxonomy_tree(otu_table) | plot(`taxonomy_tree.png`, format="png")

根据OTU表进行功能富集分析,并生成功能富集柱状图:

ngless "1.0"
otu_table = csv('otu_table.csv')
gene_set_db = csv('gene_set_db.csv')enriched_functions(otu_table, gene_set_db) | plot(`enriched_functions.png`, format="png")

对样品进行Gamma多样性分析,并生成Gamma多样性曲线:

ngless "1.0"
otu_table = csv('otu_table.csv')gamma_table = gamma_diversity(otu_table)
gamma_table | plot(`gamma_diversity.png`, format="png")

对OTU表进行进化树构建,并生成进化树:

ngless "1.0"
otu_table = csv('otu_table.csv')phylogenetic_tree(otu_table) | plot(`phylogenetic_tree.png`, format="png")

请注意,这些代码片段仅为示例,并不一定适用于所有NGless版本和数据集。在实际使用时,请根据具体情况进行修改和调整。

NGLess的使用示例

人类肠道宏基因组学的功能和分类分析

步骤概述:

  1. 准备数据:获取并准备用于分析的原始测序数据。
  2. 质量控制和过滤:对原始数据进行质量控制、去除低质量序列和去除宿主DNA等。
  3. 人类肠道宏基因组分类:对数据进行分类,识别宿主肠道微生物。
  4. 功能注释:对宏基因组数据进行功能注释,识别和分析肠道微生物的功能特征。

详细步骤:

步骤 1: 准备数据
  • 下载并准备用于肠道宏基因组学的原始测序数据,例如来自人类肠道样本的元组装数据(metagenomic sequencing data)。
步骤 2: 质量控制和过滤
  • 使用 NGLess 进行质量控制和过滤,例如使用 FastQC 进行质量评估,然后使用 NGLess 进行质量过滤:
  • ngless 'input = fastq('data.fastq.gz')preprocess(input, keep_singles=False) using |read|:if len(read) < 45:discard;elif count(N) > 0.1:discard;else:keep;
    
步骤 3: 人类肠道宏基因组分类
  • 使用 NGLess 和相应的数据库进行宏基因组分类。示例中使用 Silva 数据库进行分类:
ngless 'input = fastq('filtered_data.fastq.gz')preprocessed = preprocess(input)m1 = map(preprocessed, reference='silva')'
步骤 4: 功能注释
  • 对宏基因组数据进行功能注释,例如使用 Diamond 或者 BLAST 进行序列比对,并使用相应的数据库(例如KEGG、COG、GO等)进行功能注释:
ngless 'input = fastq('filtered_data.fastq.gz')preprocessed = preprocess(input)m1 = map(preprocessed, reference='silva')annotated = annotate(m1, data='kegg')'

注意事项:

  • 这些是一些基本步骤,具体的分析流程和参数设置可能会因实验设计和所使用的数据库而有所不同。
  • 示例代码中使用了 NGLess 的 DSL 语法,实际使用时可能需要根据具体的数据和数据库进行调整和优化。
  • 在执行代码之前,请确保您已了解数据处理和分析的需求,并正确设置参数以获得最佳结果。

 全流程脚本

ngless "1.0"
import "parallel" version "0.6"
import "mocat" version "0.0"
import "motus" version "0.1"
import "igc" version "0.0"samples = readlines('igc.demo.short')
sample = lock1(samples)input = load_fastq_directory(sample)input = preprocess(input, keep_singles=False) using |read|:read = substrim(read, min_quality=25)if len(read) < 45:discardmapped = map(input, reference='hg19')mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=90, action={unmatch})if mr.flag({mapped}):discardinput = as_reads(mapped)mapped = map(input, reference='igc', mode_all=True)counts = count(mapped,features=['KEGG_ko', 'eggNOG_OG'],normalization={scaled})collect(counts,current=sample,allneeded=samples,ofile='igc.profiles.txt')mapped = map(input, reference='motus', mode_all=True)counted = count(mapped, features=['gene'], multiple={dist1})motus_table = motus(counted)
collect(motus_table,current=sample,allneeded=samples,ofile='motus-counts.txt')

案例分析脚本demo

https://ngless.embl.de/_static/gut-metagenomics-tutorial-presentation/scripts/1_preproc.ngl

ngless "0.0"
import "mocat" version "0.0"input = load_mocat_sample('SAMN05615097.short')preprocess(input, keep_singles=False) using |read|:read = substrim(read, min_quality=25)if len(read) < 45:discardwrite(input, ofile='preproc.fq.gz')

https://ngless.embl.de/_static/gut-metagenomics-tutorial-presentation/scripts/2_map_hg19.ngl

ngless "0.0"
import "mocat" version "0.0"input = load_mocat_sample('SAMN05615097.short')preprocess(input, keep_singles=False) using |read|:read = substrim(read, min_quality=25)if len(read) < 45:discardmapped = map(input, reference='hg19')mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=90, action={unmatch})if mr.flag({mapped}):discard
write(mapped, ofile='mapped.bam')

https://ngless.embl.de/_static/gut-metagenomics-tutorial-presentation/scripts/3_taxprofile.ngl

ngless "0.0"
import "mocat" version "0.0"
import "motus" version "0.1"
import "specI" version "0.1"input = load_mocat_sample('SAMN05615097.short')preprocess(input, keep_singles=False) using |read|:read = substrim(read, min_quality=25)if len(read) < 45:discardmapped = map(input, reference='hg19')mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=90, action={unmatch})if mr.flag({mapped}):discardinput = as_reads(mapped)mapped = map(input, reference='motus', mode_all=True)
mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=97, action={drop})if not mr.flag({mapped}):discardcounted = count(mapped, features=['gene'], multiple={dist1})write(motus(counted),ofile='motus.counts.txt')input = as_reads(mapped)mapped = map(input, reference='refmg')
mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=97, action={drop})if not mr.flag({mapped}):discardwrite(count(mapped,features=['species'],include_minus1=True),ofile='species.raw.counts.txt')

https://ngless.embl.de/_static/gut-metagenomics-tutorial-presentation/scripts/4_parallel.ngl

ngless "0.0"
import "parallel" version "0.0"
import "mocat" version "0.0"
import "motus" version "0.1"
import "specI" version "0.1"samples = readlines('igc.demo.short')
sample = lock1(samples)input = load_mocat_sample(sample)preprocess(input, keep_singles=False) using |read|:read = substrim(read, min_quality=25)if len(read) < 45:discardmapped = map(input, reference='hg19')mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=90, action={unmatch})if mr.flag({mapped}):discardinput = as_reads(mapped)mapped = map(input, reference='motus', mode_all=True)counted = count(mapped, features=['gene'], multiple={dist1})motus_table = motus(counted)
collect(motus_table,current=sample,allneeded=samples,ofile='motus-counts.txt')input = as_reads(mapped)mapped = map(input, reference='refmg')
mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=97, action={drop})if not mr.flag({mapped}):discardcollect(count(mapped,features=['species'],include_minus1=True),current=sample,allneeded=samples,ofile='species.raw.counts.txt')

https://ngless.embl.de/_static/gut-metagenomics-tutorial-presentation/scripts/5_w_igc.ngl

ngless "0.0"
import "parallel" version "0.0"
import "mocat" version "0.0"
import "motus" version "0.1"
import "igc" version "0.0"
import "specI" version "0.1"samples = readlines('igc.demo.short')
sample = lock1(samples)input = load_mocat_sample(sample)preprocess(input, keep_singles=False) using |read|:read = substrim(read, min_quality=25)if len(read) < 45:discardmapped = map(input, reference='hg19')mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=90, action={unmatch})if mr.flag({mapped}):discardinput = as_reads(mapped)mapped = map(input, reference='igc', mode_all=True)counts = count(mapped,features=['KEGG_ko', 'eggNOG_OG'],normalization={scaled})collect(counts,current=sample,allneeded=samples,ofile='igc.profiles.txt')mapped = map(input, reference='motus', mode_all=True)counted = count(mapped, features=['gene'], multiple={dist1})motus_table = motus(counted)
collect(motus_table,current=sample,allneeded=samples,ofile='motus-counts.txt')input = as_reads(mapped)mapped = map(input, reference='refmg')
mapped = select(mapped) using |mr|:mr = mr.filter(min_match_size=45, min_identity_pc=97, action={drop})if not mr.flag({mapped}):discardcollect(count(mapped,features=['species'],include_minus1=True),current=sample,allneeded=samples,ofile='species.raw.counts.txt')

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

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

相关文章

机器翻译:跨越语言边界的智能大使

导言 机器翻译作为人工智能领域的瑰宝&#xff0c;正在以前所未有的速度和精度&#xff0c;为全球沟通拓展新的可能性。本文将深入研究机器翻译的技术原理、应用场景以及对语言交流未来的影响。 1. 简介 机器翻译是一项致力于通过计算机自动将一种语言的文本翻译成另一种语言的…

[Unity]关于Unity接入Appsflyer并且打点支付

首先需要去官方下载Appsflyer的UnityPackage 链接在这afPackage 然后导入 导入完成 引入此段代码 using AppsFlyerSDK; using System.Collections; using System.Collections.Generic; using UnityEngine;public class AppflysManager : MonoBehaviour {public static App…

测试总监给我分享的《接口自动化测试》总结,让我成功的入门接口自动化门槛......

前两天在测试技术交流群里&#xff0c;听了一位字节跳动的测试总监分享的接口自动化测试的内容&#xff0c;对接口自动化更加了解了&#xff0c;也为自己接下来在公司实施接口自动化项目提供了思路。 前言 自动化测试&#xff0c;算是近几年比较火热的一个话题&#xff0c;当…

现代C++ 实现单例模式

传统写法有什么问题 如果你了解过单例模式&#xff0c;双重检查锁定模式&#xff08;Double-Checked Locking Pattern&#xff0c;后文简称DCLP&#xff09;的写法你一定不会陌生&#xff0c;甚至你或许认为它是最正确的代码。 class Singleton { public://获取单例Singleton…

解决:Component name “index“ should always be multi-word

原因 要求组件名称以驼峰格式命名&#xff0c;自定义组件名称应该由多单纯组成&#xff0c;防止和html标签冲突&#xff0c;所以index.vue 会报错 解决 1、按照规则驼峰格式&#xff0c;如&#xff1a;appIndex.vue 2、若有.eslintrc.js文件&#xff0c;并在规则中(rules)关…

数据挖掘-08-基于Python实现时间序列分析建模(ARIMA 模型)(包括数据和代码)

文章目录 0. 数据代码下载1. 背景描述2. 预测目的3. 数据总览4. 数据预处理4.1数据描述性统计与清洗a. 导入程序库b. 读取数据c. 查看统计信息和空值d. 查看是否有重复数据以及清理重复数据e. 空值清理f. 针对清洗后的数据进行统计分析 5. 探索性数据分析5.1 数据分析 6. 构建 …

猫粮哪个牌子质量好性价比高?盘点十款主食冻干猫粮品牌排行榜!

在过去的100多年里&#xff0c;猫咪主食市场一直被膨化猫粮主导。然而&#xff0c;随着猫咪频频出现猝死、失明、发育不良以及营养不良等问题&#xff0c;猫主人们开始质疑膨化粮是否最适合猫咪。于是&#xff0c;从上世纪90年代开始&#xff0c;出现了生骨肉喂养。生骨肉确实是…

网络安全——基于Snort的入侵检测实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a; 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 七、实验截图&#xff1a; 一、实验目的要求&#xff1a; 1、掌握…

一、win10+yolov8+anaconda环境部署

1、安装anaconda &#xff08;1&#xff09;打开aonconda下载地址&#xff1a;https://www.anaconda.com/download&#xff0c;点击download下载。 2、下载完成后&#xff0c;双击打开&#xff0c;点击Next&#xff0c;I Agree&#xff0c;选择just me&#xff1b; 3、勾选…

Spring上下文之注解模块ConfigurationMethod

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

飞天使-docker知识点8-docker的资源限制

文章目录 容器资源限制示例 容器资源限制 Docker提供了多种资源限制的方式&#xff0c;可以根据应用程序的需求和系统资源的可用性进行选择。以下是一些常见的Docker资源限制及其使用情况&#xff1a;CPU限制&#xff1a;通过设置CPU的配额&#xff08;quota&#xff09;和周期…

网络(九)CanSM及达芬奇配置

【小猫爪】AUTOSAR学习笔记05-Communication Stack之CanSM模块-CSDN博客 上链接讲的非常好。 CanSM提供的函数。 C CanSM使用的函数&#xff1a;

spring mail 邮件发送demo

首先配置号邮件服务器&#xff08;我用的是126邮箱&#xff09;&#xff0c;获取密钥&#xff1a; 进入下图的【邮箱中心】->点击右侧的齿轮按钮 接着&#xff0c;开启 下图位置 的 POP3/SMTP&#xff08;我当时点击开启时&#xff0c;需要手机扫码认证下&#xff09; 最后…

putIfAbsent、computeIfAbsent、computeIfPresent

putIfAbsent 判断是否存在&#xff0c;不存在则设置 hashmap.putIfAbsent(K key, V value) 例子如下&#xff1a; public static void main(String[] args) {//hashmap.putIfAbsent(K key, V value)HashMap hashMap Maps.newHashMap();hashMap.put("aa","on…

ConnectionError怎么解决

文章目录 解决思路lz的具体解决过程 解决思路 这个错误表明在尝试加载评价指标时&#xff0c;代码试图从 huggingface 下载文件&#xff0c;但由于代理错误而无法连接。 为了解决这个问题&#xff0c;你可以尝试以下几个步骤&#xff1a; 1.设置代理&#xff1a; 如果你在使…

Zabbix监控系统部署与管理

zabbix介绍 zabbix是⼀个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的免费开源解决⽅案。zabbix能监视各种⽹络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix构成 zabbix由…

Windows进程机制

进程 进程要做任何事情&#xff0c;必须让一个线程在它的上下文运行。该线程负责执行进程地址空间包含的代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。当系统创建一个进程的时候&#xff0c;会自动为进程创建第一个线程&#xff0c;这称为主线程&#xff08;…

命令调用先构建hashTable

GPT 代码改 #include <stdio.h> #include <stdlib.h> #include <string.h>#define TABLE_SIZE 256struct Node {char *key;void *value;struct Node *next; };struct HashTable {struct Node *table[TABLE_SIZE]; };void initHashTable(struct HashTable *ha…

GPT-AI导航

1. https://ai-bot.cn/ https://ai-bot.cn/