今天来学习下这个新的方法,主要是针对单细胞BCR
首先安装singularity
Singularity 是一种容器化技术,类似于 Docker,专为高性能计算(HPC)和科学研究领域的需求设计。它允许用户在不同环境中运行和移植应用程序,而无需担心底层系统的兼容性问题。Singularity 的核心目标是解决科学计算中的依赖和兼容性问题,使用户能够方便地在不同的系统(如 HPC 集群、云端、工作站等)上运行一致的工作环境。
安装singularity
sudo apt-get update && sudo apt-get install -y \build-essential \libssl-dev \uuid-dev \libgpgme11-dev \squashfs-tools \libseccomp-dev \pkg-config
当然yum的安装也是有的
sudo yum update -y && \sudo yum groupinstall -y 'Development Tools' && \sudo yum install -y \openssl-devel \libuuid-devel \libseccomp-devel \wget \squashfs-tools
然后安装GO
export VERSION=1.11 OS=linux ARCH=amd64 && \wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz && \sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \rm go$VERSION.$OS-$ARCH.tar.gz
然后,为 Go 设置你的环境
echo 'export GOPATH=${HOME}/go' >> ~/.bashrc && \echo 'export PATH=/usr/local/go/bin:${PATH}:${GOPATH}/bin' >> ~/.bashrc && \source ~/.bashrc
要确保 Singularity 源代码下载到适当的目录,请使用这些命令。
go get -d github.com/sylabs/singularity
#现在检查您想要安装的 Singularity 版本。
export VERSION=v3.0.3 # or another tag or branch if you like && \cd $GOPATH/src/github.com/sylabs/singularity && \git fetch && \git checkout $VERSION # omit this command to install the latest bleeding edge code from master
到这里GO的配置和singularity都已经安装完成
回到我们的BCR 继续填坑满谷,测试singularity安装是否成功
如果你安装成功了,直接拉到最后 从 这句话开始看—有两种形式哈(上面奇点下载完成可以直接尝试,看看行不行,不行你就按照我的一步步来)—
如果不行你就回来按照下面一步步来把
#或许你看了下面的重注释的高级分析,我要告诉你的是有坑
顺着这个连教程你都搞不定
我出现了跟他一样的问题
Assigning genes : 0%| | 0/1 [00:00<?, ?it/s]
USAGEigblastn [-h] [-help] [-import_search_strategy filename][-export_search_strategy filename] [-germline_db_V germline_database_name][-num_alignments_V int_value] [-germline_db_V_seqidlist filename][-germline_db_D germline_database_name] [-num_alignments_D int_value][-germline_db_D_seqidlist filename][-germline_db_J germline_database_name] [-num_alignments_J int_value][-germline_db_J_seqidlist filename] [-auxiliary_data filename][-min_D_match min_D_match] [-D_penalty D_penalty] [-J_penalty J_penalty][-num_clonotype num_clonotype] [-clonotype_out clonotype_out][-allow_vdj_overlap] [-organism germline_origin][-domain_system domain_system] [-ig_seqtype sequence_type][-focus_on_V_segment] [-extend_align5end] [-min_V_length Min_V_Length][-min_J_length Min_J_Length] [-show_translation] [-db database_name][-dbsize num_letters] [-gilist filename] [-seqidlist filename][-negative_gilist filename] [-negative_seqidlist filename][-entrez_query entrez_query] [-db_soft_mask filtering_algorithm][-db_hard_mask filtering_algorithm] [-subject subject_input_file][-subject_loc range] [-query input_file] [-out output_file][-evalue evalue] [-word_size int_value] [-gapopen open_penalty][-gapextend extend_penalty] [-qcov_hsp_perc float_value][-max_hsps int_value] [-xdrop_ungap float_value] [-xdrop_gap float_value][-xdrop_gap_final float_value] [-searchsp int_value][-sum_stats bool_value] [-penalty penalty] [-reward reward] [-no_greedy][-ungapped] [-culling_limit int_value] [-best_hit_overhang float_value][-best_hit_score_edge float_value] [-window_size int_value][-off_diagonal_range int_value] [-lcase_masking] [-query_loc range][-strand strand] [-parse_deflines] [-outfmt format] [-show_gis][-num_descriptions int_value] [-num_alignments int_value][-line_length line_length] [-max_target_seqs num_sequences][-num_threads int_value] [-remote] [-version]DESCRIPTIONNucleotide-Nucleotide BLAST for immunoglobulin sequences 2.6.1+Use '-help' to print detailed descriptions of command line arguments
========================================================================Error: Unknown argument: "c_region_db"
Error: (CArgException::eInvalidArg) Unknown argument: "c_region_db"
USAGEigblastn [-h] [-help] [-import_search_strategy filename][-export_search_strategy filename] [-germline_db_V germline_database_name][-num_alignments_V int_value] [-germline_db_V_seqidlist filename][-germline_db_D germline_database_name] [-num_alignments_D int_value][-germline_db_D_seqidlist filename][-germline_db_J germline_database_name] [-num_alignments_J int_value][-germline_db_J_seqidlist filename] [-auxiliary_data filename][-min_D_match min_D_match] [-D_penalty D_penalty] [-J_penalty J_penalty][-num_clonotype num_clonotype] [-clonotype_out clonotype_out][-allow_vdj_overlap] [-organism germline_origin][-domain_system domain_system] [-ig_seqtype sequence_type][-focus_on_V_segment] [-extend_align5end] [-min_V_length Min_V_Length][-min_J_length Min_J_Length] [-show_translation] [-db database_name][-dbsize num_letters] [-gilist filename] [-seqidlist filename][-negative_gilist filename] [-negative_seqidlist filename][-entrez_query entrez_query] [-db_soft_mask filtering_algorithm][-db_hard_mask filtering_algorithm] [-subject subject_input_file][-subject_loc range] [-query input_file] [-out output_file][-evalue evalue] [-word_size int_value] [-gapopen open_penalty][-gapextend extend_penalty] [-qcov_hsp_perc float_value][-max_hsps int_value] [-xdrop_ungap float_value] [-xdrop_gap float_value][-xdrop_gap_final float_value] [-searchsp int_value][-sum_stats bool_value] [-penalty penalty] [-reward reward] [-no_greedy][-ungapped] [-culling_limit int_value] [-best_hit_overhang float_value][-best_hit_score_edge float_value] [-window_size int_value][-off_diagonal_range int_value] [-lcase_masking] [-query_loc range][-strand strand] [-parse_deflines] [-outfmt format] [-show_gis][-num_descriptions int_value] [-num_alignments int_value][-line_length line_length] [-max_target_seqs num_sequences][-num_threads int_value] [-remote] [-version]DESCRIPTIONNucleotide-Nucleotide BLAST for immunoglobulin sequences 2.6.1+Use '-help' to print detailed descriptions of command line arguments
========================================================================Error: Unknown argument: "c_region_db"
Error: (CArgException::eInvalidArg) Unknown argument: "c_region_db"
ERROR> Input 10kPBMC_CFCOV/dandelion/tmp/all_contig_igblast.fmt7 does not exist.ERROR> Input 10kPBMC_CFCOV/dandelion/tmp/all_contig_igblast.fmt7 does not exist.**BLAST Database error: Error: Not a valid version 4 database.**
**BLAST Database error: Error: Not a valid version 4 database.**
Assigning genes : 100%|██████████| 1/1 [00:17<00:00, 17.14s/it]
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "~/miniconda3/envs/dandelion/lib/python3.10/site-packages/sc_dandelion-0.3.9.dev4+g3faaadd-py3.10.egg/dandelion/preprocessing/_preprocessing.py", line 1150, in reannotate_genesrename_dandelion(File "~/miniconda3/envs/dandelion/lib/python3.10/site-packages/sc_dandelion-0.3.9.dev4+g3faaadd-py3.10.egg/dandelion/utilities/_io.py", line 1016, in rename_dandelionfp = filePath.parent / filePath.name.rsplit(ends_with)[0]
AttributeError: 'NoneType' object has no attribute 'parent'OS information
LinuxVersion information
dandelion==0.3.9.dev4 pandas==2.2.2 numpy==1.26.4 matplotlib==3.9.2 networkx==2.7 scipy==1.14.1Additional context
I have retried in a new window, and now instead of the errors with asterisks above, I got current error. Seems like a blast and igblast confusion?BLAST Database error: No alias or index file found for nucleotide database [home/dandelion/Github/dandelion/container/database/igblast/database/imgt_human_tr_j] in search path [home/dandelion:home/dandelion/Github/dandelion/container/database/blast:]
BLAST Database error: No alias or index file found for nucleotide database [home/dandelion/Github/dandelion/container/database/igblast/database/imgt_human_tr_d] in search path [home/dandelion:home/dandelion/Github/dandelion/container/database/blast:]
接着我就要告诉你还需要安装blast+ and igblast.
作者回复也是让你安装最新的版本
最后结果新的问题来了
I have upgraded both, the error above got solved, but now getting errors as below:Assigning genes : 0%| | 0/1 [00:00<?, ?it/s]
BLAST query/options error: Germline annotation database human/human_TR_V could not be found in [internal_data] directory
Please refer to the BLAST+ user manual.
BLAST query/options error: Germline annotation database human/human_TR_V could not be found in [internal_data] directory
Please refer to the BLAST+ user manual.
ERROR> Input 10kPBMC_CFCOV/dandelion/tmp/all_contig_igblast.fmt7 does not exist.ERROR> Input 10kPBMC_CFCOV/dandelion/tmp/all_contig_igblast.fmt7 does not exist.BLAST Database error: Database memory map file error
BLAST Database error: Database memory map file error
Assigning genes : 100%|██████████| 1/1 [00:09<00:00, 9.30s/it]
Traceback (most recent call last):
File "", line 1, in
File "home/miniconda3/envs/dandelion/lib/python3.10/site-packages/sc_dandelion-0.3.9.dev4+g3faaadd-py3.10.egg/dandelion/preprocessing/_preprocessing.py", line 1150, in reannotate_genes
rename_dandelion(
File "home/miniconda3/envs/dandelion/lib/python3.10/site-packages/sc_dandelion-0.3.9.dev4+g3faaadd-py3.10.egg/dandelion/utilities/_io.py", line 1016, in rename_dandelion
fp = filePath.parent / filePath.name.rsplit(ends_with)[0]
AttributeError: 'NoneType' object has no attribute 'parent'I have noticed similar issues mentioned in tracer repo and recently in #382. I tried to specify igblast_db parameter either as internal_data in the container folder or home/miniconda3/pkgs/igblast-1.22.0-h6a68c12_1/bin, but it did not work. Can you provide detailed guidance on how to solve this problem? Thanks.
最后如何解决的呢
问题的链接你们可以自己看最后解决的方式
我的策略安装了最新的 igblast 和 blast ,然后按照运行奇点容器,所有这些都将变得简单 - 它不需要 anndata 进行预处理
当然我也附上安装的代码
wget -c https://ftp.ncbi.nih.gov/blast/executables/igblast/release/LATEST/ncbi-igblast-1.22.0-x64-linux.tar.gz
tar -xvf ncbi-igblast-1.22.0-x64-linux.tar.gz
nano ~/.bashrc
export PATH=$PATH:/home/sayhello/ncbi-igblast-1.22.0/bin
#然后ctrl+o 写入 然后回车 最后ctrl+x 退出
source ~/.bashrc#blast 操作根上面一样 wget -c https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.16.0+-x64-linux.tar.gz#我给了网址后面的操作跟igblast 一样
接着我们下载依赖的数据集,作者已经整理好了,建议先下载后执行shell
# bash/shell
echo "export GERMLINE=$HOME/Documents/Github/dandelion/container/database/germlines/" >> ~/.bash_profile
echo "export IGDATA=$HOME/Documents/Github/dandelion/container/database/igblast/" >> ~/.bash_profile
echo "export BLASTDB=$HOME/Documents/Github/dandelion/container/database/blast/" >> ~/.bash_profile
# reload
source ~/.bash_profile
实际上你可以下载
https://github.com/zktuong/dandelion/tree/master/container/database
这个是上面的shell对应的文件库,你可以按照shell对应的路径,然后下载到对于的路径然后配置即可
我们还没开始安装包作后续的分析
conda create -n VDJ_BCR python=3.10
conda activate VDJ_BCR
conda install -c conda-forge scanpy python-igraph leidenalg
pip install scanpy
conda install -c conda-forge graph-tool
pip install sc-dandelion
一定要先安装scanpy,看见新的安装了方式了,可以尝试下
随后在这个VDJ_BCR的环境中装个R,装以下的R包,这个装包是玄学,报错就是缺依赖,依赖下载不下来,可以根据下载失败的链接直接网页下载后,本地安装,重复安装就可以
install.packages(c("optparse", "airr", "shazam", "alakazam", "tigger"))
最后终于可以重新注释了,这个包有点麻烦,我是把所有的坑都踩完了,我感觉直接singularity也会成功,但是我没有尝试
singularity pull library://kt16/default/sc-dandelion:latest
singularity shell --writable-tmpfs -B $PWD sc-dandelion_latest.sif
本地会有一个sif的文件
把你的单细胞bcr的数据安装我的形式放在一个目录下
有两种形式哈(上面奇点下载完成可以直接尝试,看看行不行,不行你就按照我的一步步来)
我们先讲第一种
就是每个文件里面都是all_contig_annotations.csv和all_contig.fasta
最重要的看看原始的前处理脚本
我直接把参数的含义说明
parse_args() 函数的目的是通过命令行解析参数,允许用户灵活配置脚本的运行方式。该函数使用 argparse.ArgumentParser() 来定义各种选项,并将命令行参数转换为程序中的变量。以下是对每个参数的详细解释:--meta:类型: 字符串 (文件路径)
说明: 可选的元数据 CSV 文件。文件的第一列应该包含样本 ID,且这些 ID 应与当前工作目录下的文件夹名匹配。可选的 "prefix" 和 "suffix" 列可用于修改条形码,还有一个 "individual" 列用于分组样本。如果没有提供此文件,程序将假定所有样本都将被一起分析。
用途: 用于指定每个样本的相关信息,如条形码前缀或后缀,以及是否对样本进行分组。
--chain:类型: 字符串,默认值为 "IG"
说明: 数据类型,接受两种类型 "IG"(免疫球蛋白链)或 "TR"(T 细胞受体链)。两者的处理管道不同。默认是 "IG"。
用途: 确定所处理的链类型,从而选择相应的预处理和重注释步骤。
--org:类型: 字符串,默认值为 "human"
说明: 生物体类型,接受 "human" 或 "mouse"。指定后可以根据物种选择正确的基因注释。
用途: 决定重注释步骤时使用的人类或小鼠的基因库。
--file_prefix:类型: 字符串,默认值为 "all"
说明: 指定 contig 文件的前缀,用于确定要处理的文件(如 "PREFIX_contig_annotations.csv" 和 "PREFIX_contig.fasta")。
用途: 用于选择不同文件的前缀,以处理特定的数据子集。
--db:类型: 字符串,默认值为 "imgt"
说明: 数据库类型,接受 "imgt" 或 "ogrdb"。指定数据库用于基因重注释。
用途: 决定重注释时使用哪个基因数据库。
--strain:类型: 字符串,默认值为 None
说明: 指定用于重注释的小鼠品系(仅用于 "ogrdb" 数据库)。如果不指定,默认会使用所有小鼠品系。
用途: 用于小鼠数据的品系特定重注释。
--sep:类型: 字符串,默认值为 "_"
说明: 设置条形码和前缀/后缀之间的分隔符。如果没有元数据文件,将使用样本名称作为前缀。
用途: 决定条形码和前缀/后缀的格式。
--flavour:类型: 字符串,默认值为 "strict"
说明: 设置 igblastn 重注释的风格。"strict" 模式会强制执行更严格的 e 值和惩罚阈值,而 "original" 则不会。
用途: 选择基因注释时的严格程度。
--filter_to_high_confidence:类型: 布尔值,默认未设置
说明: 如果指定,仅保留在 contig 注释中被标记为 "高置信度" 的 contig。
用途: 过滤掉低置信度的数据。
--keep_trailing_hyphen_number:类型: 布尔值,默认 True
说明: 如果指定,保留条形码末尾的 "-1" 等后缀。
用途: 控制是否保留条形码的尾号。
--skip_format_header:类型: 布尔值,默认 False
说明: 如果指定,跳过 contig 文件头的格式化步骤。
用途: 控制是否需要格式化 contig 的头信息。
--skip_tigger:类型: 布尔值,默认 False
说明: 如果指定,跳过 TIgGER 的等位基因重新分配步骤。
用途: 控制是否运行 TIgGER 分析。
--skip_reassign_dj:类型: 布尔值,默认 True
说明: 如果指定,跳过使用 blastn 重新分配 D 和 J 片段的步骤(仅当风格为 "strict" 时)。
用途: 控制是否在严格模式下重新分配 D 和 J 片段。
--skip_correct_c:类型: 布尔值,默认 True
说明: 如果指定,跳过在 isotype 分配阶段修正 C 片段的步骤(仅当链类型为 IG 时)。
用途: 控制是否修正 C 片段注释。
--clean_output:类型: 布尔值,默认 False
说明: 如果指定,移除运行结果中的中间文件,仅保留主要输出文件。
用途: 控制是否清理中间输出文件。
逻辑部分:
args.chain = args.chain.lower(): 将 chain 参数转化为小写,以便于后续处理。
if args.chain not in ["tr", "ig"]: 如果用户输入的 chain 参数既不是 "tr" 也不是 "ig",则抛出错误。
最终返回:
该函数返回 args,其中包含用户通过命令行传入的所有参数。
那么碰到上面的文件我们如何设置参数呢
首先必须在这个目录下
如果研究的是小鼠加上–org=“mouse” ,研究人就删除,好好看我上面对所有参数的描述,然后加上出
sayhello@xuguangji:~/Biosoft/VDJ_test$ singularity run -B $PWD sc-dandelion_latest.sif dandelion-preprocess --meta meta1.csv --org="mouse"
至于我的meta1.csv 也给你看看
然后我们讲另外一种输入文件
比如在s10ug_07D的文件夹下是这三种文件,其余的准备文件都不变
代码我们加上了–file_prefix filtered
–file_prefix:
类型: 字符串,默认值为 “all”
说明: 指定 contig 文件的前缀,用于确定要处理的文件(如 “PREFIX_contig_annotations.csv” 和 “PREFIX_contig.fasta”)。
用途: 用于选择不同文件的前缀,以处理特定的数据子集。
singularity run -B $PWD sc-dandelion_latest.sif dandelion-preprocess --meta meta1.csv --file_prefix filtered --org="mouse"
最后还是多看看我上面写的对参数的说明,然后对应自己的数据改参数
后续分析完成更新Dandelion后续操作