From 229b67ff88d974c4fe4e880a4228949f8dfba811 Mon Sep 17 00:00:00 2001
From: yanzhongsino
Date: Fri, 6 Dec 2024 12:33:06 +0800
Subject: [PATCH] Site updated: 2024-12-06 12:31:20
---
2018/06/04/web_CSS/index.html | 4 +-
2018/06/04/web_html/index.html | 4 +-
2018/06/05/blog_hexo+github/index.html | 4 +-
2018/06/05/web_jquery/index.html | 4 +-
2018/06/11/web_bootstrap/index.html | 4 +-
2018/06/12/web_ES6/index.html | 4 +-
2018/06/12/web_flex/index.html | 4 +-
2018/06/12/web_gulp/index.html | 4 +-
2018/06/14/web_react/index.html | 4 +-
.../index.html | 4 +-
.../index.html | 4 +-
2021/03/27/bio_experiment/index.html | 4 +-
2021/03/27/bio_taxon_Bauhinia/index.html | 4 +-
2021/04/01/programming_scripts/index.html | 4 +-
2021/04/20/blog_maintenance/index.html | 4 +-
2021/04/20/linux_basics_PATH/index.html | 4 +-
.../index.html | 4 +-
2021/06/23/concept_homology/index.html | 4 +-
2021/07/16/concept_crown.and.stem/index.html | 4 +-
.../index.html | 4 +-
.../omics_genome.annotation_repeat/index.html | 4 +-
2021/08/10/omics_genome.management/index.html | 4 +-
.../index.html | 4 +-
.../bioinfo_alignment_align_intro/index.html | 4 +-
2021/09/11/bioinfo_synteny_WGDI/index.html | 8 +-
.../index.html | 4 +-
2021/09/29/bio_plot_upset/index.html | 4 +-
2021/09/29/bio_plot_venn/index.html | 4 +-
.../bioinfo_extract.4dtv.from.cds/index.html | 4 +-
2021/10/10/linux_shell_loop/index.html | 4 +-
.../index.html | 4 +-
.../index.html | 4 +-
.../29/bioinfo_gene.family_CAFE5/index.html | 4 +-
2021/11/05/bioinfo_synteny_MCscan/index.html | 12 +-
.../11/12/bioinfo_enrichment_intro/index.html | 4 +-
.../11/13/bioinfo_enrichment_topGO/index.html | 4 +-
2021/11/16/bio_plot_Circos/index.html | 4 +-
.../index.html | 4 +-
.../11/20/bio_evolution_tree_intro/index.html | 4 +-
2021/11/27/bioinfo_synteny_MCScanX/index.html | 12 +-
.../index.html | 4 +-
.../index.html | 4 +-
2021/12/28/R_install/index.html | 4 +-
.../linux_shell_command.connector/index.html | 4 +-
.../01/24/bioinfo_phylogeny_ggtree/index.html | 4 +-
.../03/20/bioinfo_geneflow_TreeMix/index.html | 4 +-
2022/03/22/omics_genome_submit/index.html | 6 +-
2022/04/10/bioinfo_geneflow_Dsuite/index.html | 8 +-
2022/04/10/bioinfo_geneflow_intro/index.html | 12 +-
.../bioinfo_geneflow_PhyloNetworks/index.html | 4 +-
2022/04/15/blog_markdown_grammer/index.html | 4 +-
.../omics_genome.annotation_ncRNA/index.html | 4 +-
.../index.html | 4 +-
.../index.html | 8 +-
2022/05/02/linux_basics_cpu/index.html | 4 +-
2022/05/02/linux_shell_top/index.html | 4 +-
.../bioinfo_fileformat_GFF3toolkit/index.html | 4 +-
.../omics_genome.survey_01.intro/index.html | 4 +-
.../index.html | 8 +-
.../05/omics_genome.survey_04.KMC/index.html | 12 +-
.../index.html | 12 +-
.../07/omics_genome.survey_06.GCE/index.html | 8 +-
.../16/bioinfo_fileformat_gb2tbl/index.html | 8 +-
.../index.html | 4 +-
.../index.html | 8 +-
2022/06/30/omics_organelle_submit/index.html | 4 +-
.../index.html | 8 +-
.../bioinfo_variation_SV_MUMandCo/index.html | 4 +-
.../index.html | 4 +-
.../index.html | 12 +-
.../index.html | 4 +-
.../index.html | 16 +-
.../index.html | 16 +-
.../07/31/blog_hexo+github_setting/index.html | 8 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 12 +-
.../index.html | 4 +-
.../bioinfo_synteny_plot_Rldeogram/index.html | 4 +-
.../index.html | 4 +-
.../index.html | 4 +-
2022/09/22/bioinfo_geneflow_3s/index.html | 4 +-
2022/09/22/tools_screen.recorder/index.html | 4 +-
.../09/bioinfo_variation_SV_intro/index.html | 4 +-
2022/10/17/bioinfo_psmc/index.html | 4 +-
.../18/bioinfo_WGD_geneRetention/index.html | 8 +-
.../18/bioinfo_transcriptionFactor/index.html | 4 +-
2022/11/06/bio_plot_heatmap/index.html | 4 +-
.../index.html | 4 +-
.../index.html | 8 +-
.../index.html | 8 +-
2023/03/13/bioinfo_phylogeny_MDS/index.html | 8 +-
.../bioinfo_phylogeny_MSCquartets/index.html | 12 +-
.../index.html | 12 +-
.../index.html | 4 +-
.../index.html | 4 +-
.../index.html | 4 +-
2023/05/11/tools_academia_EndNote/index.html | 4 +-
.../09/26/bioinfo_phylogeny_iqtree/index.html | 4 +-
.../bioinfo_alignment_trim_Gblocks/index.html | 4 +-
.../evolution_selection_dNdS_intro/index.html | 4 +-
.../index.html | 43 +-
.../index.html | 4 +-
.../index.html | 81 +-
.../index.html | 20 +-
.../index.html | 8 +-
.../index.html | 4 +-
.../index.html | 4 +-
.../24/bioinfo_fileformat_fa_fai/index.html | 4 +-
2023/12/21/blog_hexo_setting_RSS/index.html | 4 +-
.../index.html | 4 +-
.../index.html | 4 +-
.../index.html | 4 +-
.../31/bio_plastid_typesandroles/index.html | 8 +-
.../index.html | 12 +-
.../omics_genome.sequencing_intro/index.html | 24 +-
.../05/python_syntax_string_quetos/index.html | 8 +-
.../index.html | 4 +-
2024/06/18/linux_command_compress/index.html | 4 +-
.../index.html | 8 +-
.../index.html | 8 +-
.../index.html | 8 +-
.../index.html | 8 +-
.../index.html | 4 +-
.../index.html | 8 +-
.../index.html | 4 +-
.../index.html | 4 +-
.../index.html | 4 +-
.../index.html | 4 +-
.../index.html | 8 +-
.../index.html | 48 +-
about/index.html | 6 +-
archives/2018/06/index.html | 4 +-
archives/2018/index.html | 4 +-
archives/2020/12/index.html | 4 +-
archives/2020/index.html | 4 +-
archives/2021/03/index.html | 4 +-
archives/2021/04/index.html | 4 +-
archives/2021/05/index.html | 4 +-
archives/2021/06/index.html | 4 +-
archives/2021/07/index.html | 4 +-
archives/2021/08/index.html | 4 +-
archives/2021/09/index.html | 4 +-
archives/2021/10/index.html | 4 +-
archives/2021/11/index.html | 4 +-
archives/2021/12/index.html | 4 +-
archives/2021/index.html | 4 +-
archives/2021/page/2/index.html | 4 +-
archives/2021/page/3/index.html | 4 +-
archives/2021/page/4/index.html | 4 +-
archives/2022/01/index.html | 4 +-
archives/2022/03/index.html | 4 +-
archives/2022/04/index.html | 4 +-
archives/2022/05/index.html | 4 +-
archives/2022/06/index.html | 12 +-
archives/2022/07/index.html | 20 +-
archives/2022/07/page/2/index.html | 4 +-
archives/2022/08/index.html | 4 +-
archives/2022/09/index.html | 4 +-
archives/2022/10/index.html | 4 +-
archives/2022/11/index.html | 4 +-
archives/2022/12/index.html | 4 +-
archives/2022/index.html | 4 +-
archives/2022/page/2/index.html | 20 +-
archives/2022/page/3/index.html | 8 +-
archives/2022/page/4/index.html | 8 +-
archives/2022/page/5/index.html | 4 +-
archives/2023/03/index.html | 12 +-
archives/2023/04/index.html | 4 +-
archives/2023/05/index.html | 4 +-
archives/2023/09/index.html | 4 +-
archives/2023/10/index.html | 12 +-
archives/2023/11/index.html | 4 +-
archives/2023/12/index.html | 4 +-
archives/2023/index.html | 12 +-
archives/2023/page/2/index.html | 12 +-
archives/2024/01/index.html | 4 +-
archives/2024/05/index.html | 4 +-
archives/2024/06/index.html | 12 +-
archives/2024/08/index.html | 4 +-
archives/2024/09/index.html | 4 +-
archives/2024/10/index.html | 4 +-
archives/2024/11/index.html | 4 +-
archives/2024/index.html | 4 +-
archives/2024/page/2/index.html | 12 +-
archives/2024/page/3/index.html | 4 +-
archives/index.html | 4 +-
archives/page/10/index.html | 4 +-
archives/page/11/index.html | 4 +-
archives/page/12/index.html | 4 +-
archives/page/13/index.html | 4 +-
archives/page/14/index.html | 4 +-
archives/page/2/index.html | 12 +-
archives/page/3/index.html | 12 +-
archives/page/4/index.html | 8 +-
archives/page/5/index.html | 8 +-
archives/page/6/index.html | 20 +-
archives/page/7/index.html | 4 +-
archives/page/8/index.html | 12 +-
archives/page/9/index.html | 4 +-
atom.xml | 76 +-
categories/Windows/index.html | 4 +-
categories/Windows/system/index.html | 4 +-
categories/bio/concept/index.html | 4 +-
.../ancestral-state-reconstruction/index.html | 4 +-
categories/bio/evolution/index.html | 12 +-
categories/bio/evolution/selection/index.html | 12 +-
categories/bio/evolution/tree/index.html | 4 +-
categories/bio/experiment/index.html | 4 +-
.../bio/genetics/hybridization/index.html | 4 +-
categories/bio/genetics/index.html | 4 +-
categories/bio/index.html | 12 +-
categories/bio/page/2/index.html | 4 +-
categories/bio/plastid/index.html | 4 +-
categories/bio/plot/index.html | 4 +-
categories/bio/taxon/index.html | 4 +-
categories/bioinfo/4dtv/index.html | 4 +-
categories/bioinfo/Ks/index.html | 4 +-
categories/bioinfo/WGD/index.html | 4 +-
.../bioinfo/alignment/align/MSA/index.html | 4 +-
categories/bioinfo/alignment/align/index.html | 4 +-
categories/bioinfo/alignment/index.html | 4 +-
categories/bioinfo/alignment/prot/index.html | 4 +-
.../bioinfo/alignment/statistics/index.html | 4 +-
categories/bioinfo/alignment/trim/index.html | 4 +-
categories/bioinfo/enrichment/index.html | 4 +-
.../bioinfo/fileformat/fasta/index.html | 4 +-
categories/bioinfo/fileformat/index.html | 4 +-
.../bioinfo/fileformat/mitogenome/index.html | 4 +-
categories/bioinfo/gene-family/index.html | 4 +-
categories/bioinfo/gene-flow/index.html | 4 +-
categories/bioinfo/index.html | 8 +-
.../bioinfo/orthology-inference/index.html | 4 +-
categories/bioinfo/page/2/index.html | 8 +-
categories/bioinfo/page/3/index.html | 4 +-
categories/bioinfo/page/4/index.html | 4 +-
categories/bioinfo/page/5/index.html | 4 +-
categories/bioinfo/phylogeny/ILS/index.html | 4 +-
categories/bioinfo/phylogeny/index.html | 4 +-
.../phylogeny/phylogeny-inference/index.html | 4 +-
.../bioinfo/population-genetics/index.html | 4 +-
categories/bioinfo/pseudogene/index.html | 4 +-
categories/bioinfo/synteny/index.html | 4 +-
categories/bioinfo/synteny/plot/index.html | 4 +-
.../bioinfo/transcription-factor/index.html | 4 +-
categories/bioinfo/variation/index.html | 4 +-
.../variation/structural-variation/index.html | 4 +-
categories/blog/hexo/index.html | 4 +-
categories/blog/hexo/setting/RSS/index.html | 4 +-
categories/blog/hexo/setting/index.html | 4 +-
categories/blog/index.html | 4 +-
categories/index.html | 4 +-
categories/linux/basics/index.html | 4 +-
categories/linux/command/compress/index.html | 4 +-
categories/linux/command/index.html | 4 +-
categories/linux/index.html | 4 +-
.../cache/index.html | 4 +-
.../operation-and-maintenance/index.html | 4 +-
.../operation-and-maintenance/log/index.html | 4 +-
.../operation-and-maintenance/user/index.html | 4 +-
categories/linux/page/2/index.html | 4 +-
categories/linux/shell/index.html | 4 +-
categories/linux/text-processing/index.html | 4 +-
categories/omics/genome/annotation/index.html | 4 +-
.../omics/genome/genome-assembly/index.html | 4 +-
.../omics/genome/genome-sequencing/index.html | 12 +-
.../next-generation-sequencing/index.html | 4 +-
.../third-generation-sequencing/index.html | 4 +-
.../omics/genome/genome-survey/index.html | 12 +-
categories/omics/genome/index.html | 16 +-
categories/omics/genome/page/2/index.html | 16 +-
categories/omics/genome/page/3/index.html | 12 +-
categories/omics/genome/page/4/index.html | 4 +-
.../genome/quality-assessment/index.html | 20 +-
.../quality-assessment/page/2/index.html | 4 +-
categories/omics/index.html | 12 +-
categories/omics/organelle/index.html | 4 +-
.../omics/organelle/recombination/index.html | 4 +-
categories/omics/page/2/index.html | 20 +-
categories/omics/page/3/index.html | 12 +-
categories/omics/page/4/index.html | 4 +-
.../omics/transcriptome/express/index.html | 4 +-
categories/omics/transcriptome/index.html | 4 +-
categories/programming/R/basic/index.html | 4 +-
categories/programming/R/index.html | 4 +-
categories/programming/index.html | 4 +-
categories/programming/python/index.html | 4 +-
.../programming/python/syntax/index.html | 4 +-
.../python/syntax/string/index.html | 4 +-
categories/programming/scripts/index.html | 4 +-
categories/tools/academia/EndNote/index.html | 4 +-
categories/tools/academia/index.html | 4 +-
categories/tools/index.html | 4 +-
categories/web/index.html | 4 +-
css/main.css | 2 +-
index.html | 16 +-
page/10/index.html | 4 +-
page/11/index.html | 4 +-
page/12/index.html | 4 +-
page/13/index.html | 4 +-
page/14/index.html | 4 +-
page/2/index.html | 40 +-
page/3/index.html | 36 +-
page/4/index.html | 24 +-
page/5/index.html | 24 +-
page/6/index.html | 56 +-
page/7/index.html | 4 +-
page/8/index.html | 32 +-
page/9/index.html | 4 +-
search.xml | 14815 ++++++++--------
tags/3s/index.html | 4 +-
tags/404-page/index.html | 4 +-
tags/4dtv/index.html | 4 +-
tags/AliView/index.html | 4 +-
tags/AnnotationForge/index.html | 4 +-
tags/AnnotationHub/index.html | 4 +-
tags/Assemblytics/index.html | 4 +-
tags/BIC/index.html | 4 +-
tags/BIOS/index.html | 4 +-
tags/BUSCO/index.html | 4 +-
tags/BUSTED/index.html | 4 +-
tags/BWA/index.html | 4 +-
tags/Bauhinia/index.html | 4 +-
.../Bayesian-information-criterion/index.html | 4 +-
tags/Bioconductor/index.html | 4 +-
tags/Boot-Mode/index.html | 4 +-
tags/CAFE/index.html | 4 +-
tags/CCS/index.html | 12 +-
tags/CDS/index.html | 4 +-
tags/CLR/index.html | 12 +-
tags/CPU/index.html | 4 +-
tags/CRAN/index.html | 4 +-
tags/CSS/index.html | 4 +-
tags/Captura/index.html | 4 +-
tags/Circos/index.html | 4 +-
tags/Clustal/index.html | 4 +-
tags/D-sub-n-sub/index.html | 81 +-
tags/D-sub-s-sub/index.html | 4 +-
tags/DESeq2/index.html | 4 +-
tags/Dsuite/index.html | 4 +-
tags/EBSeq/index.html | 4 +-
tags/EDTA/index.html | 4 +-
tags/ES6/index.html | 4 +-
tags/EndNote/index.html | 4 +-
tags/FADE/index.html | 4 +-
tags/FEL/index.html | 4 +-
tags/FUBAR/index.html | 4 +-
tags/GATK/index.html | 4 +-
tags/GB2sequin/index.html | 4 +-
tags/GCE/index.html | 4 +-
tags/GFAP/index.html | 4 +-
tags/GFF3/index.html | 4 +-
tags/GFF3toolkit/index.html | 4 +-
tags/GO/index.html | 4 +-
tags/GOEAST/index.html | 4 +-
tags/GSEA/index.html | 4 +-
tags/Gblocks/index.html | 4 +-
tags/GenBank/index.html | 4 +-
tags/Genbank2Sequin-py/index.html | 4 +-
tags/GenomeScope/index.html | 12 +-
tags/Hi-C/index.html | 4 +-
tags/HiFi/index.html | 4 +-
tags/HiSat2/index.html | 69 +-
tags/Hifiasm/index.html | 4 +-
tags/HyPhy/index.html | 12 +-
tags/ILS/index.html | 4 +-
tags/Illumina/index.html | 4 +-
tags/Indel/index.html | 4 +-
tags/Infernal/index.html | 4 +-
tags/Julia/index.html | 4 +-
tags/K-sub-A-sub-K-sub-S-sub/index.html | 4 +-
tags/K-sub-A-sub/index.html | 4 +-
tags/K-sub-S-sub/index.html | 4 +-
tags/KAT/index.html | 4 +-
tags/KEGG/index.html | 4 +-
tags/KMC/index.html | 12 +-
tags/KOBAS-i/index.html | 4 +-
tags/Ka-Ks/index.html | 4 +-
tags/Ka/index.html | 4 +-
tags/KaKs-Calculator/index.html | 4 +-
tags/KmerGenie/index.html | 4 +-
tags/Ks/index.html | 4 +-
tags/LAI/index.html | 4 +-
tags/LTR/index.html | 4 +-
tags/LoRDEC/index.html | 4 +-
tags/MAFFT/index.html | 4 +-
tags/MCScanX/index.html | 4 +-
tags/MCscan/index.html | 4 +-
tags/MDS/index.html | 4 +-
tags/MEGA/index.html | 4 +-
tags/MEME/index.html | 4 +-
tags/ML-tree/index.html | 4 +-
tags/MSA/index.html | 4 +-
tags/MSC/index.html | 4 +-
tags/MSCquartets/index.html | 4 +-
tags/MUMandCo/index.html | 4 +-
tags/MUSCLE/index.html | 4 +-
tags/Mercator4/index.html | 4 +-
.../index.html | 4 +-
tags/Multiple-Sequence-Alignment/index.html | 4 +-
tags/NCBI/index.html | 4 +-
tags/NGS/index.html | 4 +-
tags/Nanopore/index.html | 4 +-
tags/Newick-Utilities/index.html | 4 +-
tags/OBS-Studio/index.html | 4 +-
tags/ONT/index.html | 4 +-
tags/ORA/index.html | 4 +-
tags/Oases/index.html | 4 +-
tags/OrthoFinder2/index.html | 4 +-
tags/OrthoMCL/index.html | 4 +-
tags/PAL2NAL/index.html | 4 +-
tags/PANNZER2/index.html | 4 +-
tags/PATH/index.html | 4 +-
tags/PCR/index.html | 4 +-
tags/PRANK/index.html | 4 +-
tags/PSMC/index.html | 4 +-
tags/PacBio/index.html | 12 +-
tags/ParaAT/index.html | 4 +-
tags/PhyloNetworks/index.html | 4 +-
tags/PlantTFDB/index.html | 4 +-
tags/PlantTribes/index.html | 4 +-
tags/PseudogenePipeline/index.html | 4 +-
tags/QC/index.html | 4 +-
tags/QUAST/index.html | 4 +-
tags/QualiMap/index.html | 4 +-
tags/Quartet-Sampling/index.html | 4 +-
tags/R-package/index.html | 4 +-
tags/R-packages/index.html | 4 +-
tags/R/index.html | 4 +-
tags/RAID-Controller/index.html | 4 +-
tags/RAID/index.html | 4 +-
tags/RELAX/index.html | 12 +-
.../index.html | 4 +-
tags/RNA-seq/index.html | 4 +-
tags/RNA-sequencing/index.html | 4 +-
tags/ROUSFinder/index.html | 4 +-
tags/ROUSFinder2-0-py/index.html | 4 +-
tags/RSEM/index.html | 4 +-
tags/RSS/index.html | 4 +-
tags/RStudio/index.html | 4 +-
tags/RepeatMasker/index.html | 4 +-
tags/RepeatModeler/index.html | 4 +-
tags/Rfam/index.html | 4 +-
tags/Rldeogram/index.html | 4 +-
tags/Rtools/index.html | 4 +-
tags/SIM3s/index.html | 4 +-
tags/SLAC/index.html | 4 +-
tags/SMRT/index.html | 12 +-
tags/SNP/index.html | 4 +-
tags/SPAdes/index.html | 4 +-
tags/SRA-Toolkit/index.html | 4 +-
tags/SRA/index.html | 4 +-
tags/STARlong/index.html | 4 +-
tags/SV/index.html | 4 +-
tags/Salmon-SMEM/index.html | 4 +-
tags/Sequin/index.html | 4 +-
tags/Simulation/index.html | 4 +-
tags/Smudgeplot/index.html | 4 +-
tags/StringTie/index.html | 4 +-
tags/TGS/index.html | 12 +-
tags/Ti/index.html | 4 +-
tags/TreeMix/index.html | 4 +-
tags/Trinity/index.html | 4 +-
tags/Tv/index.html | 4 +-
tags/UFBoot/index.html | 4 +-
tags/USB3-0-Extender/index.html | 4 +-
tags/UpSetR/index.html | 4 +-
tags/Venn/index.html | 4 +-
tags/VennDiagram/index.html | 4 +-
tags/WGD/index.html | 4 +-
tags/WGDI/index.html | 4 +-
tags/Xbox/index.html | 4 +-
tags/aBSREL/index.html | 4 +-
tags/add/index.html | 4 +-
.../index.html | 4 +-
tags/align/index.html | 4 +-
tags/alignment/index.html | 4 +-
tags/aln2tbl-legacy-py/index.html | 4 +-
tags/aln2tbl-py/index.html | 4 +-
tags/amyloplast/index.html | 4 +-
tags/analog/index.html | 4 +-
tags/ape/index.html | 4 +-
tags/auto/index.html | 4 +-
tags/awk/index.html | 4 +-
tags/bam/index.html | 20 +-
tags/bamdst/index.html | 4 +-
tags/baseML/index.html | 4 +-
tags/batch-run-sh/index.html | 4 +-
tags/bifurcated-tree/index.html | 4 +-
tags/bigz2/index.html | 4 +-
tags/bio/index.html | 4 +-
tags/bioinfo/index.html | 12 +-
tags/biosoft/index.html | 12 +-
tags/biosoft/page/2/index.html | 12 +-
tags/biosoft/page/3/index.html | 4 +-
tags/blog/index.html | 4 +-
tags/bootstrap/index.html | 4 +-
tags/bowtie2/index.html | 4 +-
tags/branch-model/index.html | 4 +-
tags/build-website/index.html | 4 +-
tags/cache/index.html | 4 +-
tags/castor/index.html | 4 +-
tags/chloroplast/index.html | 4 +-
tags/chromoplast/index.html | 4 +-
tags/chronogram/index.html | 4 +-
tags/circular-consensus-sequencing/index.html | 12 +-
tags/cladistics/index.html | 4 +-
tags/cladogram/index.html | 4 +-
tags/clusterProfiler/index.html | 4 +-
tags/codeML/index.html | 4 +-
tags/codon/index.html | 4 +-
tags/colinearity/index.html | 4 +-
tags/combine/index.html | 4 +-
tags/command-connector/index.html | 4 +-
tags/compress/index.html | 4 +-
.../index.html | 4 +-
tags/concept/index.html | 4 +-
tags/contig/index.html | 4 +-
tags/continuous-long-reads/index.html | 12 +-
tags/contraction/index.html | 4 +-
tags/crown-groups/index.html | 4 +-
tags/d-sub-N-sub-d-sub-S-sub/index.html | 4 +-
tags/data-preprocessing/index.html | 4 +-
tags/deletion/index.html | 4 +-
tags/deploy-website/index.html | 4 +-
tags/depth/index.html | 20 +-
tags/divergence-time/index.html | 4 +-
tags/duplication/index.html | 4 +-
tags/dxy/index.html | 4 +-
tags/eggnog-mapper/index.html | 4 +-
tags/elaioplast/index.html | 4 +-
tags/enricher/index.html | 4 +-
tags/enrichment-analysis/index.html | 4 +-
tags/error/index.html | 4 +-
tags/etioplast/index.html | 4 +-
tags/evolutionary-tree/index.html | 4 +-
tags/experiment/index.html | 4 +-
tags/expression-abundance/index.html | 4 +-
tags/expression-analysis/index.html | 4 +-
tags/extract-intron-info-pl/index.html | 4 +-
tags/extract-single-copy-genes-sh/index.html | 4 +-
tags/extract/index.html | 4 +-
tags/fa/index.html | 4 +-
tags/facet-plot/index.html | 4 +-
tags/fai/index.html | 4 +-
tags/faidx/index.html | 4 +-
tags/fas/index.html | 4 +-
tags/fasta/index.html | 12 +-
tags/fasterq-dump/index.html | 4 +-
tags/fastp/index.html | 4 +-
tags/fastq-dump/index.html | 4 +-
tags/fastq/index.html | 4 +-
tags/fastqc/index.html | 4 +-
tags/fastuniq/index.html | 4 +-
tags/flex/index.html | 4 +-
tags/for/index.html | 4 +-
tags/fossil-time/index.html | 4 +-
tags/fq/index.html | 4 +-
tags/fst/index.html | 4 +-
tags/functional-annotation/index.html | 4 +-
tags/gbf2tbl-pl/index.html | 4 +-
tags/genbank-to-tbl-py/index.html | 4 +-
tags/gene-duplication-event/index.html | 4 +-
tags/gene-family/index.html | 4 +-
tags/gene-flow/index.html | 4 +-
tags/gene-set-enrichment-analysis/index.html | 4 +-
tags/gene-tree/index.html | 4 +-
tags/genome-annotation/index.html | 4 +-
tags/genome-assembly/index.html | 4 +-
tags/genome-sequencing/index.html | 12 +-
tags/genome-submit/index.html | 4 +-
tags/genome-survey/index.html | 12 +-
tags/genome/index.html | 20 +-
tags/genome/page/2/index.html | 12 +-
tags/genome/page/3/index.html | 4 +-
tags/geom-taxalink/index.html | 4 +-
tags/gerontoplast/index.html | 4 +-
tags/get-subtree-with-tips/index.html | 4 +-
tags/ggdensitree/index.html | 4 +-
tags/ggplot2/index.html | 4 +-
tags/ggstance/index.html | 4 +-
tags/ggtree/index.html | 4 +-
tags/github/index.html | 4 +-
tags/gplots/index.html | 4 +-
tags/groupadd/index.html | 4 +-
tags/groupdel/index.html | 4 +-
tags/groupmod/index.html | 4 +-
tags/gulp/index.html | 4 +-
tags/gzip/index.html | 4 +-
tags/hardware/index.html | 4 +-
tags/heatmap/index.html | 4 +-
tags/hexo/index.html | 4 +-
tags/homolog/index.html | 4 +-
tags/html/index.html | 4 +-
tags/hybridization/index.html | 4 +-
tags/ideogram/index.html | 4 +-
tags/image/index.html | 4 +-
tags/index.html | 4 +-
tags/insert-size/index.html | 4 +-
tags/insertion/index.html | 4 +-
tags/interproscan/index.html | 4 +-
tags/introgressive/index.html | 4 +-
tags/inversion/index.html | 4 +-
tags/iqtree2/index.html | 4 +-
tags/itol/index.html | 4 +-
tags/jcvi/index.html | 4 +-
tags/jellyfish/index.html | 4 +-
tags/jquery/index.html | 4 +-
tags/k-mer/index.html | 12 +-
tags/kmerfreq/index.html | 4 +-
tags/leucoplast/index.html | 4 +-
tags/line-separator/index.html | 4 +-
tags/linux/index.html | 4 +-
tags/load-average/index.html | 4 +-
tags/log/index.html | 4 +-
tags/long-read-sequencing/index.html | 12 +-
tags/loop/index.html | 4 +-
tags/mapping-rate/index.html | 4 +-
tags/mapping/index.html | 20 +-
tags/markdown/index.html | 4 +-
tags/maximum-likelihood-tree/index.html | 4 +-
tags/mcmctree/index.html | 4 +-
tags/merge/index.html | 4 +-
tags/minimap2/index.html | 4 +-
tags/miniprot/index.html | 4 +-
tags/mitogenome/index.html | 12 +-
tags/mitogenomics/index.html | 4 +-
tags/mitos2fasta-py/index.html | 4 +-
tags/molecular-experiment/index.html | 4 +-
tags/monophyly/index.html | 4 +-
tags/mosdepth/index.html | 4 +-
tags/mount/index.html | 4 +-
tags/msaviewer/index.html | 4 +-
.../index.html | 4 +-
tags/multiPhylo/index.html | 4 +-
tags/multidimensional-scaling/index.html | 4 +-
tags/music/index.html | 4 +-
tags/ncRNA/index.html | 4 +-
tags/negative-selection/index.html | 4 +-
tags/neutral-selection/index.html | 4 +-
tags/newgrp/index.html | 4 +-
tags/next-generation-sequencing/index.html | 4 +-
tags/next/index.html | 4 +-
tags/nucleotide-pair-frequencies/index.html | 4 +-
"tags/omega-\317\211/index.html" | 4 +-
tags/omega/index.html | 4 +-
tags/organellar-genome/index.html | 4 +-
tags/organelle/index.html | 12 +-
tags/orthofinder/index.html | 4 +-
tags/orthogroup/index.html | 4 +-
tags/ortholog/index.html | 4 +-
tags/orthology/index.html | 4 +-
tags/over-representation-analysis/index.html | 4 +-
tags/paml/index.html | 4 +-
tags/paralog/index.html | 4 +-
tags/paraphyly/index.html | 4 +-
tags/passwd/index.html | 4 +-
tags/paste/index.html | 4 +-
tags/pheatmap/index.html | 4 +-
tags/phylogenetic-discordance/index.html | 4 +-
tags/phylogenetic-reticulum/index.html | 4 +-
tags/phylogenetic-tree/index.html | 4 +-
tags/phylogenomics/index.html | 4 +-
tags/phylogeny-inference/index.html | 4 +-
tags/phylogeny/index.html | 4 +-
tags/phylogram/index.html | 4 +-
tags/pi/index.html | 4 +-
tags/pigz/index.html | 4 +-
tags/pixy/index.html | 4 +-
tags/plastid/index.html | 4 +-
tags/plastome/index.html | 12 +-
tags/plot/index.html | 4 +-
tags/polyphyly/index.html | 4 +-
tags/population-networks/index.html | 4 +-
tags/positive-selection/index.html | 4 +-
tags/prefetch/index.html | 4 +-
tags/proplastid/index.html | 4 +-
tags/protein/index.html | 4 +-
tags/proteinoplast/index.html | 4 +-
tags/pseudogene/index.html | 4 +-
tags/purifying-selection/index.html | 4 +-
tags/python/index.html | 4 +-
tags/quality-assessment/index.html | 20 +-
tags/quality-assessment/page/2/index.html | 4 +-
tags/quality-control/index.html | 4 +-
tags/quote/index.html | 4 +-
tags/quotes/index.html | 4 +-
tags/r8s/index.html | 4 +-
tags/rar/index.html | 4 +-
tags/react/index.html | 4 +-
tags/readme/index.html | 4 +-
tags/rearrangement/index.html | 4 +-
tags/reciprocal-cross/index.html | 4 +-
tags/recombination-frequency/index.html | 4 +-
tags/recombination/index.html | 4 +-
tags/reinstall/index.html | 4 +-
tags/rename/index.html | 4 +-
tags/repeat-contraction/index.html | 4 +-
tags/repeat-expansion/index.html | 4 +-
tags/repeat-sequences/index.html | 4 +-
tags/repeat/index.html | 4 +-
tags/resume/index.html | 4 +-
tags/sam/index.html | 20 +-
tags/samtools-flagstat/index.html | 4 +-
tags/samtools/index.html | 12 +-
tags/sanger-sequencing/index.html | 4 +-
tags/scaffold/index.html | 4 +-
tags/screen-recorder/index.html | 4 +-
tags/scripts/index.html | 4 +-
tags/sed/index.html | 4 +-
tags/selection/index.html | 12 +-
tags/sequence-alignment/index.html | 4 +-
tags/server/index.html | 4 +-
tags/shell/index.html | 4 +-
tags/simplex/index.html | 4 +-
tags/sort/index.html | 4 +-
tags/species-tree/index.html | 4 +-
tags/stem-groups/index.html | 4 +-
tags/string/index.html | 4 +-
tags/structural-variation/index.html | 4 +-
tags/submit/index.html | 4 +-
tags/subreads/index.html | 12 +-
tags/sync/index.html | 4 +-
tags/syntax/index.html | 4 +-
tags/synteny/index.html | 4 +-
tags/system/index.html | 4 +-
tags/table2asn/index.html | 4 +-
tags/tandem-contraction/index.html | 4 +-
tags/tandem-expansion/index.html | 4 +-
tags/tandem-repeat/index.html | 4 +-
tags/tar/index.html | 4 +-
tags/tbl/index.html | 4 +-
tags/tbl2asn/index.html | 4 +-
tags/third-generation-sequencing/index.html | 12 +-
tags/tools/index.html | 4 +-
tags/top/index.html | 4 +-
tags/topGO/index.html | 4 +-
tags/tr/index.html | 4 +-
tags/transcript/index.html | 4 +-
tags/transcription-factor/index.html | 4 +-
tags/transcriptome/index.html | 4 +-
tags/translocation/index.html | 4 +-
tags/transposable-elements-TE/index.html | 4 +-
tags/tree/index.html | 4 +-
tags/treeio/index.html | 4 +-
tags/trimAl/index.html | 4 +-
tags/trimming/index.html | 4 +-
tags/trimmomatic/index.html | 4 +-
tags/tutorial/index.html | 4 +-
.../index.html | 4 +-
tags/user/index.html | 4 +-
tags/useradd/index.html | 4 +-
tags/userdel/index.html | 4 +-
tags/usermod/index.html | 4 +-
tags/variation/index.html | 4 +-
tags/video/index.html | 4 +-
tags/visualization/index.html | 4 +-
tags/website-maintenance/index.html | 4 +-
tags/while/index.html | 4 +-
tags/windows/index.html | 4 +-
tags/xargs/index.html | 4 +-
tags/xenolog/index.html | 4 +-
tags/zip/index.html | 4 +-
"tags/\317\211/index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
"tags/\346\240\270\345\277\203/index.html" | 4 +-
"tags/\347\211\251\347\220\206CPU/index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
.../index.html" | 4 +-
"tags/\350\264\250\344\275\223/index.html" | 4 +-
"tags/\350\277\220\347\273\264/index.html" | 4 +-
.../index.html" | 4 +-
"tags/\351\200\273\350\276\221CPU/index.html" | 4 +-
.../index.html" | 4 +-
785 files changed, 9723 insertions(+), 9632 deletions(-)
diff --git a/2018/06/04/web_CSS/index.html b/2018/06/04/web_CSS/index.html
index 7866ee4e5..73e2ad223 100644
--- a/2018/06/04/web_CSS/index.html
+++ b/2018/06/04/web_CSS/index.html
@@ -545,12 +545,12 @@ SEQ_FEAT.BadInternalCharacter
-SRA Toolkit包括下载SRA数据的命令prefetch
,将SRA格式的数据转换为FASTQ格式的命令fastq-dump
,fasterq-dump
,检索SRA数据文件中的元数据的vdb-dump
,将SRA文件直接转换为SAM格式(如果记录在数据库中有对映/SAM信息)的sam-dump
。2.3. 下载SRA文件和转换格式 2.3.1. 查找SRR编号
+SRA Toolkit包括下载SRA数据的命令prefetch
,将SRA格式的数据转换为FASTQ格式的命令fastq-dump
,fasterq-dump
,检索SRA数据文件中的元数据的vdb-dump
,将SRA文件直接转换为SAM格式(如果记录在数据库中有对映/SAM信息)的sam-dump
。
-
+2.3. 下载SRA文件和转换格式 2.3.1. 查找SRR编号
在NCBI网站 https://www.ncbi.nlm.nih.gov/sra 搜索物种名等信息,获取SRR编号;
选择多个搜索结果,然后Send to-File-RunInfo下载SraRunInfo.csv表格文件,里面有非常完整的上传人填写的测序相关信息,包括SRA Lite格式的download_path;
选择多个搜索结果,然后Send to-File-Acdession List下载SraAccList.csv表格文件。
@@ -379,6 +385,7 @@ 2.3.3. SRA格式转为fastq格式 SRA Toolkit有两个命令可以将SRA格式转为fastq格式:fastq-dump和fasterq-dump。
区别主要是:
@@ -416,8 +424,8 @@
fasterq-dump
--fasterq-dump --split-3 ./SRR1234567 -p -e 12
+fasterq-dump --split-3 ./SRR1234567 -p -e 12
参数:
-s|–split-spot: 将双端测序分为两份,放在一个文件中。
-S|–split-files: 将双端测序分为两份,放在两个文件,对于一方有而一方没有的reads直接丢弃。
@@ -432,7 +440,9 @@
命令
-time fastp -c -l 50 -q 20 -w 8 -i sample_1.raw.fq.gz -I sample_2.raw.fq.gz -o sample_1.clean.fq.gz -O sample_2.clean.fq.gz -h sample_fastp.html -j sample_fastp.json
+
+time fastp -c -l 50 -q 20 -w 8 -i sample_1.raw.fq.gz -I sample_2.raw.fq.gz -o sample_1.clean.fq.gz -O sample_2.clean.fq.gz -h sample_fastp.html -j sample_fastp.json
+
常用参数-输入输出
@@ -491,8 +501,9 @@ 3.2.2. Trimmomatic 质控 Trimmomatic 可以去除接头,低质量序列和被污染序列。
+Sequence Length Distribution: 序列长度的分布。
+3.2.2. Trimmomatic 质控 Trimmomatic 可以去除接头,低质量序列和被污染序列。
trimmomatic 命令time trimmomatic PE -threads 8 -phred33 sample_raw.R1.fq.gz sample_raw.R2.fq.gz sample_clean.R1.fq.gz sample.unpaired.R1.fq.gz sample.clean.R2.fq.gz sample.unpaired.R2.fq.gz ILLUMINACLIP:adapters.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36
trimmomatic是一个对Illumina NGS data进行trim的工具
常用参数
@@ -527,14 +538,19 @@ 3.2.3. FastQC 获取clean reads的质量报告 FastQC 获取clean reads的质量报告,可以与raw reads的报告对比着看。
+AVGQUAL:20 最低质量阈值。被切除后的read平均质量低于20,则丢弃此条read。
+
+3.2.3. FastQC 获取clean reads的质量报告 FastQC 获取clean reads的质量报告,可以与raw reads的报告对比着看。
+
time fastqc sample_clean.R1.fq.gz -t 8 -o sample_clean
time fastqc sample_clean.R2.fq.gz -t 8 -o sample_clean
4. 去除重复序列(cleanreads2uniqreads) 4.1. 去重操作的背景
测序过程中(二代测序主要是PCR环节引入)可能带来重复片段Duplication,通常重复片段占比<15%。Duplication占比问题的解释
去重一般操作比对到基因组上并排序完成的bam文件,利用基因组的位置信息进行去重,效率较高。
-若没有参考基因组的情况,比如genome survey分析前的数据预处理,可以直接对clean reads进行去重 。4.2. Fastuniq去重操作
+若没有参考基因组的情况,比如genome survey分析前的数据预处理,可以直接对clean reads进行去重 。
+
+4.2. Fastuniq去重操作
命令
1 2 realpath sample_1.clean.fq sample_2.clean.fq >input.txt time fastuniq -i input.txt -o sample_1.fastuniq.clean.fq -p sample_2.fastuniq.clean.fq -t q
@@ -590,11 +606,11 @@
# genome survey
# fastq
+ # NGS
# quality control
# QC
# genome sequencing
# next generation sequencing
- # NGS
# NCBI
# SRA
# SRA Toolkit
@@ -757,12 +773,12 @@
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/about/index.html b/about/index.html
index a5d991a63..d45b8f3b8 100644
--- a/about/index.html
+++ b/about/index.html
@@ -246,7 +246,7 @@ 关于生信技工
教育经历:目前(中山大学在职博士后,植物基因组进化),博士(中山大学,植物基因组进化),硕士(四川大学,植物进化),本科(西南大学,食品科学)。
微信公众号:生信技工
个人网站:https://yanzhongsino.github.io/
-邮箱:yan.zhong.sino@gmail.com
+邮箱:yan.zhong.sino@gmail.com
@@ -394,12 +394,12 @@ 关于生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2018/06/index.html b/archives/2018/06/index.html
index 73ade444a..b033debb5 100644
--- a/archives/2018/06/index.html
+++ b/archives/2018/06/index.html
@@ -543,12 +543,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2018/index.html b/archives/2018/index.html
index 1426eecc9..7345c3847 100644
--- a/archives/2018/index.html
+++ b/archives/2018/index.html
@@ -543,12 +543,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2020/12/index.html b/archives/2020/12/index.html
index ec2a06cc3..82672b4ba 100644
--- a/archives/2020/12/index.html
+++ b/archives/2020/12/index.html
@@ -383,12 +383,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2020/index.html b/archives/2020/index.html
index b2ffd6a93..6c47f9218 100644
--- a/archives/2020/index.html
+++ b/archives/2020/index.html
@@ -383,12 +383,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/03/index.html b/archives/2021/03/index.html
index f94b7a4fb..90a552cab 100644
--- a/archives/2021/03/index.html
+++ b/archives/2021/03/index.html
@@ -423,12 +423,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/04/index.html b/archives/2021/04/index.html
index 9c50feadf..19519bfaa 100644
--- a/archives/2021/04/index.html
+++ b/archives/2021/04/index.html
@@ -423,12 +423,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/05/index.html b/archives/2021/05/index.html
index 3b540924a..f26fb162e 100644
--- a/archives/2021/05/index.html
+++ b/archives/2021/05/index.html
@@ -383,12 +383,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/06/index.html b/archives/2021/06/index.html
index 4c9efd7b7..1a6957a49 100644
--- a/archives/2021/06/index.html
+++ b/archives/2021/06/index.html
@@ -383,12 +383,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/07/index.html b/archives/2021/07/index.html
index 4a81e680d..9750e38de 100644
--- a/archives/2021/07/index.html
+++ b/archives/2021/07/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/08/index.html b/archives/2021/08/index.html
index 0e5d9f6eb..32cf1d467 100644
--- a/archives/2021/08/index.html
+++ b/archives/2021/08/index.html
@@ -423,12 +423,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/09/index.html b/archives/2021/09/index.html
index 7f429f16e..93473670f 100644
--- a/archives/2021/09/index.html
+++ b/archives/2021/09/index.html
@@ -463,12 +463,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/10/index.html b/archives/2021/10/index.html
index b2fe5b19b..3bd490d97 100644
--- a/archives/2021/10/index.html
+++ b/archives/2021/10/index.html
@@ -463,12 +463,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/11/index.html b/archives/2021/11/index.html
index 0eacbab37..12b0e3c9d 100644
--- a/archives/2021/11/index.html
+++ b/archives/2021/11/index.html
@@ -503,12 +503,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/12/index.html b/archives/2021/12/index.html
index 5feeb6100..a0eb4f563 100644
--- a/archives/2021/12/index.html
+++ b/archives/2021/12/index.html
@@ -423,12 +423,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/index.html b/archives/2021/index.html
index 6a7a8c62a..486c97e25 100644
--- a/archives/2021/index.html
+++ b/archives/2021/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/page/2/index.html b/archives/2021/page/2/index.html
index 4ddeb9bd7..0da4f118d 100644
--- a/archives/2021/page/2/index.html
+++ b/archives/2021/page/2/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/page/3/index.html b/archives/2021/page/3/index.html
index a5d83a8e2..4c0a6479c 100644
--- a/archives/2021/page/3/index.html
+++ b/archives/2021/page/3/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2021/page/4/index.html b/archives/2021/page/4/index.html
index 2aed0a028..fd286db44 100644
--- a/archives/2021/page/4/index.html
+++ b/archives/2021/page/4/index.html
@@ -426,12 +426,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/01/index.html b/archives/2022/01/index.html
index 33e580636..24f458170 100644
--- a/archives/2022/01/index.html
+++ b/archives/2022/01/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/03/index.html b/archives/2022/03/index.html
index 4b6f51f4c..137162173 100644
--- a/archives/2022/03/index.html
+++ b/archives/2022/03/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/04/index.html b/archives/2022/04/index.html
index 4a63cca2f..b0a587be7 100644
--- a/archives/2022/04/index.html
+++ b/archives/2022/04/index.html
@@ -503,12 +503,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/05/index.html b/archives/2022/05/index.html
index d67a46d1b..282133646 100644
--- a/archives/2022/05/index.html
+++ b/archives/2022/05/index.html
@@ -463,12 +463,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/06/index.html b/archives/2022/06/index.html
index d54f277f2..a12a25cf9 100644
--- a/archives/2022/06/index.html
+++ b/archives/2022/06/index.html
@@ -336,8 +336,8 @@ 生信技工
@@ -356,8 +356,8 @@ 生信技工
@@ -503,12 +503,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/07/index.html b/archives/2022/07/index.html
index a4710d5d0..d17c2b978 100644
--- a/archives/2022/07/index.html
+++ b/archives/2022/07/index.html
@@ -256,8 +256,8 @@ 生信技工
@@ -276,8 +276,8 @@ 生信技工
@@ -316,8 +316,8 @@ 生信技工
@@ -336,8 +336,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/07/page/2/index.html b/archives/2022/07/page/2/index.html
index 8a7c46f52..c8f4132cc 100644
--- a/archives/2022/07/page/2/index.html
+++ b/archives/2022/07/page/2/index.html
@@ -386,12 +386,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/08/index.html b/archives/2022/08/index.html
index 85146c472..bca70e647 100644
--- a/archives/2022/08/index.html
+++ b/archives/2022/08/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/09/index.html b/archives/2022/09/index.html
index 2927230de..44cf44aff 100644
--- a/archives/2022/09/index.html
+++ b/archives/2022/09/index.html
@@ -443,12 +443,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/10/index.html b/archives/2022/10/index.html
index eae7bc3c4..0c8ccc1f4 100644
--- a/archives/2022/10/index.html
+++ b/archives/2022/10/index.html
@@ -443,12 +443,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html
index 9634b0196..6ef4db352 100644
--- a/archives/2022/11/index.html
+++ b/archives/2022/11/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/12/index.html b/archives/2022/12/index.html
index f4cf7e9fb..b69e17cb4 100644
--- a/archives/2022/12/index.html
+++ b/archives/2022/12/index.html
@@ -383,12 +383,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/index.html b/archives/2022/index.html
index 0049c7128..4a1245e43 100644
--- a/archives/2022/index.html
+++ b/archives/2022/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/page/2/index.html b/archives/2022/page/2/index.html
index d53fc5a6f..10b3a2a87 100644
--- a/archives/2022/page/2/index.html
+++ b/archives/2022/page/2/index.html
@@ -316,8 +316,8 @@ 生信技工
@@ -336,8 +336,8 @@ 生信技工
@@ -376,8 +376,8 @@ 生信技工
@@ -396,8 +396,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/page/3/index.html b/archives/2022/page/3/index.html
index e0cdb2f41..f990be8d2 100644
--- a/archives/2022/page/3/index.html
+++ b/archives/2022/page/3/index.html
@@ -416,8 +416,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/page/4/index.html b/archives/2022/page/4/index.html
index 0ab78c365..848f1ae3c 100644
--- a/archives/2022/page/4/index.html
+++ b/archives/2022/page/4/index.html
@@ -236,8 +236,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2022/page/5/index.html b/archives/2022/page/5/index.html
index 997ae5385..e2937517d 100644
--- a/archives/2022/page/5/index.html
+++ b/archives/2022/page/5/index.html
@@ -506,12 +506,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/03/index.html b/archives/2023/03/index.html
index a248ba238..7fb839744 100644
--- a/archives/2023/03/index.html
+++ b/archives/2023/03/index.html
@@ -296,8 +296,8 @@ 生信技工
@@ -316,8 +316,8 @@ 生信技工
@@ -463,12 +463,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/04/index.html b/archives/2023/04/index.html
index 5dcd872d3..ca2ba8403 100644
--- a/archives/2023/04/index.html
+++ b/archives/2023/04/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/05/index.html b/archives/2023/05/index.html
index 9a4cc32c5..9251e04ff 100644
--- a/archives/2023/05/index.html
+++ b/archives/2023/05/index.html
@@ -383,12 +383,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/09/index.html b/archives/2023/09/index.html
index cd6bd8828..08121cddc 100644
--- a/archives/2023/09/index.html
+++ b/archives/2023/09/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/10/index.html b/archives/2023/10/index.html
index 005335603..46e10f4f9 100644
--- a/archives/2023/10/index.html
+++ b/archives/2023/10/index.html
@@ -236,8 +236,8 @@ 生信技工
@@ -256,8 +256,8 @@ 生信技工
@@ -463,12 +463,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/11/index.html b/archives/2023/11/index.html
index e3e760258..bdbfe8299 100644
--- a/archives/2023/11/index.html
+++ b/archives/2023/11/index.html
@@ -443,12 +443,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/12/index.html b/archives/2023/12/index.html
index 01b55f0cc..76dd37280 100644
--- a/archives/2023/12/index.html
+++ b/archives/2023/12/index.html
@@ -383,12 +383,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/index.html b/archives/2023/index.html
index c17a6841b..a29759d3a 100644
--- a/archives/2023/index.html
+++ b/archives/2023/index.html
@@ -336,8 +336,8 @@ 生信技工
@@ -356,8 +356,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2023/page/2/index.html b/archives/2023/page/2/index.html
index 6b96ba626..1112726bc 100644
--- a/archives/2023/page/2/index.html
+++ b/archives/2023/page/2/index.html
@@ -396,8 +396,8 @@ 生信技工
@@ -416,8 +416,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/01/index.html b/archives/2024/01/index.html
index 04daa0f69..61b18f980 100644
--- a/archives/2024/01/index.html
+++ b/archives/2024/01/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/05/index.html b/archives/2024/05/index.html
index cfb64a984..b91cec635 100644
--- a/archives/2024/05/index.html
+++ b/archives/2024/05/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/06/index.html b/archives/2024/06/index.html
index bfbf58684..8d764988e 100644
--- a/archives/2024/06/index.html
+++ b/archives/2024/06/index.html
@@ -376,8 +376,8 @@ 生信技工
@@ -396,8 +396,8 @@ 生信技工
@@ -543,12 +543,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/08/index.html b/archives/2024/08/index.html
index a68471d8f..ae128d5b0 100644
--- a/archives/2024/08/index.html
+++ b/archives/2024/08/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/09/index.html b/archives/2024/09/index.html
index 36bbe166d..0826d1cdd 100644
--- a/archives/2024/09/index.html
+++ b/archives/2024/09/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/10/index.html b/archives/2024/10/index.html
index b36f5a642..de812db38 100644
--- a/archives/2024/10/index.html
+++ b/archives/2024/10/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/11/index.html b/archives/2024/11/index.html
index 86537a69a..5c91fb8d9 100644
--- a/archives/2024/11/index.html
+++ b/archives/2024/11/index.html
@@ -403,12 +403,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/index.html b/archives/2024/index.html
index acd22c068..6ba07ed39 100644
--- a/archives/2024/index.html
+++ b/archives/2024/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/page/2/index.html b/archives/2024/page/2/index.html
index 482918638..3093f8951 100644
--- a/archives/2024/page/2/index.html
+++ b/archives/2024/page/2/index.html
@@ -336,8 +336,8 @@ 生信技工
@@ -356,8 +356,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/2024/page/3/index.html b/archives/2024/page/3/index.html
index 7db8376f2..ac4aa2bcd 100644
--- a/archives/2024/page/3/index.html
+++ b/archives/2024/page/3/index.html
@@ -386,12 +386,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/index.html b/archives/index.html
index edc0461de..4960bb97e 100644
--- a/archives/index.html
+++ b/archives/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/10/index.html b/archives/page/10/index.html
index 28b057676..521eb8149 100644
--- a/archives/page/10/index.html
+++ b/archives/page/10/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/11/index.html b/archives/page/11/index.html
index ace9451ac..21c327811 100644
--- a/archives/page/11/index.html
+++ b/archives/page/11/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/12/index.html b/archives/page/12/index.html
index d5c337fe1..62ff0203d 100644
--- a/archives/page/12/index.html
+++ b/archives/page/12/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/13/index.html b/archives/page/13/index.html
index 0abafe262..58171e8b6 100644
--- a/archives/page/13/index.html
+++ b/archives/page/13/index.html
@@ -572,12 +572,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/14/index.html b/archives/page/14/index.html
index 3c3b7a65f..cabcfb1de 100644
--- a/archives/page/14/index.html
+++ b/archives/page/14/index.html
@@ -386,12 +386,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/2/index.html b/archives/page/2/index.html
index 384a1353e..01d8e0b6a 100644
--- a/archives/page/2/index.html
+++ b/archives/page/2/index.html
@@ -336,8 +336,8 @@ 生信技工
@@ -356,8 +356,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/3/index.html b/archives/page/3/index.html
index 3afa32a70..d26bd2122 100644
--- a/archives/page/3/index.html
+++ b/archives/page/3/index.html
@@ -359,8 +359,8 @@ 生信技工
@@ -379,8 +379,8 @@ 生信技工
@@ -569,12 +569,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/4/index.html b/archives/page/4/index.html
index da7ab78d3..9aecb2e95 100644
--- a/archives/page/4/index.html
+++ b/archives/page/4/index.html
@@ -416,8 +416,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/5/index.html b/archives/page/5/index.html
index 719d291b7..b98b59db6 100644
--- a/archives/page/5/index.html
+++ b/archives/page/5/index.html
@@ -236,8 +236,8 @@ 生信技工
@@ -569,12 +569,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/6/index.html b/archives/page/6/index.html
index c4c22384f..2a59deed9 100644
--- a/archives/page/6/index.html
+++ b/archives/page/6/index.html
@@ -336,8 +336,8 @@ 生信技工
@@ -356,8 +356,8 @@ 生信技工
@@ -396,8 +396,8 @@ 生信技工
@@ -416,8 +416,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/7/index.html b/archives/page/7/index.html
index 17b2a73be..0ee90f5e8 100644
--- a/archives/page/7/index.html
+++ b/archives/page/7/index.html
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/8/index.html b/archives/page/8/index.html
index db3b060bf..dd7432459 100644
--- a/archives/page/8/index.html
+++ b/archives/page/8/index.html
@@ -236,8 +236,8 @@ 生信技工
@@ -256,8 +256,8 @@ 生信技工
@@ -566,12 +566,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/archives/page/9/index.html b/archives/page/9/index.html
index 0628df30a..1eec6f365 100644
--- a/archives/page/9/index.html
+++ b/archives/page/9/index.html
@@ -569,12 +569,12 @@ 生信技工
- 705k
+ 706k
|
- 10:41
+ 10:42
diff --git a/atom.xml b/atom.xml
index 479e81326..072d42ade 100644
--- a/atom.xml
+++ b/atom.xml
@@ -6,7 +6,7 @@
- 2024-11-26T12:32:05.102Z
+ 2024-11-27T02:49:27.336Z
http://example.com/
@@ -21,7 +21,7 @@
http://example.com/2024/11/26/omics_genome.sequencing_NGS_data.preprocessing/
2024-11-25T16:00:00.000Z
- 2024-11-26T12:32:05.102Z
+ 2024-11-27T02:49:27.336Z
对二代测序进行预处理。包括从NCBI下载SRA格式数据,把SRA格式转为fastq格式。对二代测序的下机数据的质控,包括fastp去除接头和低质量序列,fastqc获取质量报告,trimmomatic去除接头和低质量序列,fastuniq为genome survey等情况去除重复序列。
@@ -41,6 +41,8 @@
+
+
@@ -49,8 +51,6 @@
-
-
@@ -96,12 +96,12 @@
-
-
+
+
@@ -251,10 +251,10 @@
-
-
+
+
@@ -315,10 +315,10 @@
-
-
+
+
@@ -350,10 +350,10 @@
-
-
+
+
@@ -387,10 +387,10 @@
-
-
+
+
@@ -422,10 +422,10 @@
-
-
+
+
@@ -536,14 +536,14 @@
- 三代基因组测序PacBio CLR和CCS模式下机数据的预处理
-
- http://example.com/2024/06/04/omics_genome.sequencing_TGS_data.preprocessing/
+ 基因组测序简介
+
+ http://example.com/2024/06/04/omics_genome.sequencing_intro/
2024-06-03T16:00:00.000Z
- 2024-06-05T06:26:45.037Z
+ 2024-11-26T07:49:33.582Z
- 介绍三代基因组测序PacBio CLR和CCS下机数据,命令规则,预处理方式。
+ 介绍基因组测序技术的分类(包括第一代、第二代和第三代测序技术)、原理、优缺点和应用。
@@ -553,11 +553,13 @@
-
-
+
+
+
+
@@ -566,7 +568,9 @@
-
+
+
+
@@ -580,19 +584,21 @@
+
+
- 基因组测序简介
-
- http://example.com/2024/06/04/omics_genome.sequencing_intro/
+ 三代基因组测序PacBio CLR和CCS模式下机数据的预处理
+
+ http://example.com/2024/06/04/omics_genome.sequencing_TGS_data.preprocessing/
2024-06-03T16:00:00.000Z
- 2024-11-26T07:49:33.582Z
+ 2024-06-05T06:26:45.037Z
- 介绍基因组测序技术的分类(包括第一代、第二代和第三代测序技术)、原理、优缺点和应用。
+ 介绍三代基因组测序PacBio CLR和CCS下机数据,命令规则,预处理方式。
@@ -602,10 +608,10 @@
+
-
-
+
@@ -615,9 +621,7 @@
-
-
-
+
@@ -633,10 +637,6 @@
-
-
-
-
diff --git a/categories/Windows/index.html b/categories/Windows/index.html
index 747744938..118081c8a 100644
--- a/categories/Windows/index.html
+++ b/categories/Windows/index.html
@@ -383,12 +383,12 @@
- 热图的简介和绘制
- /2022/11/06/bio_plot_heatmap/
-
-
+ 进化树相关知识
+ /2021/11/20/bio_evolution_tree_intro/
+
-1. 热图(heatmap) 热图(heatmap)是在两个维度用不同颜色展示一种现象的大小的一种数据可视化技术。有两种本质上不同的热图,网格热图(grid heatmap)和空间热图(spatial heatmap)。
+1. 进化树 系统树(phylogenetic tree/phylogeny),又叫进化树(evolutionary tree),是基于形态或遗传特征差异展示物种或其他实体间的进化关系的分支图或树图。
+2. 进化树分类 2.1. 根据有无祖先根分类
+有根树(rooted tree) 根节点是所有其他节点的父节点,每个带有后代的节点代表这些后代的最近共同祖先。在有根树中,只有根节点的度数(指传入和传出边的总数)是2,其他节点的最小度数都为3。使树生根的常见方式是指定无争议的外类群。
+无根树(unrooted tree) 仅说明叶节点的相关性,无需推断祖先。
+
+2.2. 根据分歧数量分类 有根树和无根树都可以是二叉的,也可以是多叉的。
-网格热图(grid heatmap) 网格热图用不同颜色代表不同数值的二维矩形图,同时两个维度还可以通过颜色进行聚类。
+二叉树(bifurcated tree) 有根二叉树每个内部节点都有两个后代,无根二叉树每个内部节点有三个邻近的自由树。
+多叉树(multifurcated tree) 有根多叉树在某些内部节点可能有两个以上后代,无根多叉树在某些内部节点可能有三个以上邻近自由树。
-比如不同物种在不同基因上的表达水平。
-
-
-Figure 1. heatmap集群热图
-
-空间热图(spatial heatmap) 空间热图将空间现象的大小通过颜色投射到地图上。
+2.3. 根据有无标签
+标签树(labeled tree) 标签树在叶节点有特定的值。
+非标签树(unlabeled tree) 只有树型。
-比如世界的温度分布图。
-
-
-Figure 2. heatmap空间热图
-
-等值线图(choropleth map) 此外,还有与空间热图相似的,常用于地理上可视化的等值线图(choropleth map)。等值线图按照地理边界分组,如国家,州,省或者人为划分的植被区和气候区等,常常具有不规则边界。
+2.4. 特殊的树的类型
+树状图(dendrogram) 树状图的总称,无论有无系统发生关系。
+分支树(cladogram) 只有分支模式,枝长不包含变化量信息,中间节点也不代表祖先。
+系统树(phylogram) 枝长与变化量/碱基替换数成比例。
+超度量树/时序树(chronogram) 枝长与时长成比例。
+速率树(ratogram) 枝长表示替换速率。
+达尔格伦树(dahlgrenogram) 系统发育树的部分样品的图。
+系统发育网(phylogenetic network) 有向无环图。
+罗马树(romerogram)/纺锤树(spindle diagram)/气泡树(bubble diagram) 横向宽度代表生物的分类学多样性,纵坐标是地质时间。为了反映多个类群的丰度随着时间的变化。由于不适合处理并系类群,被提议不再使用。
+生命珊瑚(coral of life) 达尔文提出珊瑚可能比树更适合描绘生命的进化。
-比如美国各州人口密度图。
-
-
-Figure 3. choropleth map等值线图
-2. 绘制热图 这篇文章记录的是绘制网格热图的方法,包括常用的R包pheatmap和ggplot2。
-2.1. pheatmap包
-输入数据(gene_expression.txt)的格式
+3. 读进化树 3.1. 根据树型
+当树的所有叶节点没有对齐的时候,枝长可能代表变化量/碱基替换数(phylogram)/替换速率(ratogram);
+当树的所有叶节点对齐的时候,枝长如果一致则无信息(cladogram),枝长如果不一致可能代表进化时长(chronogram)。
+
+4. reference
+wiki:Phylogenetic_tree
+https://www.nature.com/scitable/topicpage/reading-a-phylogenetic-tree-the-meaning-of-41956/
+
-第一行标题行
-第一列是基因名称
-第二列是数值(比如表达量)
-可以是一组数据,则只有第二列;也可以是多组数据,依次是第二列及之后列。
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-tf ath_1 ath_2 egr_1 egr_2 AP2 1.0043 0 0.942273 0 ARF 1.20516 1.58619 1.13073 1.48129
+ ]]>
+
+ bio
+ evolution
+ tree
+
+
+ phylogeny
+ evolutionary tree
+ tree
+ phylogenetic tree
+ bifurcated tree
+ cladogram
+ phylogram
+ chronogram
+
+
+
+ 质体的分类、角色和转换
+ /2024/05/31/bio_plastid_typesandroles/
+
-
-读取数据和聚类
-df<- read.table( "gene_expression.txt" , sep= " " , header = T , row.names = 1 ) df_row <- hclust( dist( df) ) df <- df[ df_row$ order, ] df_column <- hclust( dist( t( df) ) ) df <- df[ , df_column$ order]
-
-绘制热图
-BiocManager:: install( "pheatmap" ) library( pheatmap) pheatmap( mat= df, color = colorRampPalette( c ( "lightgreen" , "yellow" , "orange" , "red" ) ) ( 20 ) , legend_breaks = c ( 1 : 4 ) , legend_labels = c ( "1.0" , "2.0" , "3.0" , "4.0" ) , border_color= "white" , treeheight_row = 50 , treeheight_col = 8 , display_numbers = TRUE , number_color = "black" , main = "TF heatmap" , cellwidth = 50 , cellheight = 10 )
-
-更完整的pheatmap参数
-
-
-pheatmap( mat = mat, scale = "row" , clustering_method = "complete" , clustering_distance_rows = "euclidean" , clustering_distance_cols = "euclidean" , cluster_cols = TRUE , cluster_rows = TRUE , treeheight_col = 35 , treeheight_row = 45 , annotation_col = coldata, cutree_cols = 2 , cutree_rows = 2 , show_colnames = TRUE , show_rownames = TRUE , fontsize_row = 7.5 , fontsize_col = 7.5 , color = colorRampPalette( colors = c ( "blue" , "white" , "red" ) ) ( 100 ) , main = paste( "Cluster Heatmap of" , nrow( mat) , "features" , sep = " " ) , filename = "heatmap.pdf" , width = 7 , height = 7 )
+植物细胞内的质体会随着植物生长和环境的变化而变化,不同植物组织和器官内的质体是不同的。
+
-2.2. ggplot2包 这个我还没试过,把https://zhuanlan.zhihu.com/p/464964887提到的代码摘抄在这。
-data <- scale( data, center = TRUE , scale = TRUE ) row_clust <- hclust( dist( mat, method = "euclidean" ) , method = "complete" ) rowInd <- row_clust$ order col_clust <- hclust( dist( t( mat) , method = "euclidean" ) , method = "complete" ) colInd <- col_clust$ order mat <- mat[ rowInd, colInd] melt_mat <- melt( mat) colnames( melt_mat) <- c ( "Feature" , "Sample" , "Value" ) h <- ggtree( row_clust, layout = "rectangular" , branch.length = "none" ) v <- ggtree( col_clust) + layout_dendrogram( ) p.ggplot <- ggplot( data = mat_new, aes( x = Sample, y = Feature, fill = Value) ) + geom_tile( ) + theme_minimal( ) + scale_fill_gradient2( low = "blue" , high = "red" , mid = "white" , name = "Expression" ) + scale_y_discrete( position = "right" ) + labs( x = "" , y = "" ) + theme( axis.title = element_text( size = 15 ) , axis.text.y = element_text( size = 10 ) , axis.text.x = element_text( angle = 90 , size = 11 ) , legend.title = element_text( size = 15 ) , legend.text = element_text( size = 11 ) ) p.group <- ggplot( data = coldata, aes( x = Sample, y = Condition, fill = Group) ) + geom_tile( ) + scale_y_discrete( position = "right" ) + theme_minimal( ) + theme( axis.text = element_blank( ) , axis.title = element_blank( ) , legend.title = element_text( size = 15 ) , legend.text = element_text( size = 11 ) ) + labs( fill = "Group" ) p.all <- p.ggplot %>% insert_left( h, width = 0.15 ) %>% insert_top( p.group, height = 0.05 ) %>% insert_top( v, height = 0.1 )
+Figure 1. 植物质体的分类、角色和转换
+
-3. references
-https://en.wikipedia.org/wiki/Heat_map
-https://zhuanlan.zhihu.com/p/464964887
+Figure 2. 植物质体的分类、角色和转换
+reference
+https://www.frontiersin.org/journals/plant-science/articles/10.3389/fpls.2021.692024/full#B52
@@ -521,68 +426,171 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
bio
- plot
+ plastid
- R package
- heatmap
- pheatmap
- ggplot2
+ plastid
+ 质体
+ proplastid
+ 原质体
+ leucoplast
+ 白质体
+ amyloplast
+ elaioplast
+ proteinoplast
+ chromoplast
+ 色质体
+ chloroplast
+ 叶绿体
+ etioplast
+ 黄化体
+ gerontoplast
+ 老年体
- 集合可视化 —— upset图
- /2021/09/29/bio_plot_upset/
-
+ 正交和反交在遗传学中的应用
+ /2024/06/18/bio_genetics_hybridization_reciprocal.cross/
+
-1. 多集合展示UpSet图 当有多个群组(集合)的数据,想要展示在不同的事物群组(集合)之间的数学或逻辑联系时,可使用韦恩Venn图和UpSet图展示多集合直接的共享关系和各自的独享关系。
-当集合数量少于等于5个时,多用韦恩图;当集合数量大于5个时,多用upset图。
-韦恩图的绘制推荐使用R包gplots,参考博文韦恩图 ;upset图的绘制推荐使用R包UpSetR,参考博文。
-1.1. 应用场景
-利用orthofinder找到的不同物种的orthogroups的结果来绘制Venn Diagram韦恩图或者UpSet plot图,查看不同物种间共享的orthogroups的数量关系。
+1. 正交和反交
+正反交(reciprocal cross)又称为互交,是指两个具有不同基因型的亲本杂交时配置父本和母本的两种方式。
+正反交是相对而言。如以A(♀)×B(♂)为正交,则B(♀)×A(♂)为反交。
+
+2. 正交和反交在遗传学中的应用 2.1. 判断某对性状是细胞核遗传和细胞质遗传
+细胞核遗传
-1.2. 数据准备 UpSetR的输入文件是表格形式,第一列是数据分类信息,后面列是每一个集合占一列(每个物种占一列),表格内容是1/0表示集合在每一个类别是否有数据。
-1.2.1. UpSetR自带数据 movies <- read.csv( system.file( "extdata" , "movies.csv" , package = "UpSetR" ) , header = T , sep= ";" ) mutations <- read.csv( system.file( "extdata" , "mutations.csv" , package = "UpSetR" ) , header = T , sep = "," ) head( movies) View( movies) head( mutations) View( mutations)
-
-
-> head( movies) Name ReleaseDate Action Adventure Children Comedy Crime Documentary Drama Fantasy Noir Horror Musical Mystery Romance SciFi Thriller War Western AvgRating Watches 1 Toy Story ( 1995 ) 1995 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 4.15 2077 2 Jumanji ( 1995 ) 1995 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3.20 701 3 Grumpier Old Men ( 1995 ) 1995 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 3.02 478 4 Waiting to Exhale ( 1995 ) 1995 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 2.73 170 5 Father of the Bride Part II ( 1995 ) 1995 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3.01 296 6 Heat ( 1995 ) 1995 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 3.88 940 > head( mutations) Identifier TTN PTEN TP53 EGFR MUC16 FLG RYR2 PCLO PIK3R1 PIK3CA NF1 MUC17 HMCN1 SPTA1 USH2A RB1 PKHD1 OBSCN AHNAK2 RYR3 RELN FRAS1 GPR98 DNAH5 ATRX APOB TCHH SYNE1 LRP2 KEL HRNR DNAH3 COL6A3 MUC5B LAMA1 DSP 1 02 - 0003 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 02 - 0033 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 02 - 0047 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 02 - 0055 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 5 02 - 2470 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 02 - 2483 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 DNAH8 CNTNAP2 SDK1 NBPF10 DNAH2 NLRP5 MLL3 IDH1 HCN1 FCGBP DOCK5 RIMS2 PCDHA1 MXRA5 HEATR7B2 GRIN2A FGD5 TMEM132D STAG2 SEMA3C SCN9A PRDM9 POM121L12 PIK3CG PDGFRA GABRA6 FLG2 FBN3 FBN2 FAT2 DNAH11 DMD COL1A2 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ABCC9 XIRP2 TSHZ2 TEX15 SLIT3 RBM47 PIK3C2G PCDH11X MYH2 MACF1 KSR2 DNAH9 DCHS2 CSMD3 CDH18 BCOR AHNAK ZAN TRRAP THSD7B TAF1L SPAG17 SLCO5A1 SCN10A RYR1 RIMBP2 PLEKHG4B PCDHB7 NPTX2 NOS1 LZTR1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
-
-1.2.2. orthofinder数据 从orthofinder的结果文件Results_Aug14/Orthogroups/Orthogroups.GeneCount.tsv稍加处理就可以作为输入文件,展示不同物种的orthogroups集合的共享情况。
-sed -E "s/\t[1-9][0-9]*/\t1/g" Orthogroups.GeneCount.tsv |sed "s/\.pep//g" >orthogroups.upset
# 把Orthogroups.GeneCount.tsv中的非零数字替换成1。
-在R中用mutations <- read.csv("orthogroups.upset", header=TRUE, sep = "\t")
读取orthogroups.upset。
-1.3. UpSetR包安装 install.packages("UpSetR"); # 安装 library(UpSetR); # 载入UpSetR require(ggplot2); require(plyr); require(gridExtra); require(grid); # 载入包
-
-1.4. UpSetR包使用 1.4.1. upset函数
-upset(mutations)
可以看到upset图的效果
-
-调整参数做指定数据显示
-
+
+由细胞核中的基因控制的遗传,称为细胞核遗传 。由孟德尔的遗传试验得知:在细胞核遗传中,正反交的结果是一样的。
+
+
+细胞质遗传
-upset( mutations, sets = c ( "MUC16" , "EGFR" , "TP53" , "TTN" ) , nset = 4 , nintersects = 20 , mb.ratio = c ( 0.55 , 0.45 ) , order.by = c ( "degree" , "freq" ) , keep.order = TRUE , decreasing = c ( TRUE , FALSE ) , number.angles = 30 , point.size = 2 , line.size = 1 , mainbar.y.label = "Intersection size of gene family" , sets.x.label = "genome size" , text.scale = c ( 1.3 , 1.3 , 1 , 1 , 1.5 , 1 ) )
-
-
-
-Figure 1. movies upset
-1.4.2. queries参数 upset函数中可以添加queries参数,用于突出显示(上色)部分数据。
-
-queries queries是一个由多个query组成的list;每个query也是一个list,作为一次查询数据并突出显示的请求。
-
-query query也是list格式,由查询函数query和其他参数(param,color,active,query.name)组成,其中query,param是必须设置的参数。
-query: 指定查询函数,UpSetR有内置(比如intersects),也可以自定义函数后调用。
-param: list格式, 指定query作用的数据。
-color:设置颜色,可选设置。
-active:显示类型,TRUE/T表示用颜色覆盖条形图,FALSE/F表示在条形图顶端显示三角形。
-query.name:添加query图例名称。
+由线粒体或叶绿体(植物)中的基因控制的遗传,称为细胞质遗传 。由紫茉莉质体的遗传实验得知:在细胞质遗传中,正反交的结果是不一样的。
-
-queries参数示例
-
+
+判断方式
-把”EGFR”和”TP53”两个基因共同拥有的突变标上蓝色;把”TTN”基因特有的突变在直方图上标为红色。
+若正交和反交产生的F1的性状表现都与母本相同,则为细胞质遗传;若正交与反交产生的F1的性状表现都与父本相关,则为细胞核遗传。
-upset( mutations, sets= c ( "MUC16" , "EGFR" , "TP53" , "TTN" ) , queries = list ( list ( query = intersects, params = list ( "EGFR" , "TP53" ) , color = "blue" , active = T , query.name = "share EGFR and TP53" ) , list ( query = intersects, params= list ( "TTN" ) , color= "red" , active= T ) ) )
+2.2. 如果性状是细胞核遗传,判断控制性状的基因在常染色体(或性染色体同源区段)上还是性染色体非同源区段上
+常染色体(或性染色体同源区段)上的基因控制的遗传
+
+
+常染色体上的基因控制的遗传,无论正交、反交其后代的基因型、表现型及其比例都是相同的,与性别无关。
+性染色体的同源区段上的基因控制的遗传与常染色体类似,所以要注意。
+
+
+性染色体上的基因控制的遗传
+
+
+对性别决定的生物来讲,由于两种性染色体中存在非同源部分。
+因此,正反交后代的基因型比例存在不同。
+
+
+判断方式
+
+
+若正交和反交产生的F1的性状表现比例一致,则控制性状的基因在常染色体上或者在性染色体同源区段上;若正交与反交产生的F1的性状比例不一致,则控制性状的基因在性染色体非同源区段上。
+
+2.3. 判断植物果实的某种性状是由子房壁(珠被)发育而来的还是由受精胚珠发育而来的 果实的部分性状是子房壁(属于母本)发育而来,部分性状是由受精胚珠(属于子代)发育而来。
+
+子房壁(珠被)发育
+
+
+被子植物雌蕊子房壁会发育而形成的果实中(果肉)部分的大小、色泽、形态等特征。
+这些特征完全由母本的遗传物质决定,与父本的遗传物质无任何关系。
+因此,被子植物在进行正反交时,果实的性状完全表现为母本的性状,但这与细胞质遗传有着本质的区别。
+
+
+判断方式
+
+
+方法:用显性雄性个体与隐性雌性个体进行杂交(正交),再用隐性雄性个体与显性雌性个体进行杂交(反交)
+结果与结论:若性状完全与母本一致,即正交的性状为隐性性状而反交的性状为显性性状,则该性状是由子房壁(珠被)发育而来的。若性状表现出F1代特征,即全为显性性状,则该性状是由受精胚珠发育而来的。
+
+
+性状例子 已知甜玉米与非甜玉米为一对相对性状,且甜玉米对非甜玉米为隐性。探究玉米子粒中决定口味的部分是来自子房壁的发育,还是来自受精胚珠的发育。
+
+3. reference
+wiki:互交:https://zh.wikipedia.org/wiki/%E4%BA%92%E4%BA%A4
+wiki:reciprocal cross:https://en.wikipedia.org/wiki/Reciprocal_cross
+百度百科:正反交:https://baike.baidu.com/item/%E6%AD%A3%E5%8F%8D%E4%BA%A4/5883018#:~:text=%E6%AD%A3%E5%8F%8D%E4%BA%A4_%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91&text=%E6%AD%A3%E5%8F%8D%E4%BA%A4%EF%BC%88reciprocal%20crosses,%EF%BC%88%E2%99%82%EF%BC%89%E4%B8%BA%E5%8F%8D%E4%BA%A4%E3%80%82
+巧用正反交解决遗传中的问题:https://res.tongyi.com/resources/article/student/others/200803zt-xf-zw/200803zt/xf/gz/sw/XF1W0347.htm
+正交与反交在遗传学解题中的应用:https://blog.sina.com.cn/s/blog_b30a6c020101hmua.html
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bio
+ genetics
+ hybridization
+
+
+ bio
+ reciprocal cross
+ hybridization
+
+
+
+ 集合可视化 —— upset图
+ /2021/09/29/bio_plot_upset/
+
+
+1. 多集合展示UpSet图 当有多个群组(集合)的数据,想要展示在不同的事物群组(集合)之间的数学或逻辑联系时,可使用韦恩Venn图和UpSet图展示多集合直接的共享关系和各自的独享关系。
+当集合数量少于等于5个时,多用韦恩图;当集合数量大于5个时,多用upset图。
+韦恩图的绘制推荐使用R包gplots,参考博文韦恩图 ;upset图的绘制推荐使用R包UpSetR,参考博文。
+1.1. 应用场景
+利用orthofinder找到的不同物种的orthogroups的结果来绘制Venn Diagram韦恩图或者UpSet plot图,查看不同物种间共享的orthogroups的数量关系。
+
+1.2. 数据准备 UpSetR的输入文件是表格形式,第一列是数据分类信息,后面列是每一个集合占一列(每个物种占一列),表格内容是1/0表示集合在每一个类别是否有数据。
+1.2.1. UpSetR自带数据 movies <- read.csv( system.file( "extdata" , "movies.csv" , package = "UpSetR" ) , header = T , sep= ";" ) mutations <- read.csv( system.file( "extdata" , "mutations.csv" , package = "UpSetR" ) , header = T , sep = "," ) head( movies) View( movies) head( mutations) View( mutations)
+
+
+> head( movies) Name ReleaseDate Action Adventure Children Comedy Crime Documentary Drama Fantasy Noir Horror Musical Mystery Romance SciFi Thriller War Western AvgRating Watches 1 Toy Story ( 1995 ) 1995 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 4.15 2077 2 Jumanji ( 1995 ) 1995 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3.20 701 3 Grumpier Old Men ( 1995 ) 1995 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 3.02 478 4 Waiting to Exhale ( 1995 ) 1995 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 2.73 170 5 Father of the Bride Part II ( 1995 ) 1995 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3.01 296 6 Heat ( 1995 ) 1995 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 3.88 940 > head( mutations) Identifier TTN PTEN TP53 EGFR MUC16 FLG RYR2 PCLO PIK3R1 PIK3CA NF1 MUC17 HMCN1 SPTA1 USH2A RB1 PKHD1 OBSCN AHNAK2 RYR3 RELN FRAS1 GPR98 DNAH5 ATRX APOB TCHH SYNE1 LRP2 KEL HRNR DNAH3 COL6A3 MUC5B LAMA1 DSP 1 02 - 0003 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 02 - 0033 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 02 - 0047 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 02 - 0055 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 5 02 - 2470 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 02 - 2483 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 DNAH8 CNTNAP2 SDK1 NBPF10 DNAH2 NLRP5 MLL3 IDH1 HCN1 FCGBP DOCK5 RIMS2 PCDHA1 MXRA5 HEATR7B2 GRIN2A FGD5 TMEM132D STAG2 SEMA3C SCN9A PRDM9 POM121L12 PIK3CG PDGFRA GABRA6 FLG2 FBN3 FBN2 FAT2 DNAH11 DMD COL1A2 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ABCC9 XIRP2 TSHZ2 TEX15 SLIT3 RBM47 PIK3C2G PCDH11X MYH2 MACF1 KSR2 DNAH9 DCHS2 CSMD3 CDH18 BCOR AHNAK ZAN TRRAP THSD7B TAF1L SPAG17 SLCO5A1 SCN10A RYR1 RIMBP2 PLEKHG4B PCDHB7 NPTX2 NOS1 LZTR1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+
+1.2.2. orthofinder数据 从orthofinder的结果文件Results_Aug14/Orthogroups/Orthogroups.GeneCount.tsv稍加处理就可以作为输入文件,展示不同物种的orthogroups集合的共享情况。
+sed -E "s/\t[1-9][0-9]*/\t1/g" Orthogroups.GeneCount.tsv |sed "s/\.pep//g" >orthogroups.upset
# 把Orthogroups.GeneCount.tsv中的非零数字替换成1。
+在R中用mutations <- read.csv("orthogroups.upset", header=TRUE, sep = "\t")
读取orthogroups.upset。
+1.3. UpSetR包安装 install.packages("UpSetR"); # 安装 library(UpSetR); # 载入UpSetR require(ggplot2); require(plyr); require(gridExtra); require(grid); # 载入包
+
+1.4. UpSetR包使用 1.4.1. upset函数
+upset(mutations)
可以看到upset图的效果
+
+调整参数做指定数据显示
+
+
+upset( mutations, sets = c ( "MUC16" , "EGFR" , "TP53" , "TTN" ) , nset = 4 , nintersects = 20 , mb.ratio = c ( 0.55 , 0.45 ) , order.by = c ( "degree" , "freq" ) , keep.order = TRUE , decreasing = c ( TRUE , FALSE ) , number.angles = 30 , point.size = 2 , line.size = 1 , mainbar.y.label = "Intersection size of gene family" , sets.x.label = "genome size" , text.scale = c ( 1.3 , 1.3 , 1 , 1 , 1.5 , 1 ) )
+
+
+
+Figure 1. movies upset
+1.4.2. queries参数 upset函数中可以添加queries参数,用于突出显示(上色)部分数据。
+
+queries queries是一个由多个query组成的list;每个query也是一个list,作为一次查询数据并突出显示的请求。
+
+query query也是list格式,由查询函数query和其他参数(param,color,active,query.name)组成,其中query,param是必须设置的参数。
+
+query: 指定查询函数,UpSetR有内置(比如intersects),也可以自定义函数后调用。
+param: list格式, 指定query作用的数据。
+color:设置颜色,可选设置。
+active:显示类型,TRUE/T表示用颜色覆盖条形图,FALSE/F表示在条形图顶端显示三角形。
+query.name:添加query图例名称。
+
+
+queries参数示例
+
+
+
+把”EGFR”和”TP53”两个基因共同拥有的突变标上蓝色;把”TTN”基因特有的突变在直方图上标为红色。
+
+upset( mutations, sets= c ( "MUC16" , "EGFR" , "TP53" , "TTN" ) , queries = list ( list ( query = intersects, params = list ( "EGFR" , "TP53" ) , color = "blue" , active = T , query.name = "share EGFR and TP53" ) , list ( query = intersects, params= list ( "TTN" ) , color= "red" , active= T ) ) )
@@ -884,6 +892,116 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
Bauhinia
+
+ 批量计算Ka和Ks
+ /2022/09/07/bioinfo_Ks_batch.calculation.Ks/
+
+
+1. ParaAT 参考blog.ParaAT:https://yanzhongsino.github.io/2021/10/29/bioinfo_align_pep2cds/
+2. KaKs_Calculator 2.0 KaKs_Calculator 2.0工具包包含了17种计算Ka和Ks的方法,包含Gamma系列,并可识别基于蛋白编码序列的滑动窗口,基于C++和Java,在Windows和Linux平台都可使用。
+3. Ka和Ks计算
+ParaAT比对指定的基因对的氨基酸序列,并转化成比对的CDS序列,并可指定输出格式,如axt格式。
+KaKs_Calculator用于计算比对好的基因对的kaks。
+
+用还会用到两个脚本:
+
+4. 软件准备
+安装ParaAT.pl
+
+
+wget ftp://download.big.ac.cn/bigd/tools/ParaAT2.0.tar.gz tar -zxf ParaAT2.0.tar.gz cd ParaAT2.0 ParaAT.pl -h
+
+
+安装KaKs_Calculator2.0 KaKs_Calculator2.0下载地址:https://sourceforge.net/projects/kakscalculator2/?source=typ_redirect
+
+wget https://altushost-swe.dl.sourceforge.net/project/kakscalculator2/KaKs_Calculator2.0.tar.gz tar -zxf KaKs_Calculator2.0.tar.gz chmod 777 ./KaKs_Calculator2.0/bin/Linux/KaKs_Calculator chmod 777 ./KaKs_Calculator2.0/src/AXTConvertor
+
+
+然后把./KaKs_Calculator2.0/bin/Linux/
和./KaKs_Calculator2.0/src/
添加到环境变量即可使用KaKs_Calculator
和AXTConvertor
命令。
+
+5. 文件准备 ParaAT.pl需要三个输入文件,参考blog.ParaAT:https://yanzhongsino.github.io/2021/10/29/bioinfo_align_pep2cds/
+
+sample.id
+
+
+两列,每行对应两条要做成对比对的序列ID;
+任意行,ParaAT可以批量处理多个成对比对。
+一个例子:cat sample.collinearity |grep "species_prefix"|cut -f2,3 >sample.id
用MCScanX的结果文件提取blocks的同源gene对,获得sample.id文件。
+
+
+cds.fa
+
+
+
+pep.fa
+
+
+6. 操作步骤 6.1. 用ParaAT获取基因对比对序列 ParaAT比对sample.id指定的基因对的氨基酸序列,并转化成比对的CDS序列,并可指定输出为axt格式。
+
+命令
+
+echo "24" >proc #指定ParaAT.pl使用线程 ParaAT.pl -g -t -h sample.id -n cds.fa -a pep.fa -m mafft -p proc -f axt -o sample.paraat 2> paraat.log & #用ParaAT.pl调用mafft做每对基因的蛋白比对,并把蛋白比对转化成cds比对,输出axt格式。-g移除比对有gap的密码子,-t移除mismatched codons;-o指定生成目录;
+
+
+notes
+
+
+axt格式包括三行,第一行两个序列ID之间用短横杠-相连,第二行第一条序列,第三行第二条序列。
+建议加上-g和-t,免得后面计算Ks时报错Error. The size of two sequences in 'ctg00816-ctg08844' is not equal。
+ParaAT.pl命令中加上-k参数可以在获得axt文件后自动调用KaKs_Calculator计算kaks值,使用MA模型,比YN模型慢很多,推荐不加-k参数,而是手动用KaKs_Calculator的YN模型,生成sample.axt_yn.kaks文件。
+
+6.2. 用KaKs_Calculator计算基因对的Ka、Ks和4dtv值 ParaAT.pl的-k参数只能指定KaKs_Calculator的MA模型计算kaks值,如果需要指定其他的模型,则可以手动运行计算。
+KaKs_Calculator可计算比对好的CDS序列的Ka和Ks。
+
+计算Ka和Ks
+
+
+获得all.kaks文件cd sample.paraat # 进入ParaAT.pl生成的文件夹 for i in `ls *axt`;do KaKs_Calculator -i $i -o ${i}_yn.kaks -m YN;done #用YN模型计算每个gene对的KaKs,生成四列数据,gene对,Ka,Ks,Ka/Ks for i in `ls |grep "_yn.kaks"`;do awk 'NR>1{print $1"\t"$3"\t"$4"\t"$5}' $i >>../all.kaks;done #合并kaks到all.kaks文件
+
+
+计算4dtv
+
+
+获得all.4dtv文件cd sample.paraat # 进入ParaAT.pl生成的文件夹 for i in `ls *axt`;do axt2one-line.py $i ${i}.one-line;done #多行axt文件转换成单行 ls |grep "axt.one-line"|while read id;do calculate_4DTV_correction.pl $id > ${id%%one-line}4dtv;done #计算4dtv值,生成两列数据,gene对,4dtv for i in `ls |grep "4dtv"`;do awk 'NR>1{print $1"\t"$3}' $i >>../all.4dtv;done #合并4dtv值到all.4dtv
+
+
+合并和整理结果
+
+
+获得all.results文件cd .. #返回上一级目录 join all.kaks all.4dtv |sed "s/ /\t/g" |awk '$3 != "NA" {print $0}' |sed '1i\genepair\tKa\tKs\tKa/Ks\t4dtv_corrected' >all.results #以gene对为基准,join合并kaks和4dtv值到一个文件,然后过滤Ks值为NA的无效数据,添加标题行。 rm all.kaks* all.4dtv* #删除中间文件
+
+7. references
+ParaAT paper:https://www.sciencedirect.com/science/article/pii/S0006291X12003518
+KaKs_Calculator2.0 github:https://github.com/kullrich/kakscalculator2
+KaKs_Calculator2.0 paper:https://www.sciencedirect.com/science/article/pii/S1672022910600083?via%3Dihub
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bioinfo
+ Ks
+
+
+ Ks
+ Ka
+ 4dtv
+ ParaAT
+ KaKs_Calculator
+
+
Circos圈图绘制
/2021/11/16/bio_plot_Circos/
@@ -1012,243 +1130,338 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 鉴定全基因复制事件(WGD)后保留的复制基因
- /2022/10/18/bioinfo_WGD_geneRetention/
-
+ 多序列比对的整体可视化
+ /2024/08/02/bioinfo_alignment_align_MSA_visualization/
+
-1. 全基因组复制事件(WGD) 全基因组复制事件(WGD)是指在生物进化历史上发生的全基因组范围的染色体加倍、基因复制的事件,根据目前研究现状,WGD在植物进化历史上是很常见的。
-2. WGD后保留的复制基因 全基因组复制事件(WGD)后基因的命运有所不同。有些复制的基因对中的一个会发生变异、甚至假基因化,从而使得目前我们观察到的基因组上这类基因是单拷贝的;有些复制的基因对则保留到现在,成为WGD的证据。
-3. 思路 3.1. 参考 通过参考焦远年团队的文章: https://www.sciencedirect.com/science/article/pii/S1674205219303594 的 Methods部分,构建了以下分析思路,用来实现对发生特定WGD事件的物种的基因复制保留分析。
+一句话总结:推荐使用AliView进行多序列比对的整体可视化。
+1. 多序列比对的可视化 通过肉眼查看多序列比对结果,可以用MEGA, Bioedit, Genious, AliView等软件。
-实现的目的是:找到某物种基因组上那些在进化历史上发生特定WGD事件后保留至今的基因对,尽可能减少假阳性和假阴性。
-文章里用了多个软件,目前Orthofinder2可以实现第2,3,4,5步骤。
+MEGA, Bioedit可以查看局部比对结果,并对碱基/氨基酸渲染颜色,但无法从整体上查看比对结果,即无法对比对结果进行缩放(Zoom out/in)。
+Genious可以对比对结果缩放(Zoom out/in),从而从整体上查看比对结果。但是它是商业软件,费用较高。可以用邮箱注册试用。
+AliView是免费开源的软件,支持对比对结果缩放(Zoom out/in),从整体上查看比对结果,推荐使用。
-3.2. 步骤
-数据
-
-
-多个物种的基因组。最少两个物种,除了发生WGD的被分析物种外,还要包括至少一个不共享此次WGD的外类群。
-如果要分析多个物种各自的WGDs,也可以一起构建物种树和基因树,在各自筛选基因树做各自WGD保留基因的根系。
+2. AliView
-
-基因家族(gene family)同源关系的鉴定
-
-
-
-构建物种树
-
-
-文章用的APG系统的物种树。
-发现OrthoFinder2可以直接实现物种树构建。
-或者用单拷贝基因构建,RAxML-NG和IQ-TREE等软件都可。
-
-
-构建基因树
+需要查看多序列比对的整体效果,只需在AliView上打开多序列比对文件,然后File-Export alignments as image即可导出图,注意导出的图不包含序列ID。
+
+
+Figure 1. 多序列比对整体图
+3. msaviewer 另外,NCBI有个在线工具msaviewer(NCBI Multiple Sequence Alignment Viewer),支持对多序列比对结果进行缩放(Zoom out/in),查看整体比对。
+https://www.ncbi.nlm.nih.gov/projects/msaviewer/
+4. references
+https://ormbunkar.se/aliview/
+https://github.com/AliView/AliView3
+https://www.ncbi.nlm.nih.gov/projects/msaviewer/
+
-文章里是用的是,通过OrthoMCL鉴定出来的orthogroups,筛除掉少于4个基因和不包含外类群的orthogroups来构建。
-我发现OrthoFinder2可以直接实现基因树构建,但基因树的筛选需要手动进行。
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
-根据物种树整理基因树的节点
-
+ ]]>
+
+ bioinfo
+ alignment
+ align
+ MSA
+
+
+ alignment
+ Multiple Sequence Alignment
+ MSA
+ visualization
+ AliView
+ msaviewer
+
+
+
+ 介绍序列比对(Sequence Alignment)
+ /2021/09/06/bioinfo_alignment_align_intro/
+
+
+写在前面 :
-通过与物种树的节点比较,对基因树的节点进行整理,保持与物种树一致。
-文章是用软件Notung2.9来根据物种树的拓扑,融合OrthoMCL的基因树结果。
+比对软件的选择: 要是是基因组大数据的序列做比对,优先选择MAFFT (快速且兼顾准确);要是少量序列比对,优先选择PRANK (准确);要是极少数序列比对,哪个方便选哪个,一般Clustal和MUSCLE (方便)会整合到许多软件里,会更方便使用。
+过滤软件的选择: 目前暂时优先选trimAl 。
-
-根据物种树拓扑筛选基因树
+update-20211006:今天发现PRANK这个软件比对过后序列的顺序会被打乱,后续处理要小心。
+1. 序列比对(sequence alignment) 1.1. 概念 在生物信息学中,序列比对(sequence alignment)是指根据相似性排列DNA,RNA或者protein序列,通过在序列中插入空格(gap)来使得相似的碱基/氨基酸在相同列对齐的一种方法。
+1.2. 方法 比对方法通常包括全局比对(global alignments)和局部比对(local alignments)。
+
+全局比对(global alignments) 全局比对强制要求比对跨越所有序列的整个长度,尽量对齐每条序列的每个碱基,当序列碱基和长度大致相似时最有用。通常全局比对用Needleman-Wunsch算法,是一种动态规划算法。
+局部比对(local alignments) 局部比对则确认通常有较大分歧的长序列内的相似性,有更多的计算相似性区域的额外的挑战。通常在较长序列包含相似序列基序的差异较大序列中更有用,常见的是Smith-Waterman算法,也是一种动态规划算法。
+混合比对(Hybrid methods) 全局和局部比对都使用的方法。
-
-通过指定一些标准,从OrthoFinder2或者OrthoMCL的结果中筛选符合物种树的基因树,使用这些基因树的基因对作为有发生基因复制事件证据的基因对。
-文章里的标准是,两个子枝(child branches)需要拥有来自至少一个最近共同祖先的基因,父母节点(parental node)和至少一个子节点(child nodes)有超过50%的支持率。
-这个也需要手动进行。
-
-
-移除串联重复(tandem duplications)
+1.3. 类型 按照序列的数量分为成对比对(pairwise alignment)和多序列比对(multiple sequence alignment)。
+
+成对比对(pairwise alignment)
-移除串联重复tandem,这些不是全基因组复制事件中产生。
-文章里对tandem的鉴定用的标准是两个基因的位置在五个基因以内即做看作tandem。
-操作上,我是通过基因ID来实现的(如果基因ID的编号相差在5以内就被看作tandem,这种基因树被删除)。注释基因组时对基因ID根据位置进行排序和整理的好处这个时候就体现了。
+两条序列的比对。因为计算效率很高,通常不需要高精度方法。
+常见的三种方法是点阵法(dot-matrix methods),动态规划法(dynamic programming)和字节法(word methods)。
-
-鉴定基因复制事件的基因
+
+多序列比对(multiple sequence alignment)
-通过以上4,5,6,7步骤的筛选,我们获得代表WGD的基因树,这也就意味着得到了WGD后保留的复制基因(基因树上那些基因)。
-把得到的基因树上的基因根据位置提取出来,分别从两个child branches中各提取一个基因,组成一个基因对。有些基因树上只有一个基因对,有些可能不止两个基因,会产生多于一个基因对。
+三条及以上序列的比对,是成对比对的扩展,算法上有些差异,以及更复杂。是这篇博客主要讲的内容。
-
-多次WGDs
-
+2. 多序列比对(Multiple Sequence Alignment,MSA) 2.1. 概念 多序列比对(Multiple Sequence Alignment,MSA)是对三个以上的生物学序列(biological sequence),如蛋白质序列、DNA序列或RNA序列所作的序列比对。 目的是在不改变序列顺序的前提下,尽可能地把不同序列的相同碱基或者氨基酸排在同一列,并认为同一列的序列在进化上是同源的,有共同的祖先。
+2.2. 用途 比对之后的序列,可用于进化学研究。比如,比较序列差异来推断序列进化历史(eg. 分化时间)和进化方式(突变/插入缺失/倒置等)。
+常见的应用:
-如果系统发育树的同一枝上有超过一次的WGD事件(比如某物种特有两次WGDs),则通过计算鉴定出来的复制基因对的Ks,通过Ks区分这些WGDs。
-例如一次WGD的Ks峰值在0.2,另一次在0.7,则可一刀切的把Ks大于两者平均值$$0.45=(0.2+0.7)/2$$的那些基因对算作0.7那次WGD保留的,Ks小于0.45的算作0.2那次保留的。
-这个是没有其他更好的解决办法的处理方式,在文章中对水稻等发生两次WGDs的物种也是这样处理的。
+构建系统发育树:亲缘关系的分析。
+比较基因功能:比较不同物种间的基因功能。
+预测蛋白质结构,分类和注释蛋白和ncRNA:通过与已知功能的基因序列的相似性比对,进行基因功能的预测和注释。
+序列拼接:通过比对,组装基因组。
+突变分析:不同个体基因组间的差异;不同物种基因组间的共线性和结构变异。
+检测适应性进化
-
-TF分析【可选】
-
+2.3. 重要性 多序列比对的准确性与进化分析的准确性息息相关,不同比对软件和过滤软件的结果不同。
+Blackburner和Whelan在2013年发表在MBE上的文章《Class of Multiple Sequence Alignment Algorithm Affects Genomic Analysis》对不同的比对算法和软件进行了比较分析,提出多序列比对MSA方法对下游分析至关重要,系统发育树和分支长度的推断高度依赖使用的多序列比对MSA类别,基于相似性的比对软件倾向于识别适应性进化(正选择)。
+简单的对齐后过滤不能解决不同MSA方法间的差异。
+3. 多序列比对(Multiple Sequence Alignment,MSA)的算法 多序列比对是双序列比对的扩展。
+3.1. 动态规划算法(dynamic programming) —— 主要用于双序列比对 算法特点:
-得到WGD后保留的基因对后,还可以进行转录因子(transcription factor,TF)的WGD后保留分析。
-
-notes:其中第4,5,6,7步骤都是在对基因树进行筛选,把那些代表了特定WGD的基因树筛选出来,避免其他基因树的干扰(比如tandem)。把代表WGD的基因树筛选出来后,也就意味着得到了WGD后保留的复制基因(基因树上那些基因)。
-4. 实战 4.1. 准备
-数据准备:物种A有两次物种特有的WGDs,不共享这两次WGD的外类群B。至少这两个物种的基因组数据。有其他物种的也可以一起用。
-
-4.2. orthofinder2构建物种树和基因树 4.2.1. OrthoFinder2运行
-4.2.2. 结果文件 要用的主要是三个个文件,在/OrthoFinder/Results_xx/Gene_Duplication_Events/目录下的Duplications.tsv和SpeciesTree_Gene_Duplications_0.5_Support.txt,以及/OrthoFinder/Results_xx/Orthogroups下的Orthogroups.txt。
-Duplications.tsv
+全局比对 全局比对是指将参与比对的两条序列里面的所有字符进行比对。全局比对在全局范围内对两条序列进行比对打分,找出最佳比对,主要被用来寻找关系密切的序列。其可以用来鉴别或证明新序列与已知序列家族的同源性,是进行分子进化分析的重要前提。其代表是Needleman-Wunsch算法。
+
+全局比对算法特点:
+
-是一个制表符分隔的文本文件,它列出了通过检查每个正群基因树的每个节点识别出的所有基因复制事件,每行代表至少一次基因复制事件。
-七列内容分别是:
-1.Orthogroup的ID
-2.Species Tree node:发生复制的物种树的分支,参见Species_Tree/SpeciesTree_rooted_node_labels.txt
-3.Gene tree node:与基因复制事件对应的节点,参见相应的orthogroup Resolved_Gene_Trees/ 中的树;
-4.Support:存在复制基因的两个副本的预期物种的比例
-5.Type:”Terminal”:物种树终端分支上的重复;”Non-Terminal”:物种树内部分支上的重复,因此被多个物种共享;”Non-Terminal”:STRIDE检查基因树的拓扑结构在复制后应该是什么;
-6.Genes 1:基因列表来自复制基因的一个副本,逗号分隔;
-7.Genes 2:基因列表来自复制基因的另一个副本,逗号分隔。
+打分矩阵:罚分分值不同,比对结果不同。
+计算比对最高得分的算法:常用Needleman-Wunsch算法。
+打印出最高得分相应的序列比对结果:根据得分矩阵回溯,找到最高得分结果。
-Orthogroup Species Tree Node Gene Tree Node Support Type Genes 1 Genes 2 OG0000000 N5 n62 0.5 Non-Terminal Mcandidum_pep_mc33950 Mdodecandrum_pep_DR005872, Mcandidum_pep_mc01326, Mdodecandrum_pep_DR006000, Mcandidum_pep_mc01492 OG0000000 N5 n63 1.0 Non-Terminal Mdodecandrum_pep_DR005872, Mcandidum_pep_mc01326 Mdodecandrum_pep_DR006000, Mcandidum_pep_mc01492 OG0000000 N5 n177 0.5 Non-Terminal Mdodecandrum_pep_DR002276, Mdodecandrum_pep_DR013872, Mcandidum_pep_mc36653, Mdodecandrum_pep_DR026891, Mcandidum_pep_mc22876, Mcandidum_pep_mc37513, Mdodecandrum_pep_DR026886 Mdodecandrum_pep_DR004265
-
-
-SpeciesTree_Gene_Duplications_0.5_Support.txt
+3.1.2. 基于局部比对的算法:Smith-Waterman算法
+局部比对 与全局比对不同,局部比对不必对两个完整的序列进行比对,而是在每个序列中使用某些局部区域片段进行比对。其产生的需求在于、人们发现有的蛋白序列虽然在序列整体上表现出较大的差异性,但是在某些局部区域能独立的发挥相同的功能,序列相当保守。这时候依靠全局比对明显不能得到这些局部相似序列的。其次,在真核生物的基因中,内含子片段表现出了极大变异性,外显子区域却较为保守,这时候全局比对表现出了其局限性,无法找出这些局部相似性序列。其代表是Smith-Waterman局部比对算法。BLAST是局部比对的一种推广。
+
+Smith-Waterman算法特点
+
-提供了物种树分支上的上述重复的总和。
-它是一个 newick 格式的文本文件。
-每个节点或物种名称后面的数字是在导致节点/物种的分支上发生的具有至少 50% 支持度的基因复制事件的数量。
-分支长度是标准分支长度,如 Species_Tree/SpeciesTree_rooted.txt 中给出的。
+是一种用来寻找并比较具有局部相似性区域的动态规划算法,适用于亲缘关系较远,整体上不具有相似性而在一些较小区域存在局部相似性的两条序列。
+使用迭代方法计算出每个序列的相似分值,保存在一个得分矩阵M中,然后根据这个得分矩阵,通过动态规划的方法回溯找到最优的比对序列。
-(((((Mcandidum.pep_7199:1,Mdodecandrum.pep_3425:1)N5_9299:1,Egrandis.pep_12485:1)N3_296:1,((Ptrichocarpa.pep_13300:1,(Csinensis.pep_5628:1,(Graimondii.pep_15253:1,Athaliana.pep_8750:1)N10_30:1)N8_5:1)N6_61:1,(Ppersica.pep_5798:1,(Mtruncatula.pep_23336:1,Csativus.pep_3576:1)N9_48:1)N7_12:1)N4_19:1)N2_96:1,Vvinifera.pep_7596:1)N1_535:1,Mguttatus.pep_8911:1)N0_1806;
-
-
-Orthogroups.txt
-
+3.2. 启发式搜索算法(heuristic algorithm):BWT算法和BLAST算法 一个基于直观或经验构造的算法,在可接受的花费下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计;目前绝大多数应用的比对软件都是启发式算法。
-Orthogroups.txt保存了鉴别的orthogroups的信息。
-第一列是OG开头的orthogroups的ID号,冒号结束;后面不同数量的列是此orthogroup包含的各物种的基因ID。
+渐进式算法(progressive methods): Clustal W,MUSCLE,T-Coffee,DiAlign
+迭代算法(iterative methods): MUSCLE,PRRP算法
+星对比算法
-4.3. 筛选基因复制事件和复制的基因对 4.3.1. 筛选基因家族 从Orthogroups.txt文件中筛选符合标准的orthogroups,提取orthogroups的ID号。
-
-筛选标准
-
+3.3. 随机算法 对构造好的目标函数进行最优解搜索。
-每个基因家族至少包含四个基因。
-每个基因家族至少包含一个外类群基因。
+遗传算法:借鉴生物界进化规律演化来的全局意义上的自适应随机搜索方法。
+模拟退火算法:用一物质系统的退火过程来模拟优化问题的寻优方法,当物质系统达到最小能量状态时,优化问题的目标函数也相应地达到了全局最优解。
+粒子群算法
-
-筛选命令
+3.4. 其他算法 还有一些其他不常见的算法
+
+分治算法
+蚁群算法
+4. 序列选择和比对前处理 一般来说,同源序列、同一家族的序列才会进行比对。
+通用的序列选择标准 :
-cat /path/to/OrthoFinder/Results_xx/Orthogroups/Orthogroups.txt |awk 'NF>4 {print $0}' |grep "OUTGROUP"|sed "s/:.*//g" >orthogroups_filter.list
-其中awk 'NF>4 {print $0}'
代表提取列数大于4的行,即包含至少4个基因的基因家族。
-其中grep "OUTGROUP"
代表提取有OUTGROUP字符串的行,这里提取包含外类群基因ID特征(比如Eugr)前缀的行。
-其中sed "s/:.*//g"
代表把冒号及之后的所有信息删除,只保留orthogroups的ID信息。
+如果是编码区序列,优先选蛋白序列。因为蛋白序列短且含有20种氨基酸信息,比DNA的4种核苷酸信息更多。
+如果是数据库里选序列,尽量选择有详细注释的,可以在后续分析中提供更多信息。
+多序列比对选用10-15条开始比对。如果比对结果不错,再加其他序列比对;如果比对结果不好,对现有序列处理(比如删除,剪辑等)。比对序列数量不是越多越好,多了可能增加比对软件出错概率。
+如果有一条序列与半数以上其他序列一致性低于30%,比对会有问题。(一般氨基酸序列一致性在30-70%,E-value在10^-40-10^-5,仅供参考)。
+如果有序列间一致性太高的,多序列比对也没什么价值,结果一直不错。
+很多比对软件擅长比对总长度类似的序列,对长短不一的序列可以尝试比对前剪辑。
+一般的比对软件对有重复片段的多序列比对时会有问题,尤其是序列间重复次数不同时问题更大,需要人工提取这部分手工比对。
-4.3.2. 筛选基因复制事件 从Duplications.tsv文件中筛选符合标准的基因复制事件,提取基因复制事件中发生复制的基因。
-
-提取特定枝上的基因复制事件
+5. 多序列比对软件 5.1. 比对软件概况
+基于相似性的比对(similarity-MSAMs)
-比如这里是要筛选Mcandidum和Mdodecandrum的最近共同祖先发生的WGDs事件,在上面SpeciesTree_Gene_Duplications_0.5_Support.txt文件的例子中,是N5代表的节点。
-则可以通过cat Duplications.tsv|awk -v FS='\t' '$2=="N5" {print $0}' >N5.tsv
来获取第二列是N5的复制事件
+经典渐进式比对(progressive alignment)软件:ClustalW
+现代渐进式比对软件:DIALIGN-TX, MUSCLE
+一致性比对软件(Consistency methods):MUMMALS,ProbAlign,ProbCons,MAFFT,T-Coffee。
-其他筛选标准
+基于进化关系的比对
-两个子枝(child branch)都有来自分析物种A的基因。都有才代表物种A的基因复制了。
-支持率(这里用Duplications.tsv第4列Support值)大于等于0.5。
+PRANK
+BAli-Phy
+StatAlign
-筛选命令
+其他
-cat N5.tsv|awk -v FS='\t' '$4>=0.5 && $6 ~ "mc" && $7 ~ "mc" {print $0}' >N5_filter.tsv
-其中$6 ~ "mc" && $7 ~ "mc"
代表模糊匹配第六列和第七列都包含mc字段的行。这里的mc是我们想要筛选的物种的基因ID的前缀。即实现了筛选两个子枝(child branch)都有来自分析物种A的基因。
-其中$4>=0.5
代表第四列大于等于0.5的行。即实现了筛选支持率大于等于0.5的行。
+MACSE
+基于隐马尔可夫模型(Profile HMM Methods)的比对:SEPP, TIPP, UPP, HIPPI
-
-由于OrthoFinder2运行时也会有一些基础的筛选,所以有可能这步筛选结束后与筛选前完全一致。
-
-4.3.3. 整理数据
-取以上基因家族和基因复制事件筛选结果的交集
+5.2. 基于相似性的比对(similarity-MSAMs) 5.2.1. Clustal(1994) Clustal版本有X、W系列,目前最新的Omega表现最好。
+基于渐进式比对(progressive alignment),由引导树(guide tree)确定将序列添加到不断增长的MSA中的顺序,此算法通过成对的序列(sequence)-序列,序列-剖面(profile),剖面-剖面的比对实现。
+
+算法流程
-grep -f orthogroups_filter.list N5_filter.tsv |awk '{print "dup"NR"dup",$0}' |sed "s/ /\t/g" >N5_filter_OG_dup.tsv
-其中awk '{print "dup"NR"dup",$0}'
代表在行首加上dup12dup
这列,其中12是行号,目的是为每一行的基因复制事件取一个不重复的ID。
+先进行序列两两比对,构建距离矩阵;
+基于两两比对距离矩阵,通过计算构建系统进化引导树(guide tree),对关系密切的序列进行加权;
+从关系最近的两条序列开始,逐渐加入关系远的序列并不断重新构建多序列比对,直到所有序列都被加入为止。
-整理数据
+算法特点
-把N5_filter_OG_dup.tsv整理成基因对格式的文件genepairs.tsv。
-genepairs.tsv是tab分隔的文本文件,包含三列,第一列是N5_filter_OG_dup.tsv的第一列,这里是dup12dup
形式的基因复制事件的ID;第二列和第三列分别是两个子枝(child branch)中各取一个基因生成的基因对,迭代生成所有可能的基因对。
-写了一个python小脚本来实现N5_filter_OG_dup.tsv到genepairs.tsv的转换。
+是一种试探算法,渐进式比对算法都不能保证得到最优的比对。
+比对准确性高度依赖开始的两两比对,适用于亲缘关系较近 的序列。
-import sys, math, oswith open ('N5_filter_OG_dup.tsv' ,'r' ) as f: for l in f.readlines(): line = l.strip() dr = line.split("\t" )[0 ] genes1 = line.split("\t" )[6 ] genes2 = line.split("\t" )[7 ] gene_1 = list (genes1.split("," )) gene_2 = list (genes2.split("," )) for i in range (len (gene_1)): for j in range (len (gene_2)): with open ('genepairs.tsv' , mode='a' ) as gp: gp.write(dr+'\t' +gene_1[i]+'\t' +gene_2[j]+'\n' )
-
-4.3.4. 筛除串联重复(tandem duplications) 从上面的结果文件genepairs.tsv中筛除鉴定为串联重复产生的基因对,生成genepairs_del_tandem.tsv。(ps:也可以从N5_filter_OG_dup.tsv筛除)
-
-串联重复的标准
-
+5.2.2. MUSCLE(2004) 特点:
-取的文章里的标准:在两个子枝(child branch)中的基因在五个基因范围内则被看作是串联重复导致的。
+采用迭代方法进行比对运算,每一次最优化过程就是迭代过程,通过不断使用动态规划法重排来纠正错误,同时对这些亚类群进行比对以获得所有序列的全局比对。
+相对Clustal,在比对速度和精度上都更优。
+相对Clustal,添加了额外的步骤,包括改进起始树(starting tree),重新选择树的分支和重新对齐任一剖面的改进步骤。
-
-筛除
-
+5.2.3. MAFFT(2002) 特点:
-由于我注释基因组的时候,基因ID是根据位置排序产生的,所以这里筛除就直接把genepairs.tsv文件的第二列和第三列的数字相减再取绝对值,如果数字小于等于5的话就把这行删除。另外注意一下染色体首尾的基因就好。
-如果是注释基因组时基因ID命名没有规则,就需要自行想办法了。
+基于渐进式比对的算法,用快速傅里叶变换(fast Fourier transform)对序列进行聚类,再实现成对比对(pairwise alignments);
+之后的版本增加了其他算法和操作模式,包括快速、精确模式,非编码RNA序列比对及在现有比对中添加新的序列。
+实现了两种算法,累进方法(FFT‐NS‐2)和迭代优化方法(FFT‐NS‐i)
+比对精度比MUSCLE高,速度也快。
-4.3.5. 基因复制树和复制的基因对 到这里,就获得了物种A发生特定WGD后保留的基因复制事件(N5_filter_OG_dup.tsv)和相应的基因对(genepairs.tsv或者进行筛除串联重复后的genepairs_del_tandem.tsv)。
-4.4. 多个WGDs的情况 如果同一个枝(branch)上发生了两次或以上的WGDs事件,通过基因树和物种树无法区分这两次WGDs,此时就需要通过计算基因对的Ks后通过Ks来区分。
-4.4.1. 计算基因对的Ks
-文件准备
-
+5.2.4. T-Coffee (2000) 与MAFFT功能类似,但包括更复杂的成对比对评分函数,MSA必须描述一组一致的成对比对。
+5.3. 基于进化关系的比对 —— 统计比对(statistical alignment) 5.3.1. 统计比对的特点
+统计比对(statistical alignment)是在进化学语境下描述序列的变化,能够确定各序列在与其共同祖先分化后发生的插入、替换和删除的过程,在系统发育树上明确建模。
+可以根据序列的差异性灵活地使用不同地比对标准(评分矩阵与罚分),基于渐进式的比对无法做到
+基于进化关系,准确性优于渐进式比对,但由于计算量大,很少使用在基因组数据上。
+
+5.3.2. BAli-Phy(2005)
+贝叶斯后验比对
+利用马尔科夫链蒙特卡罗来探索给定分子序列数据的比对和系统发育的联合空间,同时估计消除了对不准确的比对引导树的偏差,在比对过程中采用了更复杂的替换模型,并自动利用共享插入/删除中的信息来帮助推断系统发育关系
+准确度和PRANK差不多?
+
+5.3.3. PRANK(2008) 特点:
-此前得到了genepairs.tsv文件(或者进行筛除串联重复后的genepairs_del_tandem.tsv),即有了基因对ID文件。
+针对DNA,密码子(codon)和氨基酸序列的概率多重比对软件(有密码子和氨基酸模式);
+可以重新构建祖先序列,有DNA翻译(DNA translation)和回译(back-translation)选项;
+对完全统计对齐的启发式(heuristic)方法;
+准确度高,但非常耗时,不适合基因组数据;
-
-运行
-
+p.s.:PRANK比对过后序列顺序会被打乱,与比对前不一致,做后续处理时要小心。
+5.3.4. StatAlign(2008) 5.4. MACSE 了解得不多,先摘录在这里。
-4.4.2. 区分两次WGDs 通过两次WGDs的Ks峰值来区分,比如两次WGDs的峰值分别为0.2和0.7,取平均值是0.45,则把Ks大于等于0.45的看作0.7代表的WGD,把Ks小于0.45的看作0.2代表的WGD。
-有两种方式区分,一种是把基因复制事件分类到两次WGDs中,一种是把基因对分类到两次WGDs中。我之前用的基因复制事件,但想想用基因对可能更准确。
-
-把基因复制事件分类到两次WGDs
+5.5. 基于隐马尔可夫模型(Profile HMM Methods)的比对 5.5.1. SEPP(SATe-enabled Phylogenetic Placement) 解决将short reads放进参考序列和树的系统发育问题
+5.5.2. TIPP(Taxonomic Identification and Phylogenetic Profiling) 解决元组数据的分类识别和丰度分析问题
+5.5.3. UPP(Ultra-large alignments using Phylogeny-aware Profiles) 解决非常大的数据集对齐的问题,这些数据集可能包括零碎数据,可以将数据集多达1,000,000条序列对齐;
+5.5.4. HIPPI(Highly Accurate Protein Family Classificatio with Ensembles of HMMs) 解决蛋白质家族分类问题
+6. Trimming - 质量过滤软件 在比对完成后,使用质量过滤软件过滤一些低质量以及高变异度的序列区域,仅保留进化保守的区域用于后续分析。
+6.1. 产生低质量区域的原因
+序列特征:远缘物种的序列在一些位置(例如第一个或最后一个外显子)有很大差异,这种真实存在的差异由于受到选择的影响,不适用于推断系统发育树(希望用保守区域推断系统发育关系)。
+各种错误:包括测序错误、基因组组装错误、基因预测错误和多序列比对错误等。
+
+6.2. 多序列比对后过滤软件 6.2.1. 常见过滤软件
+block-filtering : trimAl,Gblocks
+segment filtering : HmmCleaner,PREQUAL(基于隐马尔可夫模型的算法)
+sliding window analysis : FasParser2
-
+
+ bioinfo
+ alignment
+ align
+
+
+ Multiple Sequence Alignment
+ MSA
+ sequence alignment
+ trimming
+ Clustal
+ MUSCLE
+ MAFFT
+ PRANK
+ Gblocks
+ trimAl
+
+
+
+ 用MAFFT在现有多序列比对中添加新序列
+ /2023/11/16/bioinfo_alignment_align_mafft_add/
+
+
+
+1. MAFFT简介 MAFFT是基于渐进式比对的算法,用于进行多序列比对(Multiple Sequence Alignment,MSA)。由于比对速度快,常用于组学数据的比对。
+MAFFT网页版有一个功能(–add),即向现有的多序列比对中添加新的序列,这在新增数据时非常有用。
+2. MAFFT的–add功能 MAFFT的–add功能的网页:https://mafft.cbrc.jp/alignment/server/add.html
+2.1. –add功能的三个模块 根据新增序列和现有多序列比对(MSA)的相对长度,分别选用–add功能的三个模块:
+
+–add:align full length sequences to an MSA. 新增序列与现有MSA长度相当时,选–add模块。
+–addfragments:align fragment sequences to an MSA. 新增序列短于现有MSA时,选–addfragments模块。
+–addlong:align long sequences to a short MSA. 新增序列长于现有MSA时,选–addlong模块。
+
+3. MAFFT网页版的–add用法 在网页https://mafft.cbrc.jp/alignment/server/add.html上选择模块,然后上传现有MSA和新增序列,选择参数,即可获得比对结果。
+3.1. 基本参数
+Allow unusual symbols:是否允许不明确字符。
+UPPERCASE/lowercase:输出的比对文件的字母大小写是否与输入文件一致。
+Direction of nucleotide sequences:是否根据第一条序列调整剩余序列的方向。
+Output order:输出比对文件的序列顺序。
+Sequence title:输出比对文件的序列名称是否与输入文件一致。3.2. 高级参数 最常用的是第一个参数,是否要保持输出MSA的长度。
+Keep alignment length :是否保持输出的比对的长度与输入的现有MSA长度一致,如果选择这个选项,则会把新增序列的insertions删除以保持长度不变。
+Strategy:默认选择Auto
+Progressive methods:包括FFT-NS-2,G-INS-1,L-INS-1三个选项。
+Iterative refinement methods:包括FFT-NS-i,G-INS-i,L-INS-i三个选项。
+对核苷酸/氨基酸序列的分数矩阵和gap处理等参数。
+
+3.3. 结果 提交之后,在网页中可以看到比对结果,并可以下载fasta/clustal格式的比对结果,也可以转化成phylip/nexus/msf/gcg等格式。
+还可以点击Refine dataset 进入编辑界面,对比对结果进行进一步的编辑,比如对指定序列进行反向互补操作,保留或删除指定序列。
+4. MAFFT命令行版的–add用法 命令行版也可以使用–add功能,具体参数参考:https://mafft.cbrc.jp/alignment/software/addsequences.html
+5. MAFFT的merge功能 MAFFT还有一个merge模块,网页版:https://mafft.cbrc.jp/alignment/server/merge.html
+merge模块用于合并两个或更多已比对好的sub MSAs。当假定这些sub MSAs在系统发育关系上是各自独立为一单系时,即系统树上各自不重叠时,可使用merge模块。如果系统发育关系不独立,则推荐使用–add模块。
+6. references
+https://mafft.cbrc.jp/alignment/server/
@@ -1258,105 +1471,142 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
bioinfo
- WGD
+ alignment
+ align
- WGD
- gene duplication event
- OrthoFinder2
+ alignment
+ Multiple Sequence Alignment
+ MSA
+ sequence alignment
+ MAFFT
+ add
+ merge
- 批量计算Ka和Ks
- /2022/09/07/bioinfo_Ks_batch.calculation.Ks/
-
+ 蛋白质比对转换成CDS比对 —— ParaAT,PAL2NAL
+ /2021/10/29/bioinfo_alignment_align_pep2cds/
+
-1. ParaAT 参考blog.ParaAT:https://yanzhongsino.github.io/2021/10/29/bioinfo_align_pep2cds/
-2. KaKs_Calculator 2.0 KaKs_Calculator 2.0工具包包含了17种计算Ka和Ks的方法,包含Gamma系列,并可识别基于蛋白编码序列的滑动窗口,基于C++和Java,在Windows和Linux平台都可使用。
-3. Ka和Ks计算
-ParaAT比对指定的基因对的氨基酸序列,并转化成比对的CDS序列,并可指定输出格式,如axt格式。
-KaKs_Calculator用于计算比对好的基因对的kaks。
-
-用还会用到两个脚本:
+1. 序列比对(sequence alignment) 序列比对的知识可以参考另一篇博文的内容。 Sequence Alignment:https://yanzhongsino.github.io/2021/09/06/bioinfo_alignment_align_intro/
+如果序列间差异较大,为了获得更精准的比对,有时我们会先做蛋白质的比对,然后根据蛋白质比对,转化成CDS比对。这篇博客就是记录把蛋白质比对转换成CDS比对的软件和使用。
+2. 蛋白比对转CDS比对 2.1. 成对比对(pairwise alignment) 2.1.1. 应用场景 如果是两条序列比对的转化,批量处理,可以用ParaAT脚本。
+比如用MCScanX软件做了共线性分析找到物种间的homologs基因对,或者WGD分析找到物种内的paralogs基因对,想要根据蛋白比对做对应的CDS比对。比对之后用于计算Ka和Ks。
+2.1.2. 成对比对软件 2.1.2.1. ParaAT ParaAT是中科院基因组所张章课题组在2012年开发,2014年更新了2.0版本,是一个perl脚本。
+ParaAT download ParaAT paper
+2.1.2.2. ParaAT下载 wget ftp://download.big.ac.cn/bigd/tools/ParaAT2.0.tar.gz tar -zxf ParaAT2.0.tar.gz cd ParaAT2.0 ParaAT.pl -h
+
+ParaAT2.0目录下有两个脚本,ParaAT.pl用于成对比对的转换(可以批量处理),目录下还有另一个多序列转换脚本Epal2nal.pl(好像是pal2nal.pl的V13版本)。
+2.1.2.3. ParaAT使用
+输入文件 三个输入文件,sample.id,cds.fa,pep.fa,三个文件的序列id要一致。
+
-4. 软件准备
-安装ParaAT.pl
-
+cat sample.collinearity |grep "species_prefix"|cut -f2,3 >sample.id
用MCScanX的结果文件提取blocks的同源gene对,获得sample.id文件。
-wget ftp://download.big.ac.cn/bigd/tools/ParaAT2.0.tar.gz tar -zxf ParaAT2.0.tar.gz cd ParaAT2.0 ParaAT.pl -h
-
-安装KaKs_Calculator2.0 KaKs_Calculator2.0下载地址:https://sourceforge.net/projects/kakscalculator2/?source=typ_redirect
+运行
-wget https://altushost-swe.dl.sourceforge.net/project/kakscalculator2/KaKs_Calculator2.0.tar.gz tar -zxf KaKs_Calculator2.0.tar.gz chmod 777 ./KaKs_Calculator2.0/bin/Linux/KaKs_Calculator chmod 777 ./KaKs_Calculator2.0/src/AXTConvertor
-
-5. 文件准备 ParaAT.pl需要三个输入文件,参考blog.ParaAT:https://yanzhongsino.github.io/2021/10/29/bioinfo_align_pep2cds/
-
-sample.id
-
+参数:
-两列,每行对应两条要做成对比对的序列ID;
-任意行,ParaAT可以批量处理多个成对比对。
-一个例子:cat sample.collinearity |grep "species_prefix"|cut -f2,3 >sample.id
用MCScanX的结果文件提取blocks的同源gene对,获得sample.id文件。
+-h sample.id:指定基因对文件
+-n cds.fa:指定CDS序列文件,包含所有sample.id涉及的基因的CDS序列;
+-a pep.fa:指定氨基酸序列文件,包含所有sample.id涉及的基因的氨基酸序列;
+-m mafft:指定比对软件
+-p proc:指定线程
+-f axt:指定输出比对的CDS序列的格式(WGD计算KaKs一般用axt格式比较多)
+-o paraat:指定输出文件目录(如果不存在会新建目录)。
-
-cds.fa
-
+其他参数:
-包括所有需要比对的cds序列的文件
+-g:移除比对后包含gap的密码子;建议加上-g和-t,免得后面计算Ks时报错Error. The size of two sequences in ‘ctg00816-ctg08844’ is not equal。
+-t:移除mismatched codons;建议加上-g和-t,免得后面计算Ks时报错Error. The size of two sequences in ‘ctg00816-ctg08844’ is not equal。
+-k:用KaKs_Calculator计算(需要输出axt格式)Ka和Ks,获得axt文件后自动计算kaks值,使用MA模型,比YN模型慢,推荐输出axt后自己用KaKs_Calculator计算并用YN模型。
+-c 1:指定编码方式,不同生物的编码方式不同,默认是标准型1。
-pep.fa
+报错 ERROR: inconsistency between the following pep and nuc seqs
+2.2. 多序列比对(multiple sequence alignment) 2.2.1. 应用场景 如果是多序列的转化,可以使用PAL2NAL脚本。
+比如做了orthofinder2找到多个物种的orthogroups,要对每一组orthogroups进行蛋白比对转换成CDS比对。
+2.2.2. 多序列比对软件 2.2.2.1. PAL2NAL PAL2NAL介绍
-包括所有需要比对的蛋白序列的文件
+PAL2NAL可以将蛋白的多序列比对转换成CDS比对,如果输入的是一对序列,还会通过paml的codeml程序自动计算dn和ds。
+如果数据量少,可以通过上面的网页进行转换。
-6. 操作步骤 6.1. 用ParaAT获取基因对比对序列 ParaAT比对sample.id指定的基因对的氨基酸序列,并转化成比对的CDS序列,并可指定输出为axt格式。
-
-命令
-
-echo "24" >proc #指定ParaAT.pl使用线程 ParaAT.pl -g -t -h sample.id -n cds.fa -a pep.fa -m mafft -p proc -f axt -o sample.paraat 2> paraat.log & #用ParaAT.pl调用mafft做每对基因的蛋白比对,并把蛋白比对转化成cds比对,输出axt格式。-g移除比对有gap的密码子,-t移除mismatched codons;-o指定生成目录;
+2.2.2.2. PAL2NAL下载 wget http://www.bork.embl.de/pal2nal/distribution/pal2nal.v14.tar.gz tar -zxvf pal2nal.v14.tar.gz pal2nal.pl -h
-
-notes
-
+2.2.2.3. PAL2NAL使用 pal2nal.pl -nogap -nomismatch pep.aln nuc.fa -output fasta >nuc.aln
+需要已经做好比对的蛋白质序列pep.aln和ID一致的cds序列nuc.fa
+参数:
-axt格式包括三行,第一行两个序列ID之间用短横杠-相连,第二行第一条序列,第三行第二条序列。
-建议加上-g和-t,免得后面计算Ks时报错Error. The size of two sequences in 'ctg00816-ctg08844' is not equal。
-ParaAT.pl命令中加上-k参数可以在获得axt文件后自动调用KaKs_Calculator计算kaks值,使用MA模型,比YN模型慢很多,推荐不加-k参数,而是手动用KaKs_Calculator的YN模型,生成sample.axt_yn.kaks文件。
+-output (clustal|paml|fasta|codon) # Output format; default = clustal
+-nogap # remove columns with gaps and inframe stop codons
+-nomismatch # remove mismatched codons (mismatch between pep and cDNA) from the output
-6.2. 用KaKs_Calculator计算基因对的Ka、Ks和4dtv值 ParaAT.pl的-k参数只能指定KaKs_Calculator的MA模型计算kaks值,如果需要指定其他的模型,则可以手动运行计算。
-KaKs_Calculator可计算比对好的CDS序列的Ka和Ks。
-
-计算Ka和Ks
+3. references
+https://en.wikipedia.org/wiki/Sequence_alignment
+
-获得all.kaks文件cd sample.paraat # 进入ParaAT.pl生成的文件夹 for i in `ls *axt`;do KaKs_Calculator -i $i -o ${i}_yn.kaks -m YN;done #用YN模型计算每个gene对的KaKs,生成四列数据,gene对,Ka,Ks,Ka/Ks for i in `ls |grep "_yn.kaks"`;do awk 'NR>1{print $1"\t"$3"\t"$4"\t"$5}' $i >>../all.kaks;done #合并kaks到all.kaks文件
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
-计算4dtv
+ ]]>
+
+ bioinfo
+ alignment
+ align
+
+
+ sequence alignment
+ biosoft
+ tutorial
+ ParaAT
+ protein
+ CDS
+ PAL2NAL
+
+
+
+ 用miniprot做蛋白序列和基因组序列间的比对
+ /2024/09/30/bioinfo_alignment_prot_miniprot/
+
+
+1. miniprot介绍 需要进行蛋白序列与基因组序列的比对,可以用李恒团队开发的miniprot。
+2. miniprot安装
+conda安装:conda install miniprot
+下载安装:仅依赖zlib
+
+git clone https://github.com/lh3/miniprot cd miniprot && make
+
+3. miniprot使用 基因组genome.fna和蛋白序列protein.faa进行比对
+3.1. 先建索引,再比对【推荐】
+建立索引:会将基因组genome.fna翻译成氨基酸序列,费时。
-获得all.4dtv文件cd sample.paraat # 进入ParaAT.pl生成的文件夹 for i in `ls *axt`;do axt2one-line.py $i ${i}.one-line;done #多行axt文件转换成单行 ls |grep "axt.one-line"|while read id;do calculate_4DTV_correction.pl $id > ${id%%one-line}4dtv;done #计算4dtv值,生成两列数据,gene对,4dtv for i in `ls |grep "4dtv"`;do awk 'NR>1{print $1"\t"$3}' $i >>../all.4dtv;done #合并4dtv值到all.4dtv
+miniprot -d genome.mpi genome.fna
-
-合并和整理结果
+
+比对:翻译的基因组氨基酸序列与指定的蛋白序列进行比对
-
bioinfo
- Ks
+ alignment
+ prot
- Ks
- Ka
- 4dtv
- ParaAT
- KaKs_Calculator
+ miniprot
+ align
- 介绍序列比对(Sequence Alignment)
- /2021/09/06/bioinfo_alignment_align_intro/
-
+ 热图的简介和绘制
+ /2022/11/06/bio_plot_heatmap/
+
-写在前面 :
-
-比对软件的选择: 要是是基因组大数据的序列做比对,优先选择MAFFT (快速且兼顾准确);要是少量序列比对,优先选择PRANK (准确);要是极少数序列比对,哪个方便选哪个,一般Clustal和MUSCLE (方便)会整合到许多软件里,会更方便使用。
-过滤软件的选择: 目前暂时优先选trimAl 。
-
-update-20211006:今天发现PRANK这个软件比对过后序列的顺序会被打乱,后续处理要小心。
-1. 序列比对(sequence alignment) 1.1. 概念 在生物信息学中,序列比对(sequence alignment)是指根据相似性排列DNA,RNA或者protein序列,通过在序列中插入空格(gap)来使得相似的碱基/氨基酸在相同列对齐的一种方法。
-1.2. 方法 比对方法通常包括全局比对(global alignments)和局部比对(local alignments)。
-
-全局比对(global alignments) 全局比对强制要求比对跨越所有序列的整个长度,尽量对齐每条序列的每个碱基,当序列碱基和长度大致相似时最有用。通常全局比对用Needleman-Wunsch算法,是一种动态规划算法。
-局部比对(local alignments) 局部比对则确认通常有较大分歧的长序列内的相似性,有更多的计算相似性区域的额外的挑战。通常在较长序列包含相似序列基序的差异较大序列中更有用,常见的是Smith-Waterman算法,也是一种动态规划算法。
-混合比对(Hybrid methods) 全局和局部比对都使用的方法。
-
-1.3. 类型 按照序列的数量分为成对比对(pairwise alignment)和多序列比对(multiple sequence alignment)。
+
+1. 热图(heatmap) 热图(heatmap)是在两个维度用不同颜色展示一种现象的大小的一种数据可视化技术。有两种本质上不同的热图,网格热图(grid heatmap)和空间热图(spatial heatmap)。
-成对比对(pairwise alignment)
+网格热图(grid heatmap) 网格热图用不同颜色代表不同数值的二维矩形图,同时两个维度还可以通过颜色进行聚类。
-
-两条序列的比对。因为计算效率很高,通常不需要高精度方法。
-常见的三种方法是点阵法(dot-matrix methods),动态规划法(dynamic programming)和字节法(word methods)。
-
+比如不同物种在不同基因上的表达水平。
+
+
+Figure 1. heatmap集群热图
-多序列比对(multiple sequence alignment)
+空间热图(spatial heatmap) 空间热图将空间现象的大小通过颜色投射到地图上。
-
-三条及以上序列的比对,是成对比对的扩展,算法上有些差异,以及更复杂。是这篇博客主要讲的内容。
-
-2. 多序列比对(Multiple Sequence Alignment,MSA) 2.1. 概念 多序列比对(Multiple Sequence Alignment,MSA)是对三个以上的生物学序列(biological sequence),如蛋白质序列、DNA序列或RNA序列所作的序列比对。 目的是在不改变序列顺序的前提下,尽可能地把不同序列的相同碱基或者氨基酸排在同一列,并认为同一列的序列在进化上是同源的,有共同的祖先。
-2.2. 用途 比对之后的序列,可用于进化学研究。比如,比较序列差异来推断序列进化历史(eg. 分化时间)和进化方式(突变/插入缺失/倒置等)。
-常见的应用:
-
-构建系统发育树:亲缘关系的分析。
-比较基因功能:比较不同物种间的基因功能。
-预测蛋白质结构,分类和注释蛋白和ncRNA:通过与已知功能的基因序列的相似性比对,进行基因功能的预测和注释。
-序列拼接:通过比对,组装基因组。
-突变分析:不同个体基因组间的差异;不同物种基因组间的共线性和结构变异。
-检测适应性进化
-
-2.3. 重要性 多序列比对的准确性与进化分析的准确性息息相关,不同比对软件和过滤软件的结果不同。
-Blackburner和Whelan在2013年发表在MBE上的文章《Class of Multiple Sequence Alignment Algorithm Affects Genomic Analysis》对不同的比对算法和软件进行了比较分析,提出多序列比对MSA方法对下游分析至关重要,系统发育树和分支长度的推断高度依赖使用的多序列比对MSA类别,基于相似性的比对软件倾向于识别适应性进化(正选择)。
-简单的对齐后过滤不能解决不同MSA方法间的差异。
-3. 多序列比对(Multiple Sequence Alignment,MSA)的算法 多序列比对是双序列比对的扩展。
-3.1. 动态规划算法(dynamic programming) —— 主要用于双序列比对 算法特点:
-
-可以给出最优解。
-将一个二维的动态规划矩阵扩展到三维或多维,即可用于多序列比对。
-比对序列超过3个,需要的存储空间和运算时间都使得比对应用无法实现。3.1.1. 基于全局比对的算法:Needleman-Wunsch算法
-
-
-全局比对 全局比对是指将参与比对的两条序列里面的所有字符进行比对。全局比对在全局范围内对两条序列进行比对打分,找出最佳比对,主要被用来寻找关系密切的序列。其可以用来鉴别或证明新序列与已知序列家族的同源性,是进行分子进化分析的重要前提。其代表是Needleman-Wunsch算法。
-
-全局比对算法特点:
-
+比如世界的温度分布图。
+
+
+Figure 2. heatmap空间热图
+
+等值线图(choropleth map) 此外,还有与空间热图相似的,常用于地理上可视化的等值线图(choropleth map)。等值线图按照地理边界分组,如国家,州,省或者人为划分的植被区和气候区等,常常具有不规则边界。
+
+比如美国各州人口密度图。
+
+
+Figure 3. choropleth map等值线图
+2. 绘制热图 这篇文章记录的是绘制网格热图的方法,包括常用的R包pheatmap和ggplot2。
+2.1. pheatmap包
+输入数据(gene_expression.txt)的格式
-打分矩阵:罚分分值不同,比对结果不同。
-计算比对最高得分的算法:常用Needleman-Wunsch算法。
-打印出最高得分相应的序列比对结果:根据得分矩阵回溯,找到最高得分结果。
+第一行标题行
+第一列是基因名称
+第二列是数值(比如表达量)
+可以是一组数据,则只有第二列;也可以是多组数据,依次是第二列及之后列。
-3.1.2. 基于局部比对的算法:Smith-Waterman算法
-局部比对 与全局比对不同,局部比对不必对两个完整的序列进行比对,而是在每个序列中使用某些局部区域片段进行比对。其产生的需求在于、人们发现有的蛋白序列虽然在序列整体上表现出较大的差异性,但是在某些局部区域能独立的发挥相同的功能,序列相当保守。这时候依靠全局比对明显不能得到这些局部相似序列的。其次,在真核生物的基因中,内含子片段表现出了极大变异性,外显子区域却较为保守,这时候全局比对表现出了其局限性,无法找出这些局部相似性序列。其代表是Smith-Waterman局部比对算法。BLAST是局部比对的一种推广。
+tf ath_1 ath_2 egr_1 egr_2 AP2 1.0043 0 0.942273 0 ARF 1.20516 1.58619 1.13073 1.48129
+
+
+读取数据和聚类
+df<- read.table( "gene_expression.txt" , sep= " " , header = T , row.names = 1 ) df_row <- hclust( dist( df) ) df <- df[ df_row$ order, ] df_column <- hclust( dist( t( df) ) ) df <- df[ , df_column$ order]
-Smith-Waterman算法特点
+绘制热图
+BiocManager:: install( "pheatmap" ) library( pheatmap) pheatmap( mat= df, color = colorRampPalette( c ( "lightgreen" , "yellow" , "orange" , "red" ) ) ( 20 ) , legend_breaks = c ( 1 : 4 ) , legend_labels = c ( "1.0" , "2.0" , "3.0" , "4.0" ) , border_color= "white" , treeheight_row = 50 , treeheight_col = 8 , display_numbers = TRUE , number_color = "black" , main = "TF heatmap" , cellwidth = 50 , cellheight = 10 )
+
+更完整的pheatmap参数
+pheatmap( mat = mat, scale = "row" , clustering_method = "complete" , clustering_distance_rows = "euclidean" , clustering_distance_cols = "euclidean" , cluster_cols = TRUE , cluster_rows = TRUE , treeheight_col = 35 , treeheight_row = 45 , annotation_col = coldata, cutree_cols = 2 , cutree_rows = 2 , show_colnames = TRUE , show_rownames = TRUE , fontsize_row = 7.5 , fontsize_col = 7.5 , color = colorRampPalette( colors = c ( "blue" , "white" , "red" ) ) ( 100 ) , main = paste( "Cluster Heatmap of" , nrow( mat) , "features" , sep = " " ) , filename = "heatmap.pdf" , width = 7 , height = 7 )
+
+2.2. ggplot2包 这个我还没试过,把https://zhuanlan.zhihu.com/p/464964887提到的代码摘抄在这。
+data <- scale( data, center = TRUE , scale = TRUE ) row_clust <- hclust( dist( mat, method = "euclidean" ) , method = "complete" ) rowInd <- row_clust$ order col_clust <- hclust( dist( t( mat) , method = "euclidean" ) , method = "complete" ) colInd <- col_clust$ order mat <- mat[ rowInd, colInd] melt_mat <- melt( mat) colnames( melt_mat) <- c ( "Feature" , "Sample" , "Value" ) h <- ggtree( row_clust, layout = "rectangular" , branch.length = "none" ) v <- ggtree( col_clust) + layout_dendrogram( ) p.ggplot <- ggplot( data = mat_new, aes( x = Sample, y = Feature, fill = Value) ) + geom_tile( ) + theme_minimal( ) + scale_fill_gradient2( low = "blue" , high = "red" , mid = "white" , name = "Expression" ) + scale_y_discrete( position = "right" ) + labs( x = "" , y = "" ) + theme( axis.title = element_text( size = 15 ) , axis.text.y = element_text( size = 10 ) , axis.text.x = element_text( angle = 90 , size = 11 ) , legend.title = element_text( size = 15 ) , legend.text = element_text( size = 11 ) ) p.group <- ggplot( data = coldata, aes( x = Sample, y = Condition, fill = Group) ) + geom_tile( ) + scale_y_discrete( position = "right" ) + theme_minimal( ) + theme( axis.text = element_blank( ) , axis.title = element_blank( ) , legend.title = element_text( size = 15 ) , legend.text = element_text( size = 11 ) ) + labs( fill = "Group" ) p.all <- p.ggplot %>% insert_left( h, width = 0.15 ) %>% insert_top( p.group, height = 0.05 ) %>% insert_top( v, height = 0.1 )
+
+3. references
+https://en.wikipedia.org/wiki/Heat_map
+https://zhuanlan.zhihu.com/p/464964887
+
+
-是一种用来寻找并比较具有局部相似性区域的动态规划算法,适用于亲缘关系较远,整体上不具有相似性而在一些较小区域存在局部相似性的两条序列。
-使用迭代方法计算出每个序列的相似分值,保存在一个得分矩阵M中,然后根据这个得分矩阵,通过动态规划的方法回溯找到最优的比对序列。
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-3.2. 启发式搜索算法(heuristic algorithm):BWT算法和BLAST算法 一个基于直观或经验构造的算法,在可接受的花费下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计;目前绝大多数应用的比对软件都是启发式算法。
+ ]]>
+
+ bio
+ plot
+
+
+ R package
+ heatmap
+ pheatmap
+ ggplot2
+
+
+
+ 用Gblocks对序列比对进行过滤
+ /2023/09/30/bioinfo_alignment_trim_Gblocks/
+
+
+序列比对的知识可以参考另一篇博文的内容。 Sequence Alignment:https://yanzhongsino.github.io/2021/09/06/bioinfo_alignment_align_intro/
+1. Gblocks简介
+Gblocks是什么
+
-渐进式算法(progressive methods): Clustal W,MUSCLE,T-Coffee,DiAlign
-迭代算法(iterative methods): MUSCLE,PRRP算法
-星对比算法
+Gblocks 是一个用 C 语言编写的计算机程序,它通过一定的规则过滤掉 DNA 或蛋白质比对序列中比对不佳的位置和分歧较大的非保守区域。
-3.3. 随机算法 对构造好的目标函数进行最优解搜索。
+
+Gblocks原理
+
-遗传算法:借鉴生物界进化规律演化来的全局意义上的自适应随机搜索方法。
-模拟退火算法:用一物质系统的退火过程来模拟优化问题的寻优方法,当物质系统达到最小能量状态时,优化问题的目标函数也相应地达到了全局最优解。
-粒子群算法
+Gblocks 通过挑选序列块(blocks)来筛选比对序列,序列块(blocks)必须满足一定的要求,如缺乏大段连续的非保守位置、缺乏或低密度的GAP位置以及侧翼位置的高度保守性,从而使最终选出的blocks组成的比对序列更适合用于系统发育学分析。
-3.4. 其他算法 还有一些其他不常见的算法
-
-分治算法
-蚁群算法
+
+Gblocks特点
-4. 序列选择和比对前处理 一般来说,同源序列、同一家族的序列才会进行比对。
-通用的序列选择标准 :
-如果是编码区序列,优先选蛋白序列。因为蛋白序列短且含有20种氨基酸信息,比DNA的4种核苷酸信息更多。
-如果是数据库里选序列,尽量选择有详细注释的,可以在后续分析中提供更多信息。
-多序列比对选用10-15条开始比对。如果比对结果不错,再加其他序列比对;如果比对结果不好,对现有序列处理(比如删除,剪辑等)。比对序列数量不是越多越好,多了可能增加比对软件出错概率。
-如果有一条序列与半数以上其他序列一致性低于30%,比对会有问题。(一般氨基酸序列一致性在30-70%,E-value在10^-40-10^-5,仅供参考)。
-如果有序列间一致性太高的,多序列比对也没什么价值,结果一直不错。
-很多比对软件擅长比对总长度类似的序列,对长短不一的序列可以尝试比对前剪辑。
-一般的比对软件对有重复片段的多序列比对时会有问题,尤其是序列间重复次数不同时问题更大,需要人工提取这部分手工比对。
+删除大片段非保守性或非同源性片段(6-10bp的非同源片段识别得不好),还对block的长度进行了限制。
+Gblocks 可输出网页文件来显示哪些比对区块被保留,哪些被丢弃。
+不足:武断地规定了某个具体阈值来判断比对片段的保留或删除,对所有基因和所有片段一刀切式的处理,没有考虑不同片段的不同进化速率。
-5. 多序列比对软件 5.1. 比对软件概况
-基于相似性的比对(similarity-MSAMs)
+2. Gblocks过滤的流程
+首先,评估多重排列中每个位置的保守程度,并将其分为非保守、保守或高度保守。所有大于一定值(b3设置)的连续非保守位置都会被剔除。
+在余下的区块中,将对侧翼进行检查并移除位置,直到区块的两个侧翼都被高度保守的位置所包围。这样,选定的区块就会被高置信度的排列位置所锚定。
+然后,所有间隙Gap位置(b5设置gap的定义)都会被删除。此外,与间隙位置相邻的非保守位置也会被移除,直到达到保守位置,因为与间隙相邻的区域最难对齐。最后,间隙清理后剩余的小块(b4设置)也会被移除。
+对输入的比对序列的一个重要要求是,在一个保守性很好的区块内(由于移帧测序错误或该特定序列的高分歧)没有完全错配的单条序列。如果其余序列有足够多的相同点,Gblocks 就会认为该序列块是保守的,并将其选中。有一些方法可以检测到这类错误排列的序列,如 ClustalX 程序中的低分段可视化,应使用这种方法来确保排列中不包含含有大量此类片段的序列。
+
+3. Gblocks有多个版本 2000年发布第一版Gblocks 0.73b,后更新一版0.91b,之后就没更新过了。
+
+在线版本:http://www.phylogeny.fr/one_task.cgi?task_type=gblocks
-经典渐进式比对(progressive alignment)软件:ClustalW
-现代渐进式比对软件:DIALIGN-TX, MUSCLE
-一致性比对软件(Consistency methods):MUMMALS,ProbAlign,ProbCons,MAFFT,T-Coffee。
+如果没有特殊参数,序列较短,可使用在线版本,方便快捷。
-基于进化关系的比对
+本地版本包括Mac OS X,Window,Linux三个系统的版本
-
-其他
-
-
-MACSE
-基于隐马尔可夫模型(Profile HMM Methods)的比对:SEPP, TIPP, UPP, HIPPI
+wget https://www.biologiaevolutiva.org/jcastresana/Gblocks/Gblocks_Linux64_0.91b.tar.Z uncompress Gblocks_OS_0.91b.tar.Z tar xvf Gblocks_OS_0.91b.tar
+
+4. Gblocks的使用
+Gblocks有两种用法,一种是交互式,一种是命令行式。这里推荐命令行式。
+Gblocks命令行式,fasta文件在前面,后面跟着参数;如果没跟参数,则自动进入交互式界面。
-5.2. 基于相似性的比对(similarity-MSAMs) 5.2.1. Clustal(1994) Clustal版本有X、W系列,目前最新的Omega表现最好。
-基于渐进式比对(progressive alignment),由引导树(guide tree)确定将序列添加到不断增长的MSA中的顺序,此算法通过成对的序列(sequence)-序列,序列-剖面(profile),剖面-剖面的比对实现。
-
-算法流程
+4.1. Gblocks命令行式用法
+常用命令:Gblocks samples_align.fas -t=d -e=-gb
,序列比对文件跟在Gblocks后,后面再接参数。
+Gblocks命令行用法的常用参数
-先进行序列两两比对,构建距离矩阵;
-基于两两比对距离矩阵,通过计算构建系统进化引导树(guide tree),对关系密切的序列进行加权;
-从关系最近的两条序列开始,逐渐加入关系远的序列并不断重新构建多序列比对,直到所有序列都被加入为止。
+-t=
:序列类型,包括p(protein, default)、d(DNA)、c(codons)
+-e=
:生成文件的后缀扩展名,默认是-gb
-
-算法特点
+4.2. Block参数解释
+b1:设置 “保守位置的最少序列数”,即设置定义保守位置的阈值。该值必须大于序列数的一半。该参数值越大,所选位置数量越少。
+b2:设置 “侧翼位置最少序列数”(Minimum Number Of Sequences For A Flank Position),即设置侧翼位置定义的阈值。该值必须大于或等于 “保守位置的最少序列数”。该参数值越大,所选位置数量越少。
-是一种试探算法,渐进式比对算法都不能保证得到最优的比对。
-比对准确性高度依赖开始的两两比对,适用于亲缘关系较近 的序列。
-
-5.2.2. MUSCLE(2004) 特点:
-
-采用迭代方法进行比对运算,每一次最优化过程就是迭代过程,通过不断使用动态规划法重排来纠正错误,同时对这些亚类群进行比对以获得所有序列的全局比对。
-相对Clustal,在比对速度和精度上都更优。
-相对Clustal,添加了额外的步骤,包括改进起始树(starting tree),重新选择树的分支和重新对齐任一剖面的改进步骤。
-
-5.2.3. MAFFT(2002) 特点:
-
-基于渐进式比对的算法,用快速傅里叶变换(fast Fourier transform)对序列进行聚类,再实现成对比对(pairwise alignments);
-之后的版本增加了其他算法和操作模式,包括快速、精确模式,非编码RNA序列比对及在现有比对中添加新的序列。
-实现了两种算法,累进方法(FFT‐NS‐2)和迭代优化方法(FFT‐NS‐i)
-比对精度比MUSCLE高,速度也快。
-
-5.2.4. T-Coffee (2000) 与MAFFT功能类似,但包括更复杂的成对比对评分函数,MSA必须描述一组一致的成对比对。
-5.3. 基于进化关系的比对 —— 统计比对(statistical alignment) 5.3.1. 统计比对的特点
-统计比对(statistical alignment)是在进化学语境下描述序列的变化,能够确定各序列在与其共同祖先分化后发生的插入、替换和删除的过程,在系统发育树上明确建模。
-可以根据序列的差异性灵活地使用不同地比对标准(评分矩阵与罚分),基于渐进式的比对无法做到
-基于进化关系,准确性优于渐进式比对,但由于计算量大,很少使用在基因组数据上。
-
-5.3.2. BAli-Phy(2005)
-贝叶斯后验比对
-利用马尔科夫链蒙特卡罗来探索给定分子序列数据的比对和系统发育的联合空间,同时估计消除了对不准确的比对引导树的偏差,在比对过程中采用了更复杂的替换模型,并自动利用共享插入/删除中的信息来帮助推断系统发育关系
-准确度和PRANK差不多?
+如果是多个基因串联的序列,有样本缺失一个基因的情况(缺失的用–表示),这个参数推荐变小一点,以保留有缺失样本的这部分基因的信息,获得更长的序列。
-5.3.3. PRANK(2008) 特点:
+
+b3:设置 “最大连续非保守位置数”。所有连续非保守位置大于该值的线段都将被拒绝。该参数值越大,所选位置数越多。
+b4:设置间隙清理后区块的最小长度。清除间隙后,小于此值的区块将被剔除。该参数值越大,所选位置数越少。
+
-针对DNA,密码子(codon)和氨基酸序列的概率多重比对软件(有密码子和氨基酸模式);
-可以重新构建祖先序列,有DNA翻译(DNA translation)和回译(back-translation)选项;
-对完全统计对齐的启发式(heuristic)方法;
-准确度高,但非常耗时,不适合基因组数据;
+注意:在程序的旧版本(0.73b)中,有两个参数可以调节最终图块的长度。当前菜单选项所对应的参数是 “间隙清理后块的最小长度”,这是最关键的参数。另一个参数是 “初始区块的最小长度”,这个版本的程序给出的数值与之前的长度相同。不过,如果您想复制与旧版本完全相同的结果,可以通过命令行为 “初始区块最小长度 “设置任意值(见下文)。您可以通过保存选项菜单中的结果和参数文件的保存简短选项查看两个最小长度参数的值 (见下文)。
-p.s.:PRANK比对过后序列顺序会被打乱,与比对前不一致,做后续处理时要小心。
-5.3.4. StatAlign(2008) 5.4. MACSE 了解得不多,先摘录在这里。
+
+b5:在处理间隙位置的三种不同可能性中切换:
+
-第一个可以用于自动调整含有移码变异以及假基因的蛋白编码序列,而不破坏潜在密码子结构。
-在核苷酸水平上对DNA序列进行比对,但有可能包括不是三个碱基倍数的间隙长度(即产生移码),同时基于其氨基酸翻译对产生的核苷酸比对进行评分。
-这可以产生保留潜在密码子结构的核苷酸比对,同时受益于氨基酸序列的更高相似性。
-已被用于基因组分析中
-OrthoMAM v8/v10数据库采用这个软件的分析流程
-
-5.5. 基于隐马尔可夫模型(Profile HMM Methods)的比对 5.5.1. SEPP(SATe-enabled Phylogenetic Placement) 解决将short reads放进参考序列和树的系统发育问题
-5.5.2. TIPP(Taxonomic Identification and Phylogenetic Profiling) 解决元组数据的分类识别和丰度分析问题
-5.5.3. UPP(Ultra-large alignments using Phylogeny-aware Profiles) 解决非常大的数据集对齐的问题,这些数据集可能包括零碎数据,可以将数据集多达1,000,000条序列对齐;
-5.5.4. HIPPI(Highly Accurate Protein Family Classificatio with Ensembles of HMMs) 解决蛋白质家族分类问题
-6. Trimming - 质量过滤软件 在比对完成后,使用质量过滤软件过滤一些低质量以及高变异度的序列区域,仅保留进化保守的区域用于后续分析。
-6.1. 产生低质量区域的原因
-序列特征:远缘物种的序列在一些位置(例如第一个或最后一个外显子)有很大差异,这种真实存在的差异由于受到选择的影响,不适用于推断系统发育树(希望用保守区域推断系统发育关系)。
-各种错误:包括测序错误、基因组组装错误、基因预测错误和多序列比对错误等。
+无(none/n):最终排列中不允许出现间隙位置。在区块选择过程中,所有有一个或多个间隙的位置都会被视为间隙位置,它们和相邻的非保留位置都会被消除。
+半数(half/h):只有 50% 或更多序列有间隙的位置才会被视为间隙位置。因此,如果在适当的区块内有少于 50%的序列存在间隙位置,则可以在最终比对中选择这些位置。
+全部(all/a):可以选择所有间隙位置。有间隙的位置不会与其他位置区别对待。
-6.2. 多序列比对后过滤软件 6.2.1. 常见过滤软件
-block-filtering : trimAl,Gblocks
-segment filtering : HmmCleaner,PREQUAL(基于隐马尔可夫模型的算法)
-sliding window analysis : FasParser2
+4.3. 所有参数
+
+
+ PARAMETER NAME
+ MEANING (Default)
+ ALLOWED VALUES
+
+
+
+ (None)
+ Filename (No default)
+ Alignment or pathnames file
+
+
+ -t=
+ Type Of Sequence (Protein , DNA, Codons)
+ p , d , c
+
+
+ -b1=
+ Minimum Number Of Sequences For A Conserved Position (50% of the number of sequences + 1 )
+ Any integer bigger than half the number of sequences and smaller or equal than the total number of sequences
+
+
+ -b2=
+ Minimum Number Of Sequences For A Flank Position (85% of the number of sequences )
+ Any integer equal or bigger than Minimum Number Of Sequences For A Conserved Position
+
+
+ -b3=
+ Maximum Number Of Contiguous Nonconserved Positions (8 )
+ Any integer
+
+
+ -b4=
+ Minimum Length Of A Block (10 )
+ Any integer equal or bigger than 2
+
+
+ -b5=
+ Allowed Gap Positions (None , With Half, All)
+ n , h , a
+
+
+ -b6=(Only available for protein alignments; only visible in the extended block parameters menu)
+ Use Similarity Matrices (Yes , No)
+ y , n
+
+
+ -b0=(This option does not appear in the menu)
+ Minimum Length Of An Initial Block (Same as Minimum Length Of A Block )
+ Any integer equal or bigger than 2
+
+
+ -s=
+ Selected Blocks (Yes , No)
+ y , n
+
+
+ -p=
+ Results And Parameters File (Yes , Text, Short Text, No)
+ y , t , s, n
+
+
+ -v=(Only visible in the extended saving options)
+ Characters Per Line In Results And Parameters File (60 )
+ Any integer bigger than 50
+
+
+ -n=(Only visible in the extended saving options)
+ Nonconserved Blocks (Yes, No )
+ y , n
+
+
+ -u=(Only visible in the extended saving options)
+ Ungapped Alignment (Yes, No )
+ y , n
+
+
+ -k=(Only visible in the extended saving options)
+ Mask File With The Selected Blocks (Yes, No )
+ y , n
+
+
+ -d=(Only visible in the extended saving options)
+ Postscript File With The Selected Blocks (Yes, No )
+ y , n
+
+
+ -a=(Only available with paths files)
+ Concatenated Blocks From Alignments In Batch (Yes, No )
+ y , n
+
+
+ -c=(Only available with paths files)
+ Concatenated Input Alignments In Batch (Yes, No )
+ y , n
+
+
+ -w=(Only available with paths files)
+ Concatenated Ungapped Alignments In Batch (Yes, No )
+ y , n
+
+
+ -e=
+ Generic File Extension (-gb )
+ Any string with 5 or less characters
+
+
+
+
+4.4. Gblocks结果
+samples_align.fas-gb:按照参数过滤掉不符合要求的比对,保留下保守blocks的比对序列结果。
+samples_align.fas-gb.htm:
-6.2.2. Gblocks(2000)
-删除大片段非保守性或非同源性片段(6-10bp的非同源片段识别得不好),还对block(即一段连续不含Gap的列)的长度进行了限制。
-不足:武断地规定了某个具体阈值来判断比对片段的保留或删除,对所有基因和所有片段一刀切式的处理,没有考虑不同片段的不同进化速率。
-
-在线版本:http://www.phylogeny.fr/one_task.cgi?task_type=gblocks
-6.2.3. trimAl(2009)
-优点:速度快,准确度高。
-比起Gblocks,可自动选择每个特定比对中的参数,包括Gap比例和氨基酸相似性水平,从而优化signal-to-noise ratio。
-
-6.2.4. HmmCleaner
-基于隐马尔可夫模型的新过滤算法。
-只能过滤氨基酸序列。
-
-6.2.5. PREQUAL
-基于隐马尔可夫模型的新过滤算法。
-针对非比对的蛋白编码序列及氨基酸序列。
-
-6.2.6. FasParser2(2018)
+ ]]>
bioinfo
alignment
- align
+ trim
Multiple Sequence Alignment
MSA
sequence alignment
trimming
- Clustal
- MUSCLE
- MAFFT
- PRANK
Gblocks
- trimAl
- 用MAFFT在现有多序列比对中添加新序列
- /2023/11/16/bioinfo_alignment_align_mafft_add/
-
-
-
-1. MAFFT简介 MAFFT是基于渐进式比对的算法,用于进行多序列比对(Multiple Sequence Alignment,MSA)。由于比对速度快,常用于组学数据的比对。
-MAFFT网页版有一个功能(–add),即向现有的多序列比对中添加新的序列,这在新增数据时非常有用。
-2. MAFFT的–add功能 MAFFT的–add功能的网页:https://mafft.cbrc.jp/alignment/server/add.html
-2.1. –add功能的三个模块 根据新增序列和现有多序列比对(MSA)的相对长度,分别选用–add功能的三个模块:
-
-–add:align full length sequences to an MSA. 新增序列与现有MSA长度相当时,选–add模块。
-–addfragments:align fragment sequences to an MSA. 新增序列短于现有MSA时,选–addfragments模块。
-–addlong:align long sequences to a short MSA. 新增序列长于现有MSA时,选–addlong模块。
-
-3. MAFFT网页版的–add用法 在网页https://mafft.cbrc.jp/alignment/server/add.html上选择模块,然后上传现有MSA和新增序列,选择参数,即可获得比对结果。
-3.1. 基本参数
-Allow unusual symbols:是否允许不明确字符。
-UPPERCASE/lowercase:输出的比对文件的字母大小写是否与输入文件一致。
-Direction of nucleotide sequences:是否根据第一条序列调整剩余序列的方向。
-Output order:输出比对文件的序列顺序。
-Sequence title:输出比对文件的序列名称是否与输入文件一致。3.2. 高级参数 最常用的是第一个参数,是否要保持输出MSA的长度。
-Keep alignment length :是否保持输出的比对的长度与输入的现有MSA长度一致,如果选择这个选项,则会把新增序列的insertions删除以保持长度不变。
-Strategy:默认选择Auto
-Progressive methods:包括FFT-NS-2,G-INS-1,L-INS-1三个选项。
-Iterative refinement methods:包括FFT-NS-i,G-INS-i,L-INS-i三个选项。
-对核苷酸/氨基酸序列的分数矩阵和gap处理等参数。
+ 富集分析:(三)clusterProfiler概述
+ /2021/12/13/bioinfo_enrichment_clusterProfiler.intro/
+
+
+clusterProfiler相关的博客共有三篇,共同食用,效果更好 :wink: :
+
+1. 基因富集分析(gene set enrichment analysis, GSEA) 富集分析概述参考博客:富集分析:(一)概述 。
+2. clusterProfiler介绍 clusterProfiler是一个R包,是一个解释组学数据的通用富集工具许多基因集的功能注释和富集分析,以及富集分析结果的可视化。
+2021年07月发布了clusterProfiler 4.0版本。
+
+
+Figure 1. clusterProfiler function and workflow
图片来源: yulab’s book
+3. clusterProfiler支持的基因集(gene sets)或基因通路数据库
+Gene Ontology(GO)
+Kyoto Encyclopedia of Genes and Genomes(KEGG)
+Disease Ontology(DO)
+Disease Gene Network(DisGeNET)
+Molecular Signatures Database(MSigDb)
+wikiPathways … …
-3.3. 结果 提交之后,在网页中可以看到比对结果,并可以下载fasta/clustal格式的比对结果,也可以转化成phylip/nexus/msf/gcg等格式。
-还可以点击Refine dataset 进入编辑界面,对比对结果进行进一步的编辑,比如对指定序列进行反向互补操作,保留或删除指定序列。
-4. MAFFT命令行版的–add用法 命令行版也可以使用–add功能,具体参数参考:https://mafft.cbrc.jp/alignment/software/addsequences.html
-5. MAFFT的merge功能 MAFFT还有一个merge模块,网页版:https://mafft.cbrc.jp/alignment/server/merge.html
-merge模块用于合并两个或更多已比对好的sub MSAs。当假定这些sub MSAs在系统发育关系上是各自独立为一单系时,即系统树上各自不重叠时,可使用merge模块。如果系统发育关系不独立,则推荐使用–add模块。
-6. references
-https://mafft.cbrc.jp/alignment/server/
+4. clusterProfiler功能 —— 富集分析(enrichment analysis) 4.1. 过表达分析(Over Representation Analysis, ORA) 过表达分析是用于采用超几何分布检验判断已知的生物功能或过程(例如GO/KEGG)在实验产生的基因列表(例如差异表达基因列表: differentially expressed genes, DEGs)中是否过表达(over-represented=enriched)的常用方法。
+所有基因(或全基因组)作为背景总数N,被注释到已知基因集(例如GO/KEGG)某一子集的基因总数是M,差异表达的基因数量是n,差异表达基因中属于M的数量是k。 过表达分析就是用统计学的方法判断GO/KEGG的每一个子类中是否k/n显著高于M/N,显著高于就是这个子类过表达。
+差异表达基因通常是前期通过比较转录组分析等手段获取的不同转录组间有表达差异的基因列表。
+4.2. 基因集富集分析(Gene Set Enrichment Analysis, GSEA) 对于差异很大的基因,可以使用ORA分析,但差异较小的基因也可能具有意义,很多相关表型差异是通过一组基因中微小但一致的变化(small but consistent changes)来表现的。
+基因集富集分析汇总一个基因集中每个基因的统计数据,可以检测预先定义的基因集(例如GO/KEGG)中所有基因以一种较小但协调的(small but coordinated)方式发生变化的情况。
+基因根据表型进行排序,给定先验定义的基因集(例如共享相同GO/KEGG类别的基因),GSEA的目标是确定S的成员是随机分布在排序的基因列表L中,还是主要分布在顶部或者底部。
+4.3. leading edge分析和核心富集基因(Leading edge analysis and core enriched genes) 包(clusterProfiler,DOSE,meshes,ReactomePA)支持Leading edge分析并可以提供GSEA分析中的核心富集基因core enriched genes结果。
+
+Leading edge分析可以获取:
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+Tags显示对富集分数有贡献的基因的百分比
+List显示获得富集分数在列表中的位置
+Signal显示富集信号强度
- ]]>
-
- bioinfo
- alignment
- align
-
-
- alignment
- Multiple Sequence Alignment
- MSA
- sequence alignment
- MAFFT
- add
- merge
-
-
-
- 蛋白质比对转换成CDS比对 —— ParaAT,PAL2NAL
- /2021/10/29/bioinfo_alignment_align_pep2cds/
-
+5. clusterProfiler安装 启动R后输入下面命令安装
+if ( ! requireNamespace( "BiocManager" , quiet = TRUE ) ) install.packages( "BiocManager" ) BiocManager:: install( "clusterProfiler" )
-1. 序列比对(sequence alignment) 序列比对的知识可以参考另一篇博文的内容。 Sequence Alignment:https://yanzhongsino.github.io/2021/09/06/bioinfo_alignment_align_intro/
-如果序列间差异较大,为了获得更精准的比对,有时我们会先做蛋白质的比对,然后根据蛋白质比对,转化成CDS比对。这篇博客就是记录把蛋白质比对转换成CDS比对的软件和使用。
-2. 蛋白比对转CDS比对 2.1. 成对比对(pairwise alignment) 2.1.1. 应用场景 如果是两条序列比对的转化,批量处理,可以用ParaAT脚本。
-比如用MCScanX软件做了共线性分析找到物种间的homologs基因对,或者WGD分析找到物种内的paralogs基因对,想要根据蛋白比对做对应的CDS比对。比对之后用于计算Ka和Ks。
-2.1.2. 成对比对软件 2.1.2.1. ParaAT ParaAT是中科院基因组所张章课题组在2012年开发,2014年更新了2.0版本,是一个perl脚本。
-ParaAT download ParaAT paper
-2.1.2.2. ParaAT下载 wget ftp://download.big.ac.cn/bigd/tools/ParaAT2.0.tar.gz tar -zxf ParaAT2.0.tar.gz cd ParaAT2.0 ParaAT.pl -h
+6. clusterProfiler的GO和KEGG富集分析 clusterProfiler支持对许多ontology/pathway的hypergeometric test和gene set enrichment analyses,包括数据库GO,KEGG,DO,DisGeNET,MSigDb,wikiPathways。
+使用支持的数据库时,需要检查分析样本是否在已有物种列表中。不在物种列表的物种数据,以及其他不在数据库列表的数据库,做分析时使用通用的富集分析(Universal enrichment analysis)模块。
+分析前,先用命令library(clusterProfiler)
载入clusterProfiler包。
+6.1. 背景数据库选择 参考博客基因富集分析(gene set enrichment analysis, GSEA) —— clusterProfiler:不同物种的GO+KEGG富集分析 。
+6.2. GO富集分析 6.2.1. GO的ORA分析 6.2.1.1. 输入文件 ORA分析的输入文件是gene ID list,比如差异表达分析(DESeq2)获得的差异表达基因列表,保存为内容为一列数据的文本文件gene.list,数据内容可以是OrgDb支持的任意ID类型(常用的都支持,ENSEMBL,ENTREZID,GENETYPE,GO,PFAM),具体参考ID 。 分析的是列表中基因在GO/KEGG各个子分类单元是否被过度代表还是代表不足。
+6.2.1.2. bitr格式转换 如果需要,也可以用bitr功能函数实现各种ID格式的转换。
+data <- read.table( "gene.list" , header= FALSE ) data$ V1 <- as.character ( data$ V1) test = bitr( data$ V1, fromType= "SYMBOL" , toType= c ( "ENSEMBL" , "ENTREZID" ) , OrgDb= org.At.tair.db) head( test, 2 ) SYMBOL ENSEMBL ENTREZID 1 AASDH ENSG00000157426 132949 2 ABCB11 ENSG00000073734 8647
-ParaAT2.0目录下有两个脚本,ParaAT.pl用于成对比对的转换(可以批量处理),目录下还有另一个多序列转换脚本Epal2nal.pl(好像是pal2nal.pl的V13版本)。
-2.1.2.3. ParaAT使用
-输入文件 三个输入文件,sample.id,cds.fa,pep.fa,三个文件的序列id要一致。
+6.2.1.3. GO分类 groupGO()函数可以基于GO在指定水平范围内的分布进行基因分类。
+data <- read.table( "gene.list" , header= F ) genes <- as.character ( data$ V1) ggo <- groupGO( gene = genes, OrgDb = org.Hs.eg.db, ont = "CC" , level = 3 , readable = TURE) head( ggo, 3 ) ID Description Count GeneRatio geneID GO: 0000003 GO: 0000003 reproduction 0 0 / 929 GO: 0008152 GO: 0008152 metabolic process 0 0 / 929 GO: 0001906 GO: 0001906 cell killing 0 0 / 929
+
+6.2.1.4. ORA分析
+读取输入文件
-sample.id文件 两列,每行对应两条要做成对比对的序列ID,任意行,ParaAT可以批量处理多个成对比对。
-
-cat sample.collinearity |grep "species_prefix"|cut -f2,3 >sample.id
用MCScanX的结果文件提取blocks的同源gene对,获得sample.id文件。
-
-cds.fa 包括所有需要比对的cds序列的文件
-pep.fa 包括所有需要比对的蛋白序列的文件
+读取基因ID的list文件
+这些ID会在enrichGO的分析中被自动去重,所以文件是否有重复结果都一样。
+data <- read.table( "gene.list" , header= F ) genes <- as.character ( data$ V1)
+
-运行
+支持物种的标准分析 enrichGO()
-
-参数:
-
--h sample.id:指定基因对文件
--n cds.fa:指定CDS序列文件,包含所有sample.id涉及的基因的CDS序列;
--a pep.fa:指定氨基酸序列文件,包含所有sample.id涉及的基因的氨基酸序列;
--m mafft:指定比对软件
--p proc:指定线程
--f axt:指定输出比对的CDS序列的格式(WGD计算KaKs一般用axt格式比较多)
--o paraat:指定输出文件目录(如果不存在会新建目录)。
-
-其他参数:
-
--g:移除比对后包含gap的密码子;建议加上-g和-t,免得后面计算Ks时报错Error. The size of two sequences in ‘ctg00816-ctg08844’ is not equal。
--t:移除mismatched codons;建议加上-g和-t,免得后面计算Ks时报错Error. The size of two sequences in ‘ctg00816-ctg08844’ is not equal。
--k:用KaKs_Calculator计算(需要输出axt格式)Ka和Ks,获得axt文件后自动计算kaks值,使用MA模型,比YN模型慢,推荐输出axt后自己用KaKs_Calculator计算并用YN模型。
--c 1:指定编码方式,不同生物的编码方式不同,默认是标准型1。
-
-
-报错 ERROR: inconsistency between the following pep and nuc seqs
-2.2. 多序列比对(multiple sequence alignment) 2.2.1. 应用场景 如果是多序列的转化,可以使用PAL2NAL脚本。
-比如做了orthofinder2找到多个物种的orthogroups,要对每一组orthogroups进行蛋白比对转换成CDS比对。
-2.2.2. 多序列比对软件 2.2.2.1. PAL2NAL PAL2NAL介绍
-
-PAL2NAL可以将蛋白的多序列比对转换成CDS比对,如果输入的是一对序列,还会通过paml的codeml程序自动计算dn和ds。
-如果数据量少,可以通过上面的网页进行转换。
-
-2.2.2.2. PAL2NAL下载 wget http://www.bork.embl.de/pal2nal/distribution/pal2nal.v14.tar.gz tar -zxvf pal2nal.v14.tar.gz pal2nal.pl -h
-
-2.2.2.3. PAL2NAL使用 pal2nal.pl -nogap -nomismatch pep.aln nuc.fa -output fasta >nuc.aln
-需要已经做好比对的蛋白质序列pep.aln和ID一致的cds序列nuc.fa
-参数:
--output (clustal|paml|fasta|codon) # Output format; default = clustal
--nogap # remove columns with gaps and inframe stop codons
--nomismatch # remove mismatched codons (mismatch between pep and cDNA) from the output
+ONTOLOGY:CC BP MF
+ID: Gene Ontology数据库中唯一的标号信息
+Description :Gene Ontology功能的描述信息
+GeneRatio:差异基因中与该Term相关的基因数与整个差异基因总数的比值
+BgRatio:所有( bg)基因中与该Term相关的基因数与所有( bg)基因的比值
+pvalue: 富集分析统计学显著水平,一般情况下, P-value < 0.05 该功能为富集项
+p.adjust 矫正后的P-Value
+qvalue:对p值进行统计学检验的q值
+geneID:与该Term相关的基因
+Count:与该Term相关的基因数
-3. references
-https://en.wikipedia.org/wiki/Sequence_alignment
+
+输出结果保存为csv表格write.table( as.data.frame( ego) , "go_enrich.csv" , sep= "\t" , row.names = F , quote = F )
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bioinfo
- alignment
- align
-
-
- sequence alignment
- biosoft
- tutorial
- ParaAT
- protein
- CDS
- PAL2NAL
-
-
-
- 正交和反交在遗传学中的应用
- /2024/06/18/bio_genetics_hybridization_reciprocal.cross/
-
-
-1. 正交和反交
-正反交(reciprocal cross)又称为互交,是指两个具有不同基因型的亲本杂交时配置父本和母本的两种方式。
-正反交是相对而言。如以A(♀)×B(♂)为正交,则B(♀)×A(♂)为反交。
-
-2. 正交和反交在遗传学中的应用 2.1. 判断某对性状是细胞核遗传和细胞质遗传
-细胞核遗传
+6.2.1.5. 结果整理和筛选
+如果没使用keyType参数,可以在得到结果后使用
+如果没使用readable=True参数,可以在得到结果后用函数setReadable()将GeneID转换为symbol。ego <- setReadable(ego, OrgDb = org.At.tair.db)
+函数dropGO可以移除enrichGO结果中特定的GO term或GO level
+函数gofilter()可以将结果限定在特定的GO level
+函数simplify可以去除冗余,ego_rm <- simplify(ego, cutoff=0.7, by="p.adjust", select_fun=min)
-
-由细胞核中的基因控制的遗传,称为细胞核遗传 。由孟德尔的遗传试验得知:在细胞核遗传中,正反交的结果是一样的。
-
-
-细胞质遗传
+6.2.2. GO的GSEA分析 GSEA分析通过置换检验来计算p值
+6.2.2.1. GSEA的输入文件
+GSEA分析的输入文件是一个基因排序列表,有三个要点:
-由线粒体或叶绿体(植物)中的基因控制的遗传,称为细胞质遗传 。由紫茉莉质体的遗传实验得知:在细胞质遗传中,正反交的结果是不一样的。
+numeric vector:倍数变化或者其他类型的数字变量,比如差异表达分析里的logFC值
+named vector:每个数字对应的gene ID命名
+sorted vector;数字应该以降序排序 即包含两列,一列基因ID名称,一列数据,并以数据降序排序。
-
-判断方式
+
+获取输入文件的示例:
-
-若正交和反交产生的F1的性状表现都与母本相同,则为细胞质遗传;若正交与反交产生的F1的性状表现都与父本相关,则为细胞核遗传。
-
-2.2. 如果性状是细胞核遗传,判断控制性状的基因在常染色体(或性染色体同源区段)上还是性染色体非同源区段上
-常染色体(或性染色体同源区段)上的基因控制的遗传
+d <- read.csv( your_csv_file) geneList <- d[ , 2 ] names ( geneList) <- as.character ( d[ , 1 ] ) geneList <- sort( geneList, decreasing = TRUE )
+
+> head( mydata, 3 ) gene_name female male logFC 1 CG32548 0.02310383 72.43205 11.61428 2 CG15892 0.02624160 57.22716 11.09063 3 CR43803 0.02474626 34.09726 10.42823 > > genelist <- mydata$ logFC > names ( genelist) <- as.character ( mydata$ gene_name) > genelist <- sort( genelist, decreasing= T ) > head( genelist) CG32548 CG15892 CR43803 CG15136 CG4983 CG13989 11.61428 11.09063 10.42823 10.34305 10.29130 10.00569
+
+6.2.2.2. GSEA分析
+读取输入文件
+data <- read.csv( "geneList.csv" ) geneList <- d[ , 2 ] names ( geneList) <- as.character ( d[ , 1 ] ) geneList <- sort( geneList, decreasing = TRUE )
+
+支持物种的标准分析 gseGO()
+gsego <- gseGO( geneList = geneList, OrgDb = org.At.tair.db, ont = "BP" , keyType = "SYMBOL" , nPerm = 1000 , minGSSize = 100 , maxGSSize = 500 , pvalueCutoff = 0.05 , verbose = FALSE , by = "fgsea" ) head( gsego, 1 ) ;dim ( gsego) ID Description setSize enrichmentScore GO: 0003674 GO: 0003674 molecular_function 323 0.9462411 NES pvalue p.adjust qvalues rank GO: 0003674 1.716837 0.000999001 0.000999001 NA 579 leading_edge GO: 0003674 tags= 100 %, list=11% , signal= 95 % core_enrichment GO: 0003674 CG15892/ CG15136/ CG4983/ CG43851/ … [ 1 ] 53 11 head( data.frame( gsego$ ID, gsego$ Description) ) gsego.ID gsego.Description 1 GO: 0003674 molecular_function2 GO: 0005488 binding
+
+提供注释文件go_annotation.txt的非模式物种分析 GSEA()
+data <- read.table( "go_annotation.txt" , header = T , sep = "\t" , quote = "" ) go2gene <- data[ , c ( 2 , 1 ) ] go2name <- data[ , c ( 2 , 3 ) ] gsego <- GSEA( genes, TERM2GENE = go2gene, TERM2NAME = go2name)
+
+gsego结果文件解释
+
-常染色体上的基因控制的遗传,无论正交、反交其后代的基因型、表现型及其比例都是相同的,与性别无关。
-性染色体的同源区段上的基因控制的遗传与常染色体类似,所以要注意。
+ID: Gene Ontology数据库中唯一的标号信息
+Description:Gene Ontology功能的描述信息
+setSize
+enrichmentScore:富集分数
+NES
+pvalue: 富集分析统计学显著水平,一般情况下, P-value < 0.05 该功能为富集项
+p.adjust:矫正后的P-Value
+qvalues:对p值进行统计学检验的q值
+rank
+leading_edge
+core_enrichment
-
-性染色体上的基因控制的遗传
+6.2.3. GO富集结果可视化 goplot(ego)
简单可视化结果为有向无环图。
+6.3. KEGG富集分析 clusterProfiler通过KEGG数据库的API 来获取KEGG的注释信息,包括一个物种所有基因对应的pathway注释文件,比如人的:http://rest.kegg.jp/link/hsa/pathway;和pathway对应的描述信息,比如人的:http://rest.kegg.jp/list/pathway/hsa。
+6.3.1. 支持的物种
+clusterProfiler包支持的物种 只需要将物种缩写输入给clusterProfiler,clusterProfiler包支持自动联网调取kegg注释物种 列出物种的pathway注释信息,网站可以查看物种列表和缩写,或者用clusterProfiler包提供search_kegg_organism()函数来帮助搜索支持的生物。
-
-对性别决定的生物来讲,由于两种性染色体中存在非同源部分。
-因此,正反交后代的基因型比例存在不同。
-
-
-判断方式
+search_kegg_organism( 'osa' , by= 'kegg_code' ) search_kegg_organism( 'Escherichia coli' , by= 'scientific_name' )
+
+
+用户提供KEGG pathway注释数据 如果分析的物种不支持自动调取,可以自己做KEGG pathway注释后提供注释文件,比如interproscan、eggnog-mapper等软件的注释结果,整理成clusterProfiler支持的输入格式即可。
-
-若正交和反交产生的F1的性状表现比例一致,则控制性状的基因在常染色体上或者在性染色体同源区段上;若正交与反交产生的F1的性状比例不一致,则控制性状的基因在性染色体非同源区段上。
-
-2.3. 判断植物果实的某种性状是由子房壁(珠被)发育而来的还是由受精胚珠发育而来的 果实的部分性状是子房壁(属于母本)发育而来,部分性状是由受精胚珠(属于子代)发育而来。
+clusterProfiler需要导入的KEGG pathway注释文件pathway_annotation.txt的格式如下:
+
+
+
+GeneID
+Pathway
+Path_Description
+
+
+
+1
+ko:00001
+spindle
+
+
+2
+ko:00002
+mitotic spindle
+
+
+3
+ko:00003
+kinetochore
+
+
+data.frame格式,包含三列,第一列为Gene ID,第二列为 KEGG Pathway ID,第三列为Path_Description,顺序无要求。
+6.3.2. KEGG pathway的ORA分析 6.3.2.1. KEGG输入ID的格式转换 ID转换函数
+library( clusterProfiler) bitr_kegg( "1" , fromType = "kegg" , toType = 'ncbi-proteinid' , organism= 'hsa' ) library( org.Hs.eg.db) keytypes( org.Hs.eg.db) bitr( gene, fromType = "ENTREZID" , toType = c ( "ENSEMBL" , "SYMBOL" ) , OrgDb = org.Hs.eg.db) gene <- c ( "AASDH" , "ABCB11" , "ADAM12" , "ADAMTS16" , "ADAMTS18" ) genes <- gene$ V1 data( geneList, package= "DOSE" ) genes <- names ( geneList) [ abs ( geneList) > 2 ]
+
+6.3.2.2. KEGG pathway的ORA分析 输入文件与GO的ORA分析输入文件一样。
-子房壁(珠被)发育
+导入输入文件
-
-被子植物雌蕊子房壁会发育而形成的果实中(果肉)部分的大小、色泽、形态等特征。
-这些特征完全由母本的遗传物质决定,与父本的遗传物质无任何关系。
-因此,被子植物在进行正反交时,果实的性状完全表现为母本的性状,但这与细胞质遗传有着本质的区别。
-
+data <- read.table( "gene.list" , header= F ) genes <- as.character ( data$ V1)
+
-判断方式
+支持物种的标准分析 enrichKEGG()
-
-方法:用显性雄性个体与隐性雌性个体进行杂交(正交),再用隐性雄性个体与显性雌性个体进行杂交(反交)
-结果与结论:若性状完全与母本一致,即正交的性状为隐性性状而反交的性状为显性性状,则该性状是由子房壁(珠被)发育而来的。若性状表现出F1代特征,即全为显性性状,则该性状是由受精胚珠发育而来的。
-
+kk <- enrichKEGG( gene = genes, keyType = "kegg" , organism = 'hsa' , pvalueCutoff = 0.05 pAdjustMethod= "BH" , qvalueCutoff = 0.2 ) head( kk, 2 ) ID Description GeneRatio BgRatio hsa04750 hsa04750 Inflammatory mediator regulation of TRP channels 5 / 53 97 / 7387 hsa04020 hsa04020 Calcium signaling pathway 6 / 53 182 / 7387 pvalue p.adjust qvalue geneID Count hsa04750 0.0006135305 0.08589427 0.0807277 40 / 3556 / 3708 / 5608 / 79054 5 hsa04020 0.0018078040 0.12654628 0.1189345 493 / 1129 / 2066 / 3707 / 3708 / 4842 6
+
+输入的ID类型默认是kegg gene id,也可以是ncbi-geneid或ncbi-proteinid或者uniprot等,可以通过上一步格式转换转换ID类型。 organism对应物种的三字母缩写,其他参数与GO的ORA分析参数一致。
+不像enrichGO()函数有readable()参数,enrichKEGG()函数没有这个参数,当待分析物种在OrgDb数据库中可用时,可以用setReadable()函数把gene ID转换成gene Name。
-性状例子 已知甜玉米与非甜玉米为一对相对性状,且甜玉米对非甜玉米为隐性。探究玉米子粒中决定口味的部分是来自子房壁的发育,还是来自受精胚珠的发育。
+提供注释文件pathway_annotation.txt的非模式物种分析 enricher()
-3. reference
-wiki:互交:https://zh.wikipedia.org/wiki/%E4%BA%92%E4%BA%A4
-wiki:reciprocal cross:https://en.wikipedia.org/wiki/Reciprocal_cross
-百度百科:正反交:https://baike.baidu.com/item/%E6%AD%A3%E5%8F%8D%E4%BA%A4/5883018#:~:text=%E6%AD%A3%E5%8F%8D%E4%BA%A4_%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91&text=%E6%AD%A3%E5%8F%8D%E4%BA%A4%EF%BC%88reciprocal%20crosses,%EF%BC%88%E2%99%82%EF%BC%89%E4%B8%BA%E5%8F%8D%E4%BA%A4%E3%80%82
-巧用正反交解决遗传中的问题:https://res.tongyi.com/resources/article/student/others/200803zt-xf-zw/200803zt/xf/gz/sw/XF1W0347.htm
-正交与反交在遗传学解题中的应用:https://blog.sina.com.cn/s/blog_b30a6c020101hmua.html
+pathway_anno <- read.table( "pathway_annotation.txt" , header = T , sep = "\t" ) go2gene <- pathway_anno[ , c ( 2 , 1 ) ] go2name <- pathway_anno[ , c ( 2 , 3 ) ] kk <- enricher( gene, TERM2GENE = go2gene, TERM2NAME = go2name)
+
+
+结果输出到csv文件write.table(as.data.frame(kk),"KEGG_enrich.csv",sep="\t",row.names =F,quote=F)
#保存到文件KEGG_enrich.csv。其中as.data.frame(kk)把kk对象转换成数据框dataframe
+
+6.3.3. KEGG pathway的GSEA分析
+读取输入文件
+data <- read.csv( "geneList.csv" ) geneList <- d[ , 2 ] names ( geneList) <- as.character ( d[ , 1 ] ) geneList <- sort( geneList, decreasing = TRUE )
+
+支持物种的标准分析 gseKEGG()
+
+
+kks <- gseKEGG( geneList = geneList, keyType = "kegg" , organism = 'hsa' , nPerm = 1000 , minGSSize = 10 , maxGSSize = 500 , pvalueCutoff = 0.05 , pAdjustMethod= "BH" , verbose = FALSE ) head( kk2)
+
+
+提供注释文件pathway_annotation.txt的非模式物种分析 GSEA()data <- read.table( "pathway_annotation.txt" , header = T , sep = "\t" ) go2gene <- data[ , c ( 2 , 1 ) ] go2name <- data[ , c ( 2 , 3 ) ] kks <- GSEA( gene, TERM2GENE = go2gene, TERM2NAME = go2name)
+
+6.3.4. KEGG module的ORA分析 KEGG Module 是手动定义的功能单元的集合。在某些情况下,KEGG 模块有更直接的解释。
+mkk <- enrichMKEGG( gene = gene, organism = 'hsa' , pvalueCutoff = 0.05 , qvalueCutoff = 0.2 ) head( mkk)
+
+6.3.5. KEGG module的GSEA分析 mkk2 <- gseMKEGG( geneList = geneList, organism = 'hsa' , pvalueCutoff = 0.05 ) head( mkk2)
+
+6.3.6. KEGG pathways富集结果的可视化 enrichplot包可以实现几种方法,可以用在GO,KEGG,MSigDb等基因集注释上。
+
+browseKEGG()函数会打开网络浏览器突出显示富集的基因的KEGG通路,用hsa04110基因举例:browseKEGG(kk, 'hsa04110')
+
+pathview::pathview()可视化富集的KEGG通路
+library("pathview") hsa04110 <- pathview(gene.data = geneList, pathway.id = "hsa04110", species = "hsa", limit = list(gene=max(abs(geneList)), cpd=1))
+
+6.4. 通用的富集分析(Universal enrichment analysis) 除GO,KEGG基因集外,clusterProfiler还支持WikiPathways,Reactome,Disease,MeSH等数据库的富集分析。
+虽然clusterProfiler支持对许多ontology/pathway的hypergeometric test和gene set enrichment analyses,但是还有很多数据,包括不支持的物种、不支持的ontologies/pathways或自定义注释等。 clusterProfiler提供了用于hypergeometric test的enricher()函数和用于基因集富集分析的GSEA()函数,用于接受用户定义的注释。
+另外两个参数TERM2GENE和TERM2NAME:
+
+TERM2GENE是一个必需的data.frame,第一列为term ID,第二列为对应映射基因;
+TERM2NAME是一个可选的data.frame,第一列为term ID,第二列为对应term name。
+
+在GO和KEGG富集分析的用户自行提供注释文件的分析部分,使用的enricher()和GSEA()函数。
+7. references
+GSEA wiki: https://en.wikipedia.org/wiki/Gene_set_enrichment_analysis
+enrichment: https://www.jianshu.com/p/47b5ea646932
+clusterProfiler github: https://github.com/YuLab-SMU/clusterProfiler
+clusterProfiler paper: https://www.cell.com/the-innovation/fulltext/S2666-6758(21)00066-7?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS2666675821000667%3Fshowall%3Dtrue
+clusterProfiler book: http://yulab-smu.top/biomedical-knowledge-mining-book/index.html
+clusterProfiler manual: https://bioconductor.org/packages/devel/bioc/manuals/clusterProfiler/man/clusterProfiler.pdf
+clusterProfiler ducumentation: https://guangchuangyu.github.io/software/clusterProfiler/documentation/
+clusterProfiler blog: https://guangchuangyu.github.io/2016/01/go-analysis-using-clusterprofiler/
+tutorial: https://www.cnblogs.com/jessepeng/p/12159139.html
+函数simplify: http://guangchuangyu.github.io/2015/10/use-simplify-to-remove-redundancy-of-enriched-go-terms/
@@ -1857,14 +2174,16 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
- bio
- genetics
- hybridization
+ bioinfo
+ enrichment
- bio
- reciprocal cross
- hybridization
+ gene set enrichment analysis
+ GSEA
+ enrichment analysis
+ over representation analysis
+ ORA
+ clusterProfiler
@@ -1927,495 +2246,204 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 用Gblocks对序列比对进行过滤
- /2023/09/30/bioinfo_alignment_trim_Gblocks/
-
+ 富集分析:(五)clusterProfiler:Visualization
+ /2022/04/28/bioinfo_enrichment_clusterProfiler.visualization/
+
-序列比对的知识可以参考另一篇博文的内容。 Sequence Alignment:https://yanzhongsino.github.io/2021/09/06/bioinfo_alignment_align_intro/
-1. Gblocks简介
-Gblocks是什么
-
+(全文约4000字)
+clusterProfiler相关的博客共有三篇,共同食用,效果更好 :wink: :
+1. 可视化的输入数据 clusterProfiler的可视化一般只支持clusterProfiler富集分析结果的可视化,通过认识clusterProfiler可视化接受的输入数据的格式,可以修改其他富集分析结果文件的格式,来用clusterProfiler进行可视化绘图。
+1.1. 可视化输入数据格式
+查看ego格式 clusterProfiler的可视化包接受的输入数据是前面富集分析得到的结果(比如ego/kk),用str(ego)
或class(ego)
可以看到ego的格式是叫enrichResult的R的数据类型。library( clusterProfiler) > class ( ego) [ 1 ] "enrichResult" attr ( , "package" ) [ 1 ] "DOSE"
+
+如果手头没有ego数据,可以用clusterProfiler的样例数据快速得到一个edo,与ego格式一样。
+library( clusterProfiler) data( geneList) de <- names ( geneList) [ abs ( geneList) > 2 ] edo <- enrichDGN( de) class ( ego)
+
-Gblocks原理
+enrichResult(R的class类型)格式 在DOSE包中查到,enrichResult具体格式如下:
+setClass( "enrichResult" , representation= representation( result = "data.frame" , pvalueCutoff = "numeric" , pAdjustMethod = "character" , qvalueCutoff = "numeric" , organism = "character" , style= "margin: 0px; padding: 0px; color: rgb(221, 17, 68);" > "character" , gene = "character" , keytype = "character" , universe = "character" , gene2Symbol = "character" , geneSets = "list" , readable = "logical" ) , prototype= prototype( readable = FALSE ) )
+
+result变量格式 enrichResult中最重要的是result,是储存富集结果的dataframe。 result变量与clusterProfiler富集分析中保存ego的结果文件是一致的。
+
+ego@ result[ c ( 13 , 14 ) , ] ONTOLOGY ID Description GeneRatio BgRatio pvalue p.adjust qvalue geneID Count 13 BP GO: 0010051 xylem and phloem pattern formation 3 / 349 129 / 16975 1.431350e-05 0.001294821 0.001099880 mc40782/ mc40784/ mc40918 3 14 BP GO: 0048598 embryonic morphogenesis 2 / 349 131 / 16975 1.673394e-05 0.001405651 0.001194023 mc40784/ mc40918 2
+
+一般而言result有9列。这里因为用enrichGO富集时ont参数选择ALL,结果就会在第一列前多一列ONTOLOGY。
-Gblocks 通过挑选序列块(blocks)来筛选比对序列,序列块(blocks)必须满足一定的要求,如缺乏大段连续的非保守位置、缺乏或低密度的GAP位置以及侧翼位置的高度保守性,从而使最终选出的blocks组成的比对序列更适合用于系统发育学分析。
+第一列是ID,也就是富集通路的编号(GO:0010222);
+第二列是Description,也就是富集通路的名称;
+第三列是GeneRatio,也就是要富集的基因中在对应通路中的比例;
+第4列是BgRation,也就是对应通过的基因在全基因组注释中的比例;
+第5,6,7列都是统计检验的结果;
+第8列是geneID,也就是富集到基因的名字,多个geneID是以斜线隔开的;
+第9列是Count,也就是富集到的基因数目。
-
-Gblocks特点
+1.2. 输入数据准备 根据不同情况为clusterProfiler的可视化准备输入数据。
+
+接着clusterProfiler富集分析做可视化 如果是接着clusterProfiler的enrichGO(),gseGO(),enricher(),gseGO()等函数的结果ego
,不要关闭R环境,在R里直接进行用于下一步可视化即可。
+
+保存的clusterProfiler富集分析结果做可视化
+
-删除大片段非保守性或非同源性片段(6-10bp的非同源片段识别得不好),还对block的长度进行了限制。
-Gblocks 可输出网页文件来显示哪些比对区块被保留,哪些被丢弃。
-不足:武断地规定了某个具体阈值来判断比对片段的保留或删除,对所有基因和所有片段一刀切式的处理,没有考虑不同片段的不同进化速率。
+如果是clusterProfiler的enrichGO(),gseGO(),enricher(),gseGO()等函数的结果ego
保存成的文件,已关闭R环境。
+可导入文件,新建enrichResult对象ego,再进行下一步可视化。
+这里假设用R命令write.table(as.data.frame(ego),"go_enrich.csv",sep="\t",row.names =F,quote=F)
保存ego
在go_enrich.csv
文件。data<- read.table( "go_enrich.csv" , sep= "\t" , header= T , quote = "" ) head( data, 2 ) ONTOLOGY ID Description GeneRatio 1 BP GO: 0010222 stem vascular tissue pattern formation 12 / 349 2 BP GO: 0010588 cotyledon vascular tissue pattern formation 12 / 349 BgRatio pvalue p.adjust qvalue 1 29 / 16975 1.792157e-13 2.107577e-10 1.790270e-10 2 39 / 16975 1.122611e-11 6.600951e-09 5.607145e-09 geneID 1 mc11300/ mc11301/ mc19080/ mc19081/ mc26300/ mc31693/ mc37850/ mc40780/ mc40781/ mc40782/ mc40784/ mc409182 mc11300/ mc11301/ mc19080/ mc19081/ mc26300/ mc31693/ mc37850/ mc40780/ mc40781/ mc40782/ mc40784/ mc40918 Count 1 12 2 12 geneID_all <- unlist( apply( as.matrix( data$ geneID) , 1 , function ( x) unlist( strsplit( x, '/' ) ) ) ) ego<- new( "enrichResult" , result= data, gene= geneID_all, pvalueCutoff= 0.01 , pAdjustMethod= "BH" , qvalueCutoff= 0.05 , ontology= "BP" , keytype= "GID" , universe= 'Unknown' , geneSets= list ( ) , organism= "Unknown" , readable= FALSE )
-2. Gblocks过滤的流程
-首先,评估多重排列中每个位置的保守程度,并将其分为非保守、保守或高度保守。所有大于一定值(b3设置)的连续非保守位置都会被剔除。
-在余下的区块中,将对侧翼进行检查并移除位置,直到区块的两个侧翼都被高度保守的位置所包围。这样,选定的区块就会被高置信度的排列位置所锚定。
-然后,所有间隙Gap位置(b5设置gap的定义)都会被删除。此外,与间隙位置相邻的非保守位置也会被移除,直到达到保守位置,因为与间隙相邻的区域最难对齐。最后,间隙清理后剩余的小块(b4设置)也会被移除。
-对输入的比对序列的一个重要要求是,在一个保守性很好的区块内(由于移帧测序错误或该特定序列的高分歧)没有完全错配的单条序列。如果其余序列有足够多的相同点,Gblocks 就会认为该序列块是保守的,并将其选中。有一些方法可以检测到这类错误排列的序列,如 ClustalX 程序中的低分段可视化,应使用这种方法来确保排列中不包含含有大量此类片段的序列。
+
+其他来源富集分析结果可视化 如果是其他软件的富集分析结果,可以根据ego的result变量格式进行修改格式,改成go_enrich.csv相同的格式的文件,再按照上面的步骤导入文件,并保存到新建的ego对象。即可用clusterProfiler的可视化包可视化其他软件的富集分析结果了。
-3. Gblocks有多个版本 2000年发布第一版Gblocks 0.73b,后更新一版0.91b,之后就没更新过了。
+2. 功能富集结果可视化 下面的可视化大多基于在R中已获得富集分析的结果ego。
+2.1. enrichplot包 enrichplot包有几种可视化方法来解释富集结果,支持clusterProfiler获得的ORA和GSEA富集结果。
+2.1.1. 安装和载入 安装和载入enrichplot包
+BiocManager:: install( "enrichplot" ) library( enrichplot)
+
+2.1.2. 可视化包
+推荐dotplot或barplot可视化前10个GO Terms条目。
+推荐goplot有向无环图查看富集的GO Terms间的关系。
+
-在线版本:http://www.phylogeny.fr/one_task.cgi?task_type=gblocks
+可视化barplot —— 条形图 将富集分数(例如p 值)和基因计数或比率描述为条形高度和颜色。横轴为该GO term下的差异基因个数,纵轴为富集到的GO Terms的描述信息, showCategory指定展示的GO Terms的个数为20个,默认展示显著富集的top10个,即p.adjust最小的10个。
-
-如果没有特殊参数,序列较短,可使用在线版本,方便快捷。
-
+barplot(ego, showCategory=20, title="EnrichmentGO_MF")
+使用mutate导出的其他变量也可以用作条形高度或颜色。
+mutate( ego, qscore = - log ( p.adjust, base= 10 ) ) %>% barplot( x= "qscore" )
+
+
+
+Figure 1. Bar plot of enriched terms
from clusterProfiler book
-本地版本包括Mac OS X,Window,Linux三个系统的版本
+可视化dotplot —— 点阵图dotplot(edo, showCategory=30) + ggtitle("dotplot for ORA")
-
-wget https://www.biologiaevolutiva.org/jcastresana/Gblocks/Gblocks_Linux64_0.91b.tar.Z uncompress Gblocks_OS_0.91b.tar.Z tar xvf Gblocks_OS_0.91b.tar
+dotplot(edo2, showCategory=30) + ggtitle("dotplot for GSEA")
+散点图,横坐标为GeneRatio,纵坐标为富集到的GO Terms的描述信息,showCategory指定展示的GO Terms的个数,默认展示显著富集的top10个,即p.adjust最小的10个。
+
-4. Gblocks的使用
-Gblocks有两种用法,一种是交互式,一种是命令行式。这里推荐命令行式。
-Gblocks命令行式,fasta文件在前面,后面跟着参数;如果没跟参数,则自动进入交互式界面。
-
-4.1. Gblocks命令行式用法
-常用命令:Gblocks samples_align.fas -t=d -e=-gb
,序列比对文件跟在Gblocks后,后面再接参数。
-Gblocks命令行用法的常用参数
+Figure 2. Dot plot of enriched terms
from clusterProfiler book
+
+可视化cnetplot —— 类别网络图 cnetplot 将基因和生物学概念(例如 GO 术语或 KEGG 通路)的联系描述为一个网络(有助于查看哪些基因涉及富集通路和可能属于多个注释类别的基因)。对于基因和富集的GO terms之间的对应关系进行展示,如果一个基因位于一个GO Terms下,则将该基因与GO连线。图中灰色的点代表基因,黄色的点代表富集到的GO terms, 默认画top5富集到的GO terms, GO 节点的大小对应富集到的基因个数。
-
--t=
:序列类型,包括p(protein, default)、d(DNA)、c(codons)
--e=
:生成文件的后缀扩展名,默认是-gb
-
-4.2. Block参数解释
-b1:设置 “保守位置的最少序列数”,即设置定义保守位置的阈值。该值必须大于序列数的一半。该参数值越大,所选位置数量越少。
-b2:设置 “侧翼位置最少序列数”(Minimum Number Of Sequences For A Flank Position),即设置侧翼位置定义的阈值。该值必须大于或等于 “保守位置的最少序列数”。该参数值越大,所选位置数量越少。
+cnetplot(ego, categorySize = "pvalue", foldChange = gene_list
+edox <- setReadable( ego, 'org.Hs.eg.db' , 'ENTREZID' ) p1 <- cnetplot( edox, foldChange= geneList) p2 <- cnetplot( edox, categorySize= "pvalue" , foldChange= geneList) p3 <- cnetplot( edox, foldChange= geneList, circular = TRUE , colorEdge = TRUE ) cowplot:: plot_grid( p1, p2, p3, ncol= 3 , labels= LETTERS [ 1 : 3 ] , rel_widths= c ( .8 , .8 , 1.2 ) )
+
+
+
+Figure 3. Network plot of enriched terms
from clusterProfiler book
+
+可视化heatplot —— 类热图功能分类 同样使用edox。 heatplot类似cnetplot,而显示为热图的关系。 如果用户想要显示大量重要术语,那么类别网络图可能会过于复杂。在heatplot能够简化结果和更容易识别的表达模式。
-
-如果是多个基因串联的序列,有样本缺失一个基因的情况(缺失的用–表示),这个参数推荐变小一点,以保留有缺失样本的这部分基因的信息,获得更长的序列。
-
-
-b3:设置 “最大连续非保守位置数”。所有连续非保守位置大于该值的线段都将被拒绝。该参数值越大,所选位置数越多。
-b4:设置间隙清理后区块的最小长度。清除间隙后,小于此值的区块将被剔除。该参数值越大,所选位置数越少。
+p1 <- heatplot( edox, showCategory= 5 ) p2 <- heatplot( edox, foldChange= geneList, showCategory= 5 ) cowplot:: plot_grid( p1, p2, ncol= 1 , labels= LETTERS [ 1 : 2 ] )
+
+
+
+Figure 4. Heatmap plot of enriched terms
from clusterProfiler book
+
+可视化treeplot —— 树状图 treeplot()函数执行丰富术语的层次聚类。它依赖于pairwise_termsim()函数计算的丰富项的成对相似性,默认情况下使用 Jaccard 的相似性指数 (JC)。如果支持,用户还可以使用语义相似度值(例如,GO、DO和MeSH)。
+
+默认聚合方法treeplot()是ward.D,用户可以通过hclust_method参数指定其他方法(例如,’average’、’complete’、’median’、’centroid’等。
+treeplot()函数会将树切割成几个子树(由nCluster参数指定(默认为 5))并使用高频词标记子树。
+edox2 <- pairwise_termsim( edox) p1 <- treeplot( edox2) p2 <- treeplot( edox2, hclust_method = "average" ) aplot:: plot_list( p1, p2, tag_levels= 'A' )
+
+
+
+Figure 5. Tree plot of enriched terms
from clusterProfiler book
+
+可视化emapplot —— 富集图 对于富集到的GO terms之间的基因重叠关系进行展示,如果两个GO terms系的差异基因存在重叠,说明这两个节点存在overlap关系,在图中用线条连接起来。每个节点是一个富集到的GO term, 默认画top30个富集到的GO terms, 节点大小对应该GO terms下富集到的差异基因个数,节点的颜色对应p.adjust的值,从小到大,对应蓝色到红色。
+
+ego2 <- pairwise_termsim( ego) p1 <- emapplot( ego2) p2 <- emapplot( ego2, cex_category= 1.5 ) p3 <- emapplot( ego2, layout= "kk" ) p4 <- emapplot( ego2, cex_category= 1.5 , layout= "kk" ) cowplot:: plot_grid( p1, p2, p3, p4, ncol= 2 , labels= LETTERS [ 1 : 4 ] )
+
+
+
+Figure 6. Plot for results obtained from hypergeometric test and gene set enrichment analysis. default (A), cex_category=1.5 (B), layout=”kk” (C) and cex_category=1.5,layout=”kk” (D).
from clusterProfiler book
+
+可视化upsetplot —— upset图 upsetplot是cnetplot可视化基因和基因集之间复杂关联的替代方法。它强调不同基因集之间的基因重叠。
+
+upsetplot(ego)
+
+
+Figure 7. Upsetplot for over-representation analysis.
from clusterProfiler book
+
+可视化ridgeplot —— 脊线图 ridgeplot将可视化核心富集基因的表达分布为GSEA富集类别。它帮助用户解释上调/下调的途径。
+
+ridgeplot(ego)
+
+
+Figure 8. Ridgeplot for gene set enrichment analysis.
from clusterProfiler book
+2.2. 可视化plotGOgraph/goplot —— 有向无环图
+plotGOgraph(ego, firstSigNodes=10)
-注意:在程序的旧版本(0.73b)中,有两个参数可以调节最终图块的长度。当前菜单选项所对应的参数是 “间隙清理后块的最小长度”,这是最关键的参数。另一个参数是 “初始区块的最小长度”,这个版本的程序给出的数值与之前的长度相同。不过,如果您想复制与旧版本完全相同的结果,可以通过命令行为 “初始区块最小长度 “设置任意值(见下文)。您可以通过保存选项菜单中的结果和参数文件的保存简短选项查看两个最小长度参数的值 (见下文)。
+有向无环图(Directed acyclic graph, DAG),矩形代表富集到的top10个GO Terms,颜色从黄到红,对应p值从大到小。和topGO做富集分析 的DAG图一样。
-
-b5:在处理间隙位置的三种不同可能性中切换:
-
+当enrichGO富集分析时ont参数选了ALL时,结果文件会在第一列前增加一列ONTOLOGY为子类,这时直接用于plotGOgraph画图会报错。试了下,下面两种方案还是会报错Error in if (!ont %in% c(“BP”, “MF”, “CC”)) { :argument is of length zero。 。还是尽量在enrichGO分析时就用ont=”BP”吧。
-无(none/n):最终排列中不允许出现间隙位置。在区块选择过程中,所有有一个或多个间隙的位置都会被视为间隙位置,它们和相邻的非保留位置都会被消除。
-半数(half/h):只有 50% 或更多序列有间隙的位置才会被视为间隙位置。因此,如果在适当的区块内有少于 50%的序列存在间隙位置,则可以在最终比对中选择这些位置。
-全部(all/a):可以选择所有间隙位置。有间隙的位置不会与其他位置区别对待。
+可以在结果文件中筛选出特定子类(比如BP)的结果行,并删除第一列ONTOLOGY后保存文件,再读进R用于plotGOgraph画图。
+也可以在R内用命令ego2<-ego%>%filter(ONTOLOGY== "BP")
筛选BP子类,接着用ego3<-ego2%>%select(!ONTOLOGY)
或者ego3<-ego2[,-1]
删除第一列(即ONTOLOGY列),然后用plotGOgraph(ego3)
作图。
-4.3. 所有参数
-
-
- PARAMETER NAME
- MEANING (Default)
- ALLOWED VALUES
-
-
-
- (None)
- Filename (No default)
- Alignment or pathnames file
-
-
- -t=
- Type Of Sequence (Protein , DNA, Codons)
- p , d , c
-
-
- -b1=
- Minimum Number Of Sequences For A Conserved Position (50% of the number of sequences + 1 )
- Any integer bigger than half the number of sequences and smaller or equal than the total number of sequences
-
-
- -b2=
- Minimum Number Of Sequences For A Flank Position (85% of the number of sequences )
- Any integer equal or bigger than Minimum Number Of Sequences For A Conserved Position
-
-
- -b3=
- Maximum Number Of Contiguous Nonconserved Positions (8 )
- Any integer
-
-
- -b4=
- Minimum Length Of A Block (10 )
- Any integer equal or bigger than 2
-
-
- -b5=
- Allowed Gap Positions (None , With Half, All)
- n , h , a
-
-
- -b6=(Only available for protein alignments; only visible in the extended block parameters menu)
- Use Similarity Matrices (Yes , No)
- y , n
-
-
- -b0=(This option does not appear in the menu)
- Minimum Length Of An Initial Block (Same as Minimum Length Of A Block )
- Any integer equal or bigger than 2
-
-
- -s=
- Selected Blocks (Yes , No)
- y , n
-
-
- -p=
- Results And Parameters File (Yes , Text, Short Text, No)
- y , t , s, n
-
-
- -v=(Only visible in the extended saving options)
- Characters Per Line In Results And Parameters File (60 )
- Any integer bigger than 50
-
-
- -n=(Only visible in the extended saving options)
- Nonconserved Blocks (Yes, No )
- y , n
-
-
- -u=(Only visible in the extended saving options)
- Ungapped Alignment (Yes, No )
- y , n
-
-
- -k=(Only visible in the extended saving options)
- Mask File With The Selected Blocks (Yes, No )
- y , n
-
-
- -d=(Only visible in the extended saving options)
- Postscript File With The Selected Blocks (Yes, No )
- y , n
-
-
- -a=(Only available with paths files)
- Concatenated Blocks From Alignments In Batch (Yes, No )
- y , n
-
-
- -c=(Only available with paths files)
- Concatenated Input Alignments In Batch (Yes, No )
- y , n
-
-
- -w=(Only available with paths files)
- Concatenated Ungapped Alignments In Batch (Yes, No )
- y , n
-
-
- -e=
- Generic File Extension (-gb )
- Any string with 5 or less characters
-
-
-
+
-4.4. Gblocks结果
-samples_align.fas-gb:按照参数过滤掉不符合要求的比对,保留下保守blocks的比对序列结果。
-samples_align.fas-gb.htm:
+Figure 9. DAG图
from clusterProfiler blog
+
+goplot(ego, showCategory = 10)
-网页格式文件,里面详细展示了原始比对序列中哪些被trim,哪些保留下来。可以通过查看这个文件来可视化地检查结果是否按照需求保留和过滤了,建议只要过滤都看一看。
-文件里包含了运行Gblocks的所有参数,以及过滤前后的序列长度。
-Gblocks 生成 HTML 格式,显示了使用 ClustalW 1.7 程序和默认参数从 nad3.pir 对齐结果中选择的区块。根据 Gblocks 所给参数定义的保留位置被高亮显示,用颜色显示重复次数最多的氨基酸,选定的位置用蓝色粗线下划。氨基酸的颜色(仅作为视觉指南,不代表任何距离矩阵)为:A、G、S 和 T 为石灰色;P 为水绿色;C 为橙色;D、E、Q 和 N 为白色;F、W 和 Y 为黄色;H、K 和 R 为红色;I、L、M 和 V 为紫红色。
+igraph布局方式的有向无环图
-5. references
-Gblocks manual:https://home.cc.umanitoba.ca/~psgendb/doc/Castresana/Gblocks_documentation.html#Installation
+
+
+Figure 10. goplot的DAG图
from clusterProfiler book
+2.3. 可视化 —— wordcloud 词云的方式显示结果
+install.packages( "wordcloud" ) library( wordcloud) wcdf <- read.table( text = ego$ GeneRatio, sep = "/" ) [ 1 ] wcdf$ term <- ego[ , 2 ] wordcloud( words = wcdf$ term, freq = wcdf$ V1, scale= ( c ( 4 , .1 ) ) , colors= brewer.pal( 8 , "Dark2" ) , max.words = 25 )
+
+
+
+Figure 11. wordcloud词云图
from NGS Analysis ebook
+3. 导出可视化结果
+Rstudio
+
+如果是在Rstudio中,可以直接看到绘图结果,导出需要的文件格式即可。
+
+代码导出pdf( "ego.pdf" ) ego_fig<- barplot( x) print( ego_fig) dev.off( )
+
+4. references
+clusterProfiler github:https://github.com/YuLab-SMU/clusterProfiler
+clusterProfiler paper:https://www.cell.com/the-innovation/fulltext/S2666-6758(21)00066-7?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS2666675821000667%3Fshowall%3Dtrue
+clusterProfiler book:http://yulab-smu.top/biomedical-knowledge-mining-book/index.html
+clusterProfiler manual:https://bioconductor.org/packages/devel/bioc/manuals/clusterProfiler/man/clusterProfiler.pdf
+clusterProfiler ducumentation:https://guangchuangyu.github.io/software/clusterProfiler/documentation/
+其他来源结果可视化:https://cloud.tencent.com/developer/article/1613815
+wordcloud:https://learn.gencore.bio.nyu.edu/rna-seq-analysis/over-representation-analysis/
欢迎关注微信公众号:生信技工
公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
- ]]>
+
+]]>
bioinfo
- alignment
- trim
+ enrichment
- Multiple Sequence Alignment
- MSA
- sequence alignment
- trimming
- Gblocks
+ gene set enrichment analysis
+ GSEA
+ visualization
+ enrichment analysis
+ over representation analysis
+ ORA
+ clusterProfiler
- 富集分析:(三)clusterProfiler概述
- /2021/12/13/bioinfo_enrichment_clusterProfiler.intro/
-
-
-clusterProfiler相关的博客共有三篇,共同食用,效果更好 :wink: :
-
-1. 基因富集分析(gene set enrichment analysis, GSEA) 富集分析概述参考博客:富集分析:(一)概述 。
-2. clusterProfiler介绍 clusterProfiler是一个R包,是一个解释组学数据的通用富集工具许多基因集的功能注释和富集分析,以及富集分析结果的可视化。
-2021年07月发布了clusterProfiler 4.0版本。
-
-
-Figure 1. clusterProfiler function and workflow
图片来源: yulab’s book
-3. clusterProfiler支持的基因集(gene sets)或基因通路数据库
-Gene Ontology(GO)
-Kyoto Encyclopedia of Genes and Genomes(KEGG)
-Disease Ontology(DO)
-Disease Gene Network(DisGeNET)
-Molecular Signatures Database(MSigDb)
-wikiPathways … …
-
-4. clusterProfiler功能 —— 富集分析(enrichment analysis) 4.1. 过表达分析(Over Representation Analysis, ORA) 过表达分析是用于采用超几何分布检验判断已知的生物功能或过程(例如GO/KEGG)在实验产生的基因列表(例如差异表达基因列表: differentially expressed genes, DEGs)中是否过表达(over-represented=enriched)的常用方法。
-所有基因(或全基因组)作为背景总数N,被注释到已知基因集(例如GO/KEGG)某一子集的基因总数是M,差异表达的基因数量是n,差异表达基因中属于M的数量是k。 过表达分析就是用统计学的方法判断GO/KEGG的每一个子类中是否k/n显著高于M/N,显著高于就是这个子类过表达。
-差异表达基因通常是前期通过比较转录组分析等手段获取的不同转录组间有表达差异的基因列表。
-4.2. 基因集富集分析(Gene Set Enrichment Analysis, GSEA) 对于差异很大的基因,可以使用ORA分析,但差异较小的基因也可能具有意义,很多相关表型差异是通过一组基因中微小但一致的变化(small but consistent changes)来表现的。
-基因集富集分析汇总一个基因集中每个基因的统计数据,可以检测预先定义的基因集(例如GO/KEGG)中所有基因以一种较小但协调的(small but coordinated)方式发生变化的情况。
-基因根据表型进行排序,给定先验定义的基因集(例如共享相同GO/KEGG类别的基因),GSEA的目标是确定S的成员是随机分布在排序的基因列表L中,还是主要分布在顶部或者底部。
-4.3. leading edge分析和核心富集基因(Leading edge analysis and core enriched genes) 包(clusterProfiler,DOSE,meshes,ReactomePA)支持Leading edge分析并可以提供GSEA分析中的核心富集基因core enriched genes结果。
-
-Leading edge分析可以获取:
-
-
-Tags显示对富集分数有贡献的基因的百分比
-List显示获得富集分数在列表中的位置
-Signal显示富集信号强度
-
-5. clusterProfiler安装 启动R后输入下面命令安装
-if ( ! requireNamespace( "BiocManager" , quiet = TRUE ) ) install.packages( "BiocManager" ) BiocManager:: install( "clusterProfiler" )
-
-6. clusterProfiler的GO和KEGG富集分析 clusterProfiler支持对许多ontology/pathway的hypergeometric test和gene set enrichment analyses,包括数据库GO,KEGG,DO,DisGeNET,MSigDb,wikiPathways。
-使用支持的数据库时,需要检查分析样本是否在已有物种列表中。不在物种列表的物种数据,以及其他不在数据库列表的数据库,做分析时使用通用的富集分析(Universal enrichment analysis)模块。
-分析前,先用命令library(clusterProfiler)
载入clusterProfiler包。
-6.1. 背景数据库选择 参考博客基因富集分析(gene set enrichment analysis, GSEA) —— clusterProfiler:不同物种的GO+KEGG富集分析 。
-6.2. GO富集分析 6.2.1. GO的ORA分析 6.2.1.1. 输入文件 ORA分析的输入文件是gene ID list,比如差异表达分析(DESeq2)获得的差异表达基因列表,保存为内容为一列数据的文本文件gene.list,数据内容可以是OrgDb支持的任意ID类型(常用的都支持,ENSEMBL,ENTREZID,GENETYPE,GO,PFAM),具体参考ID 。 分析的是列表中基因在GO/KEGG各个子分类单元是否被过度代表还是代表不足。
-6.2.1.2. bitr格式转换 如果需要,也可以用bitr功能函数实现各种ID格式的转换。
-data <- read.table( "gene.list" , header= FALSE ) data$ V1 <- as.character ( data$ V1) test = bitr( data$ V1, fromType= "SYMBOL" , toType= c ( "ENSEMBL" , "ENTREZID" ) , OrgDb= org.At.tair.db) head( test, 2 ) SYMBOL ENSEMBL ENTREZID 1 AASDH ENSG00000157426 132949 2 ABCB11 ENSG00000073734 8647
-
-6.2.1.3. GO分类 groupGO()函数可以基于GO在指定水平范围内的分布进行基因分类。
-data <- read.table( "gene.list" , header= F ) genes <- as.character ( data$ V1) ggo <- groupGO( gene = genes, OrgDb = org.Hs.eg.db, ont = "CC" , level = 3 , readable = TURE) head( ggo, 3 ) ID Description Count GeneRatio geneID GO: 0000003 GO: 0000003 reproduction 0 0 / 929 GO: 0008152 GO: 0008152 metabolic process 0 0 / 929 GO: 0001906 GO: 0001906 cell killing 0 0 / 929
-
-6.2.1.4. ORA分析
-读取输入文件
-
-
-读取基因ID的list文件
-这些ID会在enrichGO的分析中被自动去重,所以文件是否有重复结果都一样。
-
-data <- read.table( "gene.list" , header= F ) genes <- as.character ( data$ V1)
-
-
-支持物种的标准分析 enrichGO()
-
-ego <- enrichGO( gene = genes, OrgDb = org.At.tair.db, keyType = 'ENSEMBL' , ont = "BP" , pAdjustMethod = "BH" , pvalueCutoff = 0.05 , qvalueCutoff = 0.2 , readable = TRUE ) head( ego, 2 ) ONTOLOGY ID Description GO: 0002887 BP GO: 0002887 negative regulation of myeloid leukocyte mediated immunity GO: 0033004 BP GO: 0033004 negative regulation of mast cell activation GeneRatio BgRatio pvalue p.adjust qvalue geneID Count GO: 0002887 2 / 121 10 / 11461 0.004706555 0.7796682 0.7796682 CD300A/ CD84 2 GO: 0033004 2 / 121 10 / 11461 0.004706555 0.7796682 0.7796682 CD300A/ CD84 2
-
-
-提供注释文件go_annotation.txt的非模式物种分析 enricher()
-go_anno <- read.table( "go_annotation.txt" , header = T , sep = "\t" ) go2gene <- go_anno[ , c ( 2 , 1 ) ] go2name <- go_anno[ , c ( 2 , 3 ) ] ego <- enricher( genes, TERM2GENE = go2gene, TERM2NAME = go2name, pAdjustMethod = "BH" , pvalueCutoff = 0.05 , qvalueCutoff = 0.2 )
-
-ego结果文件解释
-
-
-
-ONTOLOGY:CC BP MF
-ID: Gene Ontology数据库中唯一的标号信息
-Description :Gene Ontology功能的描述信息
-GeneRatio:差异基因中与该Term相关的基因数与整个差异基因总数的比值
-BgRatio:所有( bg)基因中与该Term相关的基因数与所有( bg)基因的比值
-pvalue: 富集分析统计学显著水平,一般情况下, P-value < 0.05 该功能为富集项
-p.adjust 矫正后的P-Value
-qvalue:对p值进行统计学检验的q值
-geneID:与该Term相关的基因
-Count:与该Term相关的基因数
-
-
-输出结果保存为csv表格write.table( as.data.frame( ego) , "go_enrich.csv" , sep= "\t" , row.names = F , quote = F )
-
-6.2.1.5. 结果整理和筛选
-如果没使用keyType参数,可以在得到结果后使用
-如果没使用readable=True参数,可以在得到结果后用函数setReadable()将GeneID转换为symbol。ego <- setReadable(ego, OrgDb = org.At.tair.db)
-函数dropGO可以移除enrichGO结果中特定的GO term或GO level
-函数gofilter()可以将结果限定在特定的GO level
-函数simplify可以去除冗余,ego_rm <- simplify(ego, cutoff=0.7, by="p.adjust", select_fun=min)
-
-6.2.2. GO的GSEA分析 GSEA分析通过置换检验来计算p值
-6.2.2.1. GSEA的输入文件
-GSEA分析的输入文件是一个基因排序列表,有三个要点:
-
-
-numeric vector:倍数变化或者其他类型的数字变量,比如差异表达分析里的logFC值
-named vector:每个数字对应的gene ID命名
-sorted vector;数字应该以降序排序 即包含两列,一列基因ID名称,一列数据,并以数据降序排序。
-
-
-获取输入文件的示例:
-
-d <- read.csv( your_csv_file) geneList <- d[ , 2 ] names ( geneList) <- as.character ( d[ , 1 ] ) geneList <- sort( geneList, decreasing = TRUE )
-
-> head( mydata, 3 ) gene_name female male logFC 1 CG32548 0.02310383 72.43205 11.61428 2 CG15892 0.02624160 57.22716 11.09063 3 CR43803 0.02474626 34.09726 10.42823 > > genelist <- mydata$ logFC > names ( genelist) <- as.character ( mydata$ gene_name) > genelist <- sort( genelist, decreasing= T ) > head( genelist) CG32548 CG15892 CR43803 CG15136 CG4983 CG13989 11.61428 11.09063 10.42823 10.34305 10.29130 10.00569
-
-6.2.2.2. GSEA分析
-读取输入文件
-data <- read.csv( "geneList.csv" ) geneList <- d[ , 2 ] names ( geneList) <- as.character ( d[ , 1 ] ) geneList <- sort( geneList, decreasing = TRUE )
-
-支持物种的标准分析 gseGO()
-gsego <- gseGO( geneList = geneList, OrgDb = org.At.tair.db, ont = "BP" , keyType = "SYMBOL" , nPerm = 1000 , minGSSize = 100 , maxGSSize = 500 , pvalueCutoff = 0.05 , verbose = FALSE , by = "fgsea" ) head( gsego, 1 ) ;dim ( gsego) ID Description setSize enrichmentScore GO: 0003674 GO: 0003674 molecular_function 323 0.9462411 NES pvalue p.adjust qvalues rank GO: 0003674 1.716837 0.000999001 0.000999001 NA 579 leading_edge GO: 0003674 tags= 100 %, list=11% , signal= 95 % core_enrichment GO: 0003674 CG15892/ CG15136/ CG4983/ CG43851/ … [ 1 ] 53 11 head( data.frame( gsego$ ID, gsego$ Description) ) gsego.ID gsego.Description 1 GO: 0003674 molecular_function2 GO: 0005488 binding
-
-提供注释文件go_annotation.txt的非模式物种分析 GSEA()
-data <- read.table( "go_annotation.txt" , header = T , sep = "\t" , quote = "" ) go2gene <- data[ , c ( 2 , 1 ) ] go2name <- data[ , c ( 2 , 3 ) ] gsego <- GSEA( genes, TERM2GENE = go2gene, TERM2NAME = go2name)
-
-gsego结果文件解释
-
-
-
-ID: Gene Ontology数据库中唯一的标号信息
-Description:Gene Ontology功能的描述信息
-setSize
-enrichmentScore:富集分数
-NES
-pvalue: 富集分析统计学显著水平,一般情况下, P-value < 0.05 该功能为富集项
-p.adjust:矫正后的P-Value
-qvalues:对p值进行统计学检验的q值
-rank
-leading_edge
-core_enrichment
-
-6.2.3. GO富集结果可视化 goplot(ego)
简单可视化结果为有向无环图。
-6.3. KEGG富集分析 clusterProfiler通过KEGG数据库的API 来获取KEGG的注释信息,包括一个物种所有基因对应的pathway注释文件,比如人的:http://rest.kegg.jp/link/hsa/pathway;和pathway对应的描述信息,比如人的:http://rest.kegg.jp/list/pathway/hsa。
-6.3.1. 支持的物种
-clusterProfiler包支持的物种 只需要将物种缩写输入给clusterProfiler,clusterProfiler包支持自动联网调取kegg注释物种 列出物种的pathway注释信息,网站可以查看物种列表和缩写,或者用clusterProfiler包提供search_kegg_organism()函数来帮助搜索支持的生物。
-
-search_kegg_organism( 'osa' , by= 'kegg_code' ) search_kegg_organism( 'Escherichia coli' , by= 'scientific_name' )
-
-
-用户提供KEGG pathway注释数据 如果分析的物种不支持自动调取,可以自己做KEGG pathway注释后提供注释文件,比如interproscan、eggnog-mapper等软件的注释结果,整理成clusterProfiler支持的输入格式即可。
-
-clusterProfiler需要导入的KEGG pathway注释文件pathway_annotation.txt的格式如下:
-
-
-
-GeneID
-Pathway
-Path_Description
-
-
-
-1
-ko:00001
-spindle
-
-
-2
-ko:00002
-mitotic spindle
-
-
-3
-ko:00003
-kinetochore
-
-
-data.frame格式,包含三列,第一列为Gene ID,第二列为 KEGG Pathway ID,第三列为Path_Description,顺序无要求。
-6.3.2. KEGG pathway的ORA分析 6.3.2.1. KEGG输入ID的格式转换 ID转换函数
-library( clusterProfiler) bitr_kegg( "1" , fromType = "kegg" , toType = 'ncbi-proteinid' , organism= 'hsa' ) library( org.Hs.eg.db) keytypes( org.Hs.eg.db) bitr( gene, fromType = "ENTREZID" , toType = c ( "ENSEMBL" , "SYMBOL" ) , OrgDb = org.Hs.eg.db) gene <- c ( "AASDH" , "ABCB11" , "ADAM12" , "ADAMTS16" , "ADAMTS18" ) genes <- gene$ V1 data( geneList, package= "DOSE" ) genes <- names ( geneList) [ abs ( geneList) > 2 ]
-
-6.3.2.2. KEGG pathway的ORA分析 输入文件与GO的ORA分析输入文件一样。
-
-导入输入文件
-
-data <- read.table( "gene.list" , header= F ) genes <- as.character ( data$ V1)
-
-
-支持物种的标准分析 enrichKEGG()
-
-kk <- enrichKEGG( gene = genes, keyType = "kegg" , organism = 'hsa' , pvalueCutoff = 0.05 pAdjustMethod= "BH" , qvalueCutoff = 0.2 ) head( kk, 2 ) ID Description GeneRatio BgRatio hsa04750 hsa04750 Inflammatory mediator regulation of TRP channels 5 / 53 97 / 7387 hsa04020 hsa04020 Calcium signaling pathway 6 / 53 182 / 7387 pvalue p.adjust qvalue geneID Count hsa04750 0.0006135305 0.08589427 0.0807277 40 / 3556 / 3708 / 5608 / 79054 5 hsa04020 0.0018078040 0.12654628 0.1189345 493 / 1129 / 2066 / 3707 / 3708 / 4842 6
-
-输入的ID类型默认是kegg gene id,也可以是ncbi-geneid或ncbi-proteinid或者uniprot等,可以通过上一步格式转换转换ID类型。 organism对应物种的三字母缩写,其他参数与GO的ORA分析参数一致。
-不像enrichGO()函数有readable()参数,enrichKEGG()函数没有这个参数,当待分析物种在OrgDb数据库中可用时,可以用setReadable()函数把gene ID转换成gene Name。
-
-提供注释文件pathway_annotation.txt的非模式物种分析 enricher()
-
-pathway_anno <- read.table( "pathway_annotation.txt" , header = T , sep = "\t" ) go2gene <- pathway_anno[ , c ( 2 , 1 ) ] go2name <- pathway_anno[ , c ( 2 , 3 ) ] kk <- enricher( gene, TERM2GENE = go2gene, TERM2NAME = go2name)
-
-
-结果输出到csv文件write.table(as.data.frame(kk),"KEGG_enrich.csv",sep="\t",row.names =F,quote=F)
#保存到文件KEGG_enrich.csv。其中as.data.frame(kk)把kk对象转换成数据框dataframe
-
-6.3.3. KEGG pathway的GSEA分析
-读取输入文件
-data <- read.csv( "geneList.csv" ) geneList <- d[ , 2 ] names ( geneList) <- as.character ( d[ , 1 ] ) geneList <- sort( geneList, decreasing = TRUE )
-
-支持物种的标准分析 gseKEGG()
-
-
-kks <- gseKEGG( geneList = geneList, keyType = "kegg" , organism = 'hsa' , nPerm = 1000 , minGSSize = 10 , maxGSSize = 500 , pvalueCutoff = 0.05 , pAdjustMethod= "BH" , verbose = FALSE ) head( kk2)
-
-
-提供注释文件pathway_annotation.txt的非模式物种分析 GSEA()data <- read.table( "pathway_annotation.txt" , header = T , sep = "\t" ) go2gene <- data[ , c ( 2 , 1 ) ] go2name <- data[ , c ( 2 , 3 ) ] kks <- GSEA( gene, TERM2GENE = go2gene, TERM2NAME = go2name)
-
-6.3.4. KEGG module的ORA分析 KEGG Module 是手动定义的功能单元的集合。在某些情况下,KEGG 模块有更直接的解释。
-mkk <- enrichMKEGG( gene = gene, organism = 'hsa' , pvalueCutoff = 0.05 , qvalueCutoff = 0.2 ) head( mkk)
-
-6.3.5. KEGG module的GSEA分析 mkk2 <- gseMKEGG( geneList = geneList, organism = 'hsa' , pvalueCutoff = 0.05 ) head( mkk2)
-
-6.3.6. KEGG pathways富集结果的可视化 enrichplot包可以实现几种方法,可以用在GO,KEGG,MSigDb等基因集注释上。
-
-browseKEGG()函数会打开网络浏览器突出显示富集的基因的KEGG通路,用hsa04110基因举例:browseKEGG(kk, 'hsa04110')
-
-pathview::pathview()可视化富集的KEGG通路
-library("pathview") hsa04110 <- pathview(gene.data = geneList, pathway.id = "hsa04110", species = "hsa", limit = list(gene=max(abs(geneList)), cpd=1))
-
-6.4. 通用的富集分析(Universal enrichment analysis) 除GO,KEGG基因集外,clusterProfiler还支持WikiPathways,Reactome,Disease,MeSH等数据库的富集分析。
-虽然clusterProfiler支持对许多ontology/pathway的hypergeometric test和gene set enrichment analyses,但是还有很多数据,包括不支持的物种、不支持的ontologies/pathways或自定义注释等。 clusterProfiler提供了用于hypergeometric test的enricher()函数和用于基因集富集分析的GSEA()函数,用于接受用户定义的注释。
-另外两个参数TERM2GENE和TERM2NAME:
-
-TERM2GENE是一个必需的data.frame,第一列为term ID,第二列为对应映射基因;
-TERM2NAME是一个可选的data.frame,第一列为term ID,第二列为对应term name。
-
-在GO和KEGG富集分析的用户自行提供注释文件的分析部分,使用的enricher()和GSEA()函数。
-7. references
-GSEA wiki: https://en.wikipedia.org/wiki/Gene_set_enrichment_analysis
-enrichment: https://www.jianshu.com/p/47b5ea646932
-clusterProfiler github: https://github.com/YuLab-SMU/clusterProfiler
-clusterProfiler paper: https://www.cell.com/the-innovation/fulltext/S2666-6758(21)00066-7?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS2666675821000667%3Fshowall%3Dtrue
-clusterProfiler book: http://yulab-smu.top/biomedical-knowledge-mining-book/index.html
-clusterProfiler manual: https://bioconductor.org/packages/devel/bioc/manuals/clusterProfiler/man/clusterProfiler.pdf
-clusterProfiler ducumentation: https://guangchuangyu.github.io/software/clusterProfiler/documentation/
-clusterProfiler blog: https://guangchuangyu.github.io/2016/01/go-analysis-using-clusterprofiler/
-tutorial: https://www.cnblogs.com/jessepeng/p/12159139.html
-函数simplify: http://guangchuangyu.github.io/2015/10/use-simplify-to-remove-redundancy-of-enriched-go-terms/
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bioinfo
- enrichment
-
-
- gene set enrichment analysis
- GSEA
- enrichment analysis
- over representation analysis
- ORA
- clusterProfiler
-
-
-
- 富集分析:(四)clusterProfiler:不同物种的GO+KEGG富集分析
- /2022/04/26/bioinfo_enrichment_clusterProfiler.species/
-
+ 富集分析:(四)clusterProfiler:不同物种的GO+KEGG富集分析
+ /2022/04/26/bioinfo_enrichment_clusterProfiler.species/
+
clusterProfiler相关的博客共有三篇,共同食用,效果更好 :wink: :
@@ -2678,718 +2706,488 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 富集分析:(五)clusterProfiler:Visualization
- /2022/04/28/bioinfo_enrichment_clusterProfiler.visualization/
-
+ 富集分析:(二)topGO
+ /2021/11/13/bioinfo_enrichment_topGO/
+
-(全文约4000字)
-clusterProfiler相关的博客共有三篇,共同食用,效果更好 :wink: :
-
-博客富集分析:(三)clusterProfiler概述
-博客富集分析:(四) clusterProfiler:不同物种的GO+KEGG富集分析
-博客富集分析:(五)clusterProfiler:Visualization
+1. 富集分析(enrichment analysis) 富集分析(enrichment analysis)的概述参考博客:富集分析概述 。
+2. topGO 2.1. topGO简介 topGO是一个R包,用于半自动的GO terms的富集分析。
+因为topGO只用于GO的富集分析,且是半自动化的,推荐使用更方便的在线工具KOBAS-i ;KOBAS-i 备用 ;GOEAST ; 或者功能更完善的clusterProfiler包,参考博客:clusterProfiler包 。
+2.2. GO term GO term分为三大类:
+
+cellular component(CC)-细胞成分(其中基因产物位于细胞内部)
+molecular function(MF)-分子功能(基因产物的功能是什么)
+biology process(BP)-生物过程(即基因产物参与的一系列事件) 三类都可以用topGO做富集分析。
-1. 可视化的输入数据 clusterProfiler的可视化一般只支持clusterProfiler富集分析结果的可视化,通过认识clusterProfiler可视化接受的输入数据的格式,可以修改其他富集分析结果文件的格式,来用clusterProfiler进行可视化绘图。
-1.1. 可视化输入数据格式
-查看ego格式 clusterProfiler的可视化包接受的输入数据是前面富集分析得到的结果(比如ego/kk),用str(ego)
或class(ego)
可以看到ego的格式是叫enrichResult的R的数据类型。library( clusterProfiler) > class ( ego) [ 1 ] "enrichResult" attr ( , "package" ) [ 1 ] "DOSE"
-
-如果手头没有ego数据,可以用clusterProfiler的样例数据快速得到一个edo,与ego格式一样。
-library( clusterProfiler) data( geneList) de <- names ( geneList) [ abs ( geneList) > 2 ] edo <- enrichDGN( de) class ( ego)
+2.3. topGO支持的统计检验方法 topGO包默认算法用的是weight01,是elim和权重算法的混合。
+
+
+
+topGO支持的统计方法
+fisher
+ks
+t
+globaltest
+sum
+
+
+
+classic
+Y
+Y
+Y
+Y
+Y
+
+
+elim
+Y
+Y
+Y
+Y
+Y
+
+
+weight
+Y
+N
+N
+N
+N
+
+
+weight01
+Y
+Y
+Y
+Y
+Y
+
+
+lea
+Y
+Y
+Y
+Y
+Y
+
+
+parentchild
+Y
+N
+N
+N
+N
+
+
+2.4. 安装topGO if ( ! requireNamespace( "BiocManager" , quietly = TRUE ) ) install.packages( "BiocManager" ) BiocManager:: install( "topGO" , version = "3.14" ) BiocManager:: install( "Rgraphviz" , version = "3.8" ) BiocManager:: install( "GO.db" ) BiocManager:: install( "biomaRt" )
-
-enrichResult(R的class类型)格式 在DOSE包中查到,enrichResult具体格式如下:
-setClass( "enrichResult" , representation= representation( result = "data.frame" , pvalueCutoff = "numeric" , pAdjustMethod = "character" , qvalueCutoff = "numeric" , organism = "character" , style= "margin: 0px; padding: 0px; color: rgb(221, 17, 68);" > "character" , gene = "character" , keytype = "character" , universe = "character" , gene2Symbol = "character" , geneSets = "list" , readable = "logical" ) , prototype= prototype( readable = FALSE ) )
-
-result变量格式 enrichResult中最重要的是result,是储存富集结果的dataframe。 result变量与clusterProfiler富集分析中保存ego的结果文件是一致的。
-
-
-ego@ result[ c ( 13 , 14 ) , ] ONTOLOGY ID Description GeneRatio BgRatio pvalue p.adjust qvalue geneID Count 13 BP GO: 0010051 xylem and phloem pattern formation 3 / 349 129 / 16975 1.431350e-05 0.001294821 0.001099880 mc40782/ mc40784/ mc40918 3 14 BP GO: 0048598 embryonic morphogenesis 2 / 349 131 / 16975 1.673394e-05 0.001405651 0.001194023 mc40784/ mc40918 2
+或者
+source( "https://bioconductor.org/biocLite.R" ) biocLite( "topGO" ) biocLite( "GO.db" ) biocLite( "biomaRt" ) biocLite( "Rgraphviz" ) library( topGO) library( GO.db) library( biomaRt) library( Rgraphviz)
-一般而言result有9列。这里因为用enrichGO富集时ont参数选择ALL,结果就会在第一列前多一列ONTOLOGY。
+2.5. topGO做富集分析(ORA) 2.5.1. 输入文件 两个输入文件
-第一列是ID,也就是富集通路的编号(GO:0010222);
-第二列是Description,也就是富集通路的名称;
-第三列是GeneRatio,也就是要富集的基因中在对应通路中的比例;
-第4列是BgRation,也就是对应通过的基因在全基因组注释中的比例;
-第5,6,7列都是统计检验的结果;
-第8列是geneID,也就是富集到基因的名字,多个geneID是以斜线隔开的;
-第9列是Count,也就是富集到的基因数目。
+genes.list:需要做富集分析的geneID的list,一个基因ID一行
+sample.anno:基因及GO注释信息,第一列是geneID,第二列是GO注释,空格分隔,GO注释可以有多个,格式为GO:0000428,GO:0003677,GO:0005506,
-1.2. 输入数据准备 根据不同情况为clusterProfiler的可视化准备输入数据。
-
-接着clusterProfiler富集分析做可视化 如果是接着clusterProfiler的enrichGO(),gseGO(),enricher(),gseGO()等函数的结果ego
,不要关闭R环境,在R里直接进行用于下一步可视化即可。
+2.5.2. 富集分析 setwd( 'D:/test_data' ) rm( list = ls( ) ) library( topGO) library( Rgraphviz) input= "genes.list" mapfile= "sample.anno" gene_id = readMappings( file = mapfile) gene_names = names ( gene_id) my_genes = read.table( input) [ , 1 ] gene_list = rep ( 1 , length ( gene_id) ) names ( gene_list) = names ( gene_id) gene_list[ match( my_genes, names ( gene_list) ) ] = 0 top_diff_genes = function ( allScore) { return ( allScore< 0.01 ) } bp_go = new( "topGOdata" , nodeSize = 6 , ontology= "BP" , allGenes = gene_list, annot = annFUN.gene2GO, gene2GO = gene_id, geneSel= top_diff_genes) result_KS.elim = runTest( bp_go, algorithm = "elim" , statistic = "ks" ) allres = GenTable( bp_go, KS = result_KS.elim, ranksOf = "classic" , topNodes = attributes ( result_KS.elim) $ geneData[ 4 ] ) write.table( allres, file = paste( input, ".BP.xls" , sep= "" ) , sep= "\t" , quote = FALSE , col.names= TRUE , row.names= FALSE ) pdf( paste( input, ".BP.pdf" , sep= "" ) ) showSigOfNodes( bp_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) png( paste( input, ".BP.png" , sep= "" ) ) showSigOfNodes( bp_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) mf_go = new( "topGOdata" , nodeSize = 6 , ontology= "MF" , allGenes = gene_list, annot = annFUN.gene2GO, gene2GO = gene_id, geneSel= top_diff_genes) result_KS.elim = runTest( mf_go, algorithm = "elim" , statistic = "ks" ) allres = GenTable( mf_go , KS = result_KS.elim, ranksOf = "classic" , topNodes = attributes ( result_KS.elim) $ geneData[ 4 ] ) write.table( allres, file = paste( input, ".MF.xls" , sep= "" ) , sep= "\t" , quote = FALSE , col.names= TRUE , row.names= FALSE ) pdf( paste( input, ".MF.pdf" , sep= "" ) ) showSigOfNodes( mf_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) png( paste( input, ".MF.png" , sep= "" ) ) showSigOfNodes( mf_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) cc_go = new( "topGOdata" , nodeSize = 6 , ontology= "CC" , allGenes = gene_list, annot = annFUN.gene2GO, gene2GO = gene_id, geneSel= top_diff_genes) result_KS.elim = runTest( cc_go, algorithm = "elim" , statistic = "ks" ) allres = GenTable( cc_go, KS = result_KS.elim, ranksOf = "classic" , topNodes = attributes ( result_KS.elim) $ geneData[ 4 ] ) write.table( allres, file = paste( input, ".CC.xls" , sep= "" ) , sep= "\t" , quote = FALSE , col.names= TRUE , row.names= FALSE ) pdf( paste( input, ".CC.pdf" , sep= "" ) ) showSigOfNodes( cc_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) png( paste( input, ".CC.png" , sep= "" ) ) showSigOfNodes( cc_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( )
+
+2.5.3. 结果解释
+.xls结果文件中每一列的含义
+
+
+Annotated : number of genes in go.db which are annotated with the GO-term.在go.db中被注释到GO-term的基因数量。
+
+Significant : number of genes belonging to your input which are annotated with the GO-term. GO-term被注释到的基因中包含输入的基因的数量
+
+Expected : show an estimate of the number of genes a node of size Annotated would have if the significant genes were to be randomly selected from the gene universe. 对节点基因数量的预期
+
+KS:用KS(Kolmogorov-Smirnov)算法计算得到的p-value值。
+KS全称是:Kolmogorov-Smirnov,KS值是通过KS检验所得,KS检验是一种算法。统计方法如下:
-如果是clusterProfiler的enrichGO(),gseGO(),enricher(),gseGO()等函数的结果ego
保存成的文件,已关闭R环境。
-可导入文件,新建enrichResult对象ego,再进行下一步可视化。
-这里假设用R命令write.table(as.data.frame(ego),"go_enrich.csv",sep="\t",row.names =F,quote=F)
保存ego
在go_enrich.csv
文件。data<- read.table( "go_enrich.csv" , sep= "\t" , header= T , quote = "" ) head( data, 2 ) ONTOLOGY ID Description GeneRatio 1 BP GO: 0010222 stem vascular tissue pattern formation 12 / 349 2 BP GO: 0010588 cotyledon vascular tissue pattern formation 12 / 349 BgRatio pvalue p.adjust qvalue 1 29 / 16975 1.792157e-13 2.107577e-10 1.790270e-10 2 39 / 16975 1.122611e-11 6.600951e-09 5.607145e-09 geneID 1 mc11300/ mc11301/ mc19080/ mc19081/ mc26300/ mc31693/ mc37850/ mc40780/ mc40781/ mc40782/ mc40784/ mc409182 mc11300/ mc11301/ mc19080/ mc19081/ mc26300/ mc31693/ mc37850/ mc40780/ mc40781/ mc40782/ mc40784/ mc40918 Count 1 12 2 12 geneID_all <- unlist( apply( as.matrix( data$ geneID) , 1 , function ( x) unlist( strsplit( x, '/' ) ) ) ) ego<- new( "enrichResult" , result= data, gene= geneID_all, pvalueCutoff= 0.01 , pAdjustMethod= "BH" , qvalueCutoff= 0.05 , ontology= "BP" , keytype= "GID" , universe= 'Unknown' , geneSets= list ( ) , organism= "Unknown" , readable= FALSE )
+首先计算每个go节点对应的gene个数,
+如果某个节点的子节点也有gene比对上,那么父节点对应的gene个数也要加上子节点的基因数
+使用KS统计检验进行p值的计算,文件中的KS值,就是常说的p value,叫KS值的原因,是体现使用的KS检验方法。
-
-其他来源富集分析结果可视化 如果是其他软件的富集分析结果,可以根据ego的result变量格式进行修改格式,改成go_enrich.csv相同的格式的文件,再按照上面的步骤导入文件,并保存到新建的ego对象。即可用clusterProfiler的可视化包可视化其他软件的富集分析结果了。
-
-2. 功能富集结果可视化 下面的可视化大多基于在R中已获得富集分析的结果ego。
-2.1. enrichplot包 enrichplot包有几种可视化方法来解释富集结果,支持clusterProfiler获得的ORA和GSEA富集结果。
-2.1.1. 安装和载入 安装和载入enrichplot包
-BiocManager:: install( "enrichplot" ) library( enrichplot)
-
-2.1.2. 可视化包
-推荐dotplot或barplot可视化前10个GO Terms条目。
-推荐goplot有向无环图查看富集的GO Terms间的关系。
+
-
-可视化barplot —— 条形图 将富集分数(例如p 值)和基因计数或比率描述为条形高度和颜色。横轴为该GO term下的差异基因个数,纵轴为富集到的GO Terms的描述信息, showCategory指定展示的GO Terms的个数为20个,默认展示显著富集的top10个,即p.adjust最小的10个。
+
+DAG图(矢量图/像素图) 有向无环图(Directed acyclic graph, DAG)中,从上至下依次有包含关系,只有从上往下的箭头,这个箭头代表包含关系,即有向 。只有从上往下的箭头,方向是确定的,所以不会形成闭环,即无环 。
-barplot(ego, showCategory=20, title="EnrichmentGO_MF")
-使用mutate导出的其他变量也可以用作条形高度或颜色。
-mutate( ego, qscore = - log ( p.adjust, base= 10 ) ) %>% barplot( x= "qscore" )
+
-
+Figure 1. DAG图示例
from wikipedia:directed acyclic graph
+
+有向无环图能直观展示基因富集的GO节点(Term)及其层级关系。
+在有向无环图中,矩形代表富集到的top10个GO Terms,颜色从黄到红,对应p值从大到小。
+分支代表包含关系,从上至下所定义的功能描述范围越来越具体。
+箭头代表包含关系,即该节点的所有基因同样注释到其上级节点中。
+
+
-Figure 1. Bar plot of enriched terms
from clusterProfiler book
+Figure 2. topGO结果DAG图
from clusterProfiler blog
+注:对每个GO节点进行富集,在图中用方框表示显著度最高的10个节点,图中还包含其各层对应关系。每个方框(或椭圆)内给出了该GO节点的内容描述和富集显著性值。不同颜色代表不同的富集显著性,颜色越深,显著性越高。
+3. references
+topGO tutorial:https://bioconductor.org/packages/release/bioc/vignettes/topGO/inst/doc/topGO.pdf
+topGO blog:https://datacatz.wordpress.com/2018/01/19/gene-set-enrichment-analysis-with-topgo-part-1/
+R topGO:https://www.codenong.com/cs105162324/
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bioinfo
+ enrichment
+
+
+ topGO
+ enrichment analysis
+ over representation analysis
+ ORA
+
+
+
+ 从codon比对的cds序列中提取四倍简并位点
+ /2021/10/10/bioinfo_extract.4dtv.from.cds/
+ 1. 从condon比对的cds序列中提取四倍简并位点输入文件是根据密码子规则(即三个三个对齐)比对好的cds序列,输出文件是以其中一个物种的4dtv为标准提取所有物种的4dtv位点,提取的也是按照比对前的顺序排列,结果保存在4dtv.aln文件中。
+1.1. 输入数据和变量定义
+cds=/path/to/cds.aln
# 定义变量cds为codon模式比对好的cds序列
+species=Athaliana
#以哪个物种的4dtv为标准提取,就定义变量species为那个物种的序列ID
+
+1.2. 三种方案【选择一种】 1.2.1. 一步生成
+一步生成运行文件,生成从cds获取4dtv的命令,很长,所以储存在文件4dtv.sh中。运行4dtv.sh就可以获取seqkit locate -V 0 -i -d -p GCN -p CGN -p GGN -p CTN -p CCN -p TCN -p ACN -p GTN ${cds} |awk -v awka="${species}" '{if ($1 == awka && $6%3== 0) print $6}'|sort -k 1n |uniq |awk -v awkb="${cds}" '{print "<(seqkit subseq -r "$1":"$1" "awkb")"}' |sed -e '1i\seqkit concat -w 0' -e '$a\> 4dtv.aln'|xargs echo >4dtv.sh
+
+代码含义:用seqkit locate根据4dtv的规则提取位置,然后筛选指定物种的位置,筛选第三位位置是3的整数倍的位置,把第三位位置(即4dtv位点)提取出来,排序去重;再按照seqkit concat要求的格式规则把seqkit concat命令写入提取脚本4dtv.sh中。
+除非位点在1000个以内,否则一步生成运行文件可能会运行失败,推荐用下一种方案。
-可视化dotplot —— 点阵图dotplot(edo, showCategory=30) + ggtitle("dotplot for ORA")
+运行生成的4dtv.sh,获得4dtv.aln结果bash 4dtv.sh
-dotplot(edo2, showCategory=30) + ggtitle("dotplot for GSEA")
-散点图,横坐标为GeneRatio,纵坐标为富集到的GO Terms的描述信息,showCategory指定展示的GO Terms的个数,默认展示显著富集的top10个,即p.adjust最小的10个。
-
-
-Figure 2. Dot plot of enriched terms
from clusterProfiler book
-
-可视化cnetplot —— 类别网络图 cnetplot 将基因和生物学概念(例如 GO 术语或 KEGG 通路)的联系描述为一个网络(有助于查看哪些基因涉及富集通路和可能属于多个注释类别的基因)。对于基因和富集的GO terms之间的对应关系进行展示,如果一个基因位于一个GO Terms下,则将该基因与GO连线。图中灰色的点代表基因,黄色的点代表富集到的GO terms, 默认画top5富集到的GO terms, GO 节点的大小对应富集到的基因个数。
+1.2.2. 切割分开运行【推荐】 如果需要合并的位点超过1000个,一步生成运行文件占用内存,运行较慢,可以分步骤进行。
+如果因为4dtv.sh太长无法运行,可以把4dtv.temp分成1-n几部分(比如1000行作为一个子文件),然后切割各部分分别生成4dtv_n.sh,之后分别运行再合并。
+
+生成临时文件4dtv.tempseqkit locate -V 0 -i -d -p GCN -p CGN -p GGN -p CTN -p CCN -p TCN -p ACN -p GTN ${cds} |awk -v awka="${species}" '{if ($1 == awka && $6%3== 0) print $6}' |sort -k 1n |uniq >4dtv.temp
+
+分割临时文件4dtv.tempsplit -l 1000 4dtv.temp -d -a 4 4dtv.temp_
命令含义:分割文件4dtv.temp成多个文件,每个子文件1000行(-l 1000),以数字(-d)而非字母命名子文件,数字长度为4(-a 4,default是2);会生成4dtv.temp_0000-nnnn的子文件。
+
-cnetplot(ego, categorySize = "pvalue", foldChange = gene_list
-edox <- setReadable( ego, 'org.Hs.eg.db' , 'ENTREZID' ) p1 <- cnetplot( edox, foldChange= geneList) p2 <- cnetplot( edox, categorySize= "pvalue" , foldChange= geneList) p3 <- cnetplot( edox, foldChange= geneList, circular = TRUE , colorEdge = TRUE ) cowplot:: plot_grid( p1, p2, p3, ncol= 3 , labels= LETTERS [ 1 : 3 ] , rel_widths= c ( .8 , .8 , 1.2 ) )
-
-
-
-Figure 3. Network plot of enriched terms
from clusterProfiler book
-
-可视化heatplot —— 类热图功能分类 同样使用edox。 heatplot类似cnetplot,而显示为热图的关系。 如果用户想要显示大量重要术语,那么类别网络图可能会过于复杂。在heatplot能够简化结果和更容易识别的表达模式。
+可以先看看4dtv.temp的长度,我尝试了下按1000行切割比较合适,再多就达到能同时打开文件数量上限无法运行了。
+
+生成4dtv.temp.n.shfor i in $(ls 4dtv.temp_*);do cat ${i} |awk -v awkb="${cds}" '{print "<(seqkit subseq -r "$1":"$1" "awkb")"}' |sed -e '1i\seqkit concat -w 0' -e '$a\>'|sed "s/^>$/> ${i}.aln/" |sed 's/$/ \\/g' |sed '$ s/.$//' >${i}.sh; done
+
+运行生成的4dtv.temp.n.sh,获得4dtv.aln_n结果【耗时步骤】for i in $(ls 4dtv.temp_*.sh);do bash ${i};done
+
-p1 <- heatplot( edox, showCategory= 5 ) p2 <- heatplot( edox, foldChange= geneList, showCategory= 5 ) cowplot:: plot_grid( p1, p2, ncol= 1 , labels= LETTERS [ 1 : 2 ] )
-
-
-
-Figure 4. Heatmap plot of enriched terms
from clusterProfiler book
+建议用nohup放到后台运行nohup sh -c 'for i in $(ls 4dtv.temp_*.sh);do bash ${i};done' &
-可视化treeplot —— 树状图 treeplot()函数执行丰富术语的层次聚类。它依赖于pairwise_termsim()函数计算的丰富项的成对相似性,默认情况下使用 Jaccard 的相似性指数 (JC)。如果支持,用户还可以使用语义相似度值(例如,GO、DO和MeSH)。
+合并子文件,获得最终结果seqkit concat ./4dtv.temp_*.aln >4dtv.aln
-默认聚合方法treeplot()是ward.D,用户可以通过hclust_method参数指定其他方法(例如,’average’、’complete’、’median’、’centroid’等。
-treeplot()函数会将树切割成几个子树(由nCluster参数指定(默认为 5))并使用高频词标记子树。
-edox2 <- pairwise_termsim( edox) p1 <- treeplot( edox2) p2 <- treeplot( edox2, hclust_method = "average" ) aplot:: plot_list( p1, p2, tag_levels= 'A' )
-
-
-
-Figure 5. Tree plot of enriched terms
from clusterProfiler book
+可以seqkit stats *aln
检查是否都是1000长度的序列;以及seqkit stats 4dtv.aln
检查是否序列长度与4dtv.temp的行数一致。
-可视化emapplot —— 富集图 对于富集到的GO terms之间的基因重叠关系进行展示,如果两个GO terms系的差异基因存在重叠,说明这两个节点存在overlap关系,在图中用线条连接起来。每个节点是一个富集到的GO term, 默认画top30个富集到的GO terms, 节点大小对应该GO terms下富集到的差异基因个数,节点的颜色对应p.adjust的值,从小到大,对应蓝色到红色。
+删除中间文件rm 4dtv.temp*
-ego2 <- pairwise_termsim( ego) p1 <- emapplot( ego2) p2 <- emapplot( ego2, cex_category= 1.5 ) p3 <- emapplot( ego2, layout= "kk" ) p4 <- emapplot( ego2, cex_category= 1.5 , layout= "kk" ) cowplot:: plot_grid( p1, p2, p3, p4, ncol= 2 , labels= LETTERS [ 1 : 4 ] )
-
-
-
-Figure 6. Plot for results obtained from hypergeometric test and gene set enrichment analysis. default (A), cex_category=1.5 (B), layout=”kk” (C) and cex_category=1.5,layout=”kk” (D).
from clusterProfiler book
-
-可视化upsetplot —— upset图 upsetplot是cnetplot可视化基因和基因集之间复杂关联的替代方法。它强调不同基因集之间的基因重叠。
-
-upsetplot(ego)
-
-
-Figure 7. Upsetplot for over-representation analysis.
from clusterProfiler book
-
-可视化ridgeplot —— 脊线图 ridgeplot将可视化核心富集基因的表达分布为GSEA富集类别。它帮助用户解释上调/下调的途径。
-
-ridgeplot(ego)
-
-
-Figure 8. Ridgeplot for gene set enrichment analysis.
from clusterProfiler book
-2.2. 可视化plotGOgraph/goplot —— 有向无环图
-plotGOgraph(ego, firstSigNodes=10)
-
-
-有向无环图(Directed acyclic graph, DAG),矩形代表富集到的top10个GO Terms,颜色从黄到红,对应p值从大到小。和topGO做富集分析 的DAG图一样。
-
-当enrichGO富集分析时ont参数选了ALL时,结果文件会在第一列前增加一列ONTOLOGY为子类,这时直接用于plotGOgraph画图会报错。试了下,下面两种方案还是会报错Error in if (!ont %in% c(“BP”, “MF”, “CC”)) { :argument is of length zero。 。还是尽量在enrichGO分析时就用ont=”BP”吧。
-
-可以在结果文件中筛选出特定子类(比如BP)的结果行,并删除第一列ONTOLOGY后保存文件,再读进R用于plotGOgraph画图。
-也可以在R内用命令ego2<-ego%>%filter(ONTOLOGY== "BP")
筛选BP子类,接着用ego3<-ego2%>%select(!ONTOLOGY)
或者ego3<-ego2[,-1]
删除第一列(即ONTOLOGY列),然后用plotGOgraph(ego3)
作图。
-
-
-
-Figure 9. DAG图
from clusterProfiler blog
-
-goplot(ego, showCategory = 10)
-
-
-
-
-Figure 10. goplot的DAG图
from clusterProfiler book
-2.3. 可视化 —— wordcloud 词云的方式显示结果
-install.packages( "wordcloud" ) library( wordcloud) wcdf <- read.table( text = ego$ GeneRatio, sep = "/" ) [ 1 ] wcdf$ term <- ego[ , 2 ] wordcloud( words = wcdf$ term, freq = wcdf$ V1, scale= ( c ( 4 , .1 ) ) , colors= brewer.pal( 8 , "Dark2" ) , max.words = 25 )
-
-
-
-Figure 11. wordcloud词云图
from NGS Analysis ebook
-3. 导出可视化结果
-Rstudio
-
-如果是在Rstudio中,可以直接看到绘图结果,导出需要的文件格式即可。
-
-代码导出pdf( "ego.pdf" ) ego_fig<- barplot( x) print( ego_fig) dev.off( )
-
-4. references
-clusterProfiler github:https://github.com/YuLab-SMU/clusterProfiler
-clusterProfiler paper:https://www.cell.com/the-innovation/fulltext/S2666-6758(21)00066-7?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS2666675821000667%3Fshowall%3Dtrue
-clusterProfiler book:http://yulab-smu.top/biomedical-knowledge-mining-book/index.html
-clusterProfiler manual:https://bioconductor.org/packages/devel/bioc/manuals/clusterProfiler/man/clusterProfiler.pdf
-clusterProfiler ducumentation:https://guangchuangyu.github.io/software/clusterProfiler/documentation/
-其他来源结果可视化:https://cloud.tencent.com/developer/article/1613815
-wordcloud:https://learn.gencore.bio.nyu.edu/rna-seq-analysis/over-representation-analysis/
+1.2.3. 分物种运行【不推荐】 一开始没发现seqkit concat这个工具,然后自己写的合并,有时会有aln的问题,不建议用。
+
+定义数组sps为物种列表sps=($(seqkit seq -n ${cds}|xargs))
+以第六个物种${sps[5]}的4dtv为标准,为每个物种保存一份4dtv.bed文件for i in $(echo ${sps[*]}); do cat ${sps[5]}.4dtv|sed "s/${species[5]}/${i}/g" >${i}.4dtv.bed; done
+为每个物种提取4dtv位点,保存到4dtv.aln.temp【耗时步骤】for i in $(echo ${sps[*]}); do seqkit subseq --bed ${i}.4dtv.bed ${cds} | grep -v ">"|xargs echo |sed "1i\>${i}" >${i}.4dtv.aln.temp; done
+合并物种的4dtv位点cat *.4dtv.aln.temp >4dtv.aln
#合并
欢迎关注微信公众号:生信技工
公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
-]]>
+ ]]>
bioinfo
- enrichment
+ 4dtv
- gene set enrichment analysis
- GSEA
- enrichment analysis
- over representation analysis
- ORA
- clusterProfiler
- visualization
+ 4dtv
+ codon
- 富集分析:(一)概述
- /2021/11/12/bioinfo_enrichment_intro/
- VIDEO
+ GFF3文件处理软件 —— GFF3toolkit工具包的介绍和使用
+ /2022/05/24/bioinfo_fileformat_GFF3toolkit/
+
-(全文约6600字)
-1. 富集分析 1.1. 富集分析概念
-富集分析 富集分析,本质上是对数据的分布检验,如果分布集中在某个区域,则认为富集。 常用的分布检验方法有卡方检验、Fisher精确检验以及KS检验等方法。
+1. GFF3toolkit 简介 GFF3toolkit 是用于处理GFF3格式文件的一个基于python的工具包,功能包括检测GFF3格式错误,修正GFF3格式错误,合并GFF3格式文件,排序GFF3格式文件,用GFF3格式文件生成序列等。
+2. GFF3toolkit 安装 pip install gff3tool
+3. GFF3toolkit 模块 GFF3toolkit包含许多模块:
+
+gff3_QC:检测gff3格式错误
+gff3_fix:修正gff3格式错误
+gff3_merge:合并两个gff3文件
+gff3_sort:根据scaffold,coordinates坐标来排序gff3文件
+gff3_to_fasta:根据基因组fasta和注释gff生成gene/cds/protein/exon等序列
+
+4. GFF3toolkit 使用 4.1. gff3_merge 用于合并两个gff3注释文件。
+
+命令gff3_merge -g1 sample1.gff3 -g2 sample2.gff3 -f genome.fa -og merged.gff3 -r merged.report
-生物信息学领域的富集分析 在 背景基因集(N) 下获得 一组特定基因集(S) ,S可能是基因列表,表达图谱,基因芯片等形式。在预先构建好基因注释数据库 (例如GO,KEGG等)已对背景基因集(N)根据生物功能或过程进行分类的前提下,通过统计学算法 找出有那些显著区别于背景基因集(N)的类别(生物组成/功能/过程),或者找出这组特定基因集间在生物组成/功能/过程的共性,经过聚类后去除冗余得到基因富集结果的过程,即为富集分析。
+参数
-可以这样简单理解富集分析在做什么。全国人口的户籍作为背景数据,我们通过富集分析可以知道相对于全国背景,客家人是不是明显在广东聚集。比如如果广东的客家人数/全国客家人数这个比值远超过广东人数/全国人数的比值,那么我们可以说客家人在广东是富集的。
+
+-g1 sample1.gff3:指定待合并的gff3文件1
+-g2 sample2.gff3:指定待合并的gff3文件2
+-f genome.fa:指定基因组文件
+-og merged.gff3:指定合并后结果文件
+-r merged.report:指定合并报告结果文件
+-noAuto:这个参数关闭添加replace tags的自动任务。默认是开启的。
+-a:默认开启添加replace tags的自动任务只应用在没有replace tags的transcript转录本上,-a参数设置为应用在所有转录本上。
+
-常用数据
+输出
-其中,背景基因集(N) 常常是一个物种的基因组注释基因总和。
-一组特定基因集(S) 常常是差异表达基因集(differentially expressed genes, DEGs)。
-预先构建好基因注释数据库 常用GO或KEGG数据库。
-常见的统计学算法 包括ORA,FCS,PT,NT四种。
+merged.gff3:合并后的gff文件
+merged.report:合并报告
-
-实际应用 通常会使用其他分析的结果作为**特定基因集(S)**,做基因富集分析来查看这些基因集是否主要集中在某些类别,这些类别代表的功能是否与表型或者进化事件有关联。比如:
-
+4.2. gff3_sort 用于排序gff3文件。根据scaffold(seqID),coordinates坐标排序基因,根据特征关系(feature relationship)排序基因内注释。
+排序的前提假设:
-比较转录组分析得到的差异表达基因集;
-比较基因组分析中得到的某物种特有的基因集;
-基因家族收缩扩张分析得到的基因组中显著扩张/收缩的基因集;
-基因组共线性分析中在全基因组复制事件附近的Ks值的基因集等各种分析得到的基因集;
+任何没有Parent属性的注释都是父注释。
+所有子注释都排在其父注释之后,并在新的父注释之前。
-1.2. 富集分析的算法 富集分析算法经过发展,常见的有四类:
-
-
-Figure 1. 富集分析四类算法
from paper:Progress in Gene Functional Enrichment Analysis
-1.2.1. 过表达分析(Over Representation Analysis, ORA)
-过表达分析(ORA)概念 过表达分析(ORA)是对背景基因集(N)和特定基因集(S)按照已知的基因功能或通路等分组,并鉴定特定基因集(S)在哪些组包含比背景基因集(N)比例更多的基因(过度表达,over-represented,即富集enriched)或更少的基因(表达不足,under-represented)的一种统计学方法。
-
-ORA是出现最早,最常用,有完善的统计学理论基础的方法。ORA重点在于通过基因集组成的比例来判断富集程度。
-
-过表达分析的分布检验 ORA类方法用的是离散分布的检验(Fisher精确检验,依据超几何分布的原理)。
-
-超几何分布有很多资料可参考,比如:https://www.jianshu.com/p/13f46bebebd4
-
-过表达分析(ORA)的局限性
+
+命令gff3_sort -g sample.gff3 -og sorted.gff3
+
+参数
+
-ORA使用的统计方法(例如超几何分布,二项分布,卡方分布)只考虑差异基因数量,忽略了差异程度(不同表达水平),,需要人为设置阈值,没有一个设置规定,阈值设置有主观性。
-通过一刀切的人为规定的阈值,找出差异最显著的单个基因,而忽略其他基因,比如差异小但变化方向一致的基因集,往往后者比前者更重要。
-利用的统计学假设每个基因相互独立,但是就生物体本身而言,忽略了基因间内部的复杂的相互作用,并且每个基因在不同的生物学过程中发挥的作用大小不一样,同等看待结果可能会不准确。
-假设每条通路都独立其他通路。
+-g sample.gff3:指定输入gff3文件
+-og sorted.gff3:指定输出排序好的gff3文件
+-t sort_template.txt:指定排序模板,按照指定模板的features进行基因内注释的排序。
+-i:按特征类型(feature type)对多亚型基因(multi-isoform gene)进行排序,默认是关闭的。
+-r:此参数按gff3文件里scaffold(seqID)出现的顺序排序,默认是按照scaffold的数字排序。
-
-过表达分析(ORA)的实际操作 需要四组数据:
+
+排序模板sort_template.txt文件示例
+gene pseudogene mRNA exon CDS
+
+输出
+
-背景基因集(N):常常是一个物种的基因组注释基因总和
-特定基因集(S):常常是差异表达基因集(differentially expressed genes, DEGs)
-背景基因集的分类信息:常常通过注释数据库(GO,KEGG等)和背景基因集获得
-特定基因集的分类信息:常常通过注释数据库(GO,KEGG等)和特定基因集获得
+sorted.gff3:排序结果文件
-通过四组数据获得基因数量的2×2列联表,再利用fisher精确检验或超几何分布得到p值。认为设置一个显著性阈值,高于阈值的即为富集基因。
-1.2.2. 功能分类打分(Functional Class Scoring,FCS) 1.2.2.1. 功能分类打分(FCS)
-功能分类打分(FCS)概念和改进 功能分类打分(FCS)与ORA相比进行了基本假设的改变,除了考虑单个基因的显著变化外,还考虑微效基因的叠加效果。代表是基因集富集分析(Gene Set Enrichment Analysis, GSEA)
+4.3. gff3_QC 用于检测gff3注释的格式错误
+
+命令nohup gff3_QC -g sample.gff3 -f genome.fa -o sample.qc -s statistic.txt >qc.log 2>&1 &
-FCS分析的三个步骤
+参数
-计算单个基因表达水平的统计值,采用如衡量差异基因的ANOVA、Q-statistic、t检验、Z-score、信噪比,进行打分或排序,或者直接使用排序好的基因表达谱
-同一通路上所有基因的表达水平统计值进行整合,汇集成单个通路水平的分数或统计值,采用基因水平统计的和、均值或中位数,Wilcoxon rank sum, Maxmean statistic, Kolmogorov-Smirnov statistic
-对通路水平的显著性进行评估:利用重抽样(bootstrap)的统计学方法
+-g sample.gff3:指定需要质控的gff文件
+-f genome.fa:指定基因组文件
+-o sample.qc:指定质控结果输出文件
+-s statistic.txt:指定统计输出文件
-功能分类打分(FCS)的优势(与ORA相比)
+输出
-不需要人为规定的阈值来一刀切显著性
-FCS考虑同一通路中基因表达的协调变化,即考虑微效基因的叠加效果。
-通过考虑基因表达的协调变化,FCS 方法解释了通路中基因之间的依赖性
+sample.qc:质控结果
-
-功能分类打分(FCS)的限制
-
+Line_num Error_code Error_level Error_tag ['Line 1'] Esf0014 Error ["##gff-version" missing from the first line] ['Line 1'] Esf0041 Error [Unknown reserved (uppercase) attribute: "Augustus_transcriptSupport_percentage"] ['Line 749964'] Ema0002 Warning [Protein sequence contains internal stop codons at bp 2397350] ['Line 750456'] Ema0001 Warning [Parent feature start and end coordinates exceed those of child features] ['Line 18852', 'Line 18838'] Emr0002 Warning [Incorrectly split gene parent?]
+
-与 ORA 类似,FCS 独立分析每个通路。一个基因可以在多个通路中发挥作用,这意味着这些通路可以交叉和重叠。
-许多 FCS 方法使用基因表达的变化来对给定通路中的基因进行排序,并丢弃进一步分析的变化。例如,假设通路中的两个基因 A 和 B 分别发生 2 倍和 20 倍的变化。只要它们与通路中的其他基因相比具有相同的各自等级,大多数 FCS 方法都会平等地对待它们。
+statistic.txt:质控结果的统计
-1.2.2.2. 基因富集分析(gene set enrichment analysis, GSEA) 基因富集分析(GSEA)是FCS算法中最常用的一种。
+Error_code Number_of_problematic_models Error_level Error_tag Esf0014 1 Error ##gff-version" missing from the first line Esf0041 378399 Error Unknown reserved (uppercase) attribute Ema0006 9 Info Wrong phase Esf0027 8 Error Phase is required for all CDS features Ema0002 468 Warning Protein sequence contains internal stop codons Ema0001 1024 Warning Parent feature start and end coordinates exceed those of child features Emr0002 31 Warning Incorrectly split gene parent?
+
+
+qc.log:运行log文件,也包含了质控相关信息。
+
+4.4. gff3_fix 用于修正gff3注释文件格式错误
-基因富集分析(GSEA)的原理
+命令nohup gff3_fix -qc_r sample.qc -g sample.gff3 -og corrected.gff3 >fix.log 2>&1 &
+
+参数
+
-基因排序 首先,根据各基因与表型间相关性r或两组间t检验统计量得分值对背景基因集(N)进行降序排列,比如把所有基因在两个分组(或表型)中的差异度从大到小排序,形成排好序的基因列表。
-基因富集 查看基因注释数据库(GO/KEGG)中每个小组基因集(例如GO一个通路一个小组)里的基因是否在排序的背景基因集里均匀分布,或者主要分布在排序背景基因集的顶部/底部。均匀分布说明不在这两个分组(或表型)中富集,集中分布在顶部/底部说明这个小组基因集在两个分组(表型)之一富集。
-富集分析 计算每一小组基因集的富集分数(enrichment score,ES)值,然后对ES值进行显著性检验和多重假设检验,计算得出显著富集的基因集。
+-qc_r sample.qc:指定质控结果文件作为修正参考,这里用gff3_QC的输出文件
+-g sample.gff3:指定需要修正的gff文件
+-og corrected.gff3:指定输出修正后的gff文件
-
-基因富集分析(GSEA)分析步骤
+
+输出
-计算富集分数(enrichment score,ES):对每一个小组基因集,遍历排好序的背景基因集(N),当基因出现在特定基因集(S)就加分,反之减分,加减分值由基因与表型的相关性决定。
-估计ES的统计显著性:基于样品的置换检验可以计算P值。
-多重假设检验矫正:根据每一小组基因集的大小对每个基因的ES做标准化,得到标准化NES(normalized enrichment score ,NES)。为了检验每一小组基因集的NES是否显著,将排好序的背景基因集(N)随机打乱排列一定次数,每次都计算每个基因集的NES(ES),得到每个基因集的NES在随机排序情况下的理论分布,从而计算其p值。若p<0.05,则说明该基因集在有序背景基因集(N)中大都富集在顶部,为富集基因集。FDR则是对p值进行FDR校正之后的p值。
+corrected.gff3:修正后的gff文件
+fix.log:运行log文件。
-1.2.3. 通路拓扑(Pathway Topology,PT)
-背景
+4.5. gff3_to_fasta 用于根据基因组fasta和注释gff生成gene/cds/protein/exon等序列,速度很快。
+
+命令gff3_to_fasta -g sample.gff3 -f genome.fa -st all -d simple -o sample
+
+参数
+
-大量公开可用的通路数据库提供的信息超出了每个通路的简单基因列表。与 GO 和分子特征数据库 (MSigDB) 不同,这些知识库还提供有关在给定途径中相互作用的基因产物、它们如何相互作用(例如,激活、抑制等)以及它们在何处相互作用(例如、细胞质、细胞核等)。这些知识库包括 KEGG、MetaCyc、Reactome、RegulonDB、STKE ( http://stke.sciencemag.org )、BioCarta ( http://www.biocarta.com )、和 PantherDB等。
-ORA 和 FCS 方法仅考虑通路中的基因数量或基因共表达来识别重要通路,而忽略这些知识库中可用的附加信息。因此,即使通过基因之间的新联系完全重新绘制了通路,只要它们包含相同的基因组,ORA 和 FCS 也会产生相同的结果。
-已经开发的通路拓扑 (PT) 的方法则利用这些通路数据库的附加信息。
-通路路径拓扑 (PT) 的方法本质上与 FCS 方法相同,因为它们执行与 FCS 方法相同的三个步骤。两者之间的主要区别在于使用通路拓扑来计算基因水平的统计数据。
+-g sample.gff3:指定需要修正的gff文件
+-f genome.fa:指定基因组文件
+-st all:指定输出的序列类型,all/gene/exon/cds/pep/trans/pre_trans/user_defined。
+-u mRNA CDS:如果用-st user_defined指定了输出自定义的序列,则需要-u参数指定自定义序列名称的parent和child类型。比如-u mRNA CDS会输出CDS序列。
+-d simple:指定输出fasta文件的序列ID的格式,simple是只输出gff文件的ID到fasta文件,complete输出完整的信息。
+-noQC:默认会执行质控程序,如果不想做质控,加上这个参数。
+-o sample:指定输出文件前缀
-
-通路拓扑(PT) 在通路的富集分析中,一般上游基因的表达水平改变要显著大于下游基因对整个通路的影响。PT方法就是把基因在通路中的位置,和其他基因的互作和调控关系结合在一起,评估每个基因对通路的贡献并算出权重,然后把权重整合到富集分析。
+
+输出 输出指定序列,比如:
-代表是SPIA,由于可用数据库的限制,应用还很少。
-1.2.4. 网络拓扑结构(Network Topology,NT) 利用现有的全基因组范围的生物网络,提取数据库的基因相互作用关系(如:基因连接度、基因在网络中的距离),把基因的生物学属性整合到功能分析。利用网络拓扑结构来计算基因对特定生物通路的重要性并给予相应的权重,再利用传统的ORA 或 FCS 方法来评估特定生物通路的富集程度,如GANPA 和 LEGO。缺点就是算法太复杂,计算速度慢。
-2. 富集分析常用基因集 2.1. Gene Ontology(GO) 2.1.1. GO
-GO是一个国际标准化的基因功能分类体系,由基因本体联合会(Gene Ontology Consortium,GOC) 负责。它提供了一套动态并可控的词汇表(controlled vocabulary)来全面描述生物体中基因和基因产物的属性,它由一组预先定义好的GO术语(GO term)组成,这组术语对基因产物的功能进行限定和描述。
-可在GO官网 )使用的AmiGO2网站 查询GO ID和GO term信息。之前常用的WEGO 2.0 也可以查询。
+
+sample_gene.fa
+sample_exon.fa:exon序列是根据注释情况每条注释生成一条exon序列。
+sample_cds.fa:cds序列是一个mRNA的一条CDS序列。
+sample_pep.fa
+sample_trans.fa
+sample_pre_trans.fa
-GO由三个ontology(本体)组成,是由独立的术语表示的,分别描述基因的细胞组分(cellular component,CC)、分子功能(molecular function,MF)、参与的生物过程(biological process,BP)。
-GO这三个本体的含义:
-
-细胞组成(cellular component,CC):描述基因产物执行功能的细胞结构相关的位置,比如一个蛋白可能定位在细胞核中,也可能定位在核糖体中;
-分子功能(Molecular Function,MF):描述基因产物发生在分子水平上的活动,例如催化或运输。通常对应于单个基因产物(即蛋白质或RNA)可以进行的活动。常见的宽泛的分子功能描述是催化活性(catalytic activity)和转运活动(transporter activity)。为了避免与基因产物名称混淆,通常分子功能描述后加上”activity”一词。
-生物过程(biological process,BP):描述的是指基因产物所关联的一个大的生物功能,或者说是多个分子活动完成的一个大的生物程序。例如有丝分裂或嘌呤代谢;
-
-2.1.2. GO terms GO terms,它提供生物过程的逻辑结构与相关关系,不同GO terms之间的关系可以通过一个有向无环图来表示。
-此处需要注意的是,GO terms是对基因产物 ,而不是基因本身进行描述,因为基因本身的产物有时候不止一种。GO数据库中的GO分类相关信息会得到不断地更新与增加,这个特点要记住,因为不同的GO分析工具使用的数据库版本有可能不一样,造成GO分析结果出现不同。
-2.1.3. GO annotations GO注释(GO annotations)是关于特定基因功能的声明,它主要是将GO terms和基因或基因产物相关联来提供注释,也就是描述这个GO terms关联的基因产物是什么(蛋白质,还是非编码RNA,还是大分子等),有什么功能,如何在分子水平发挥作用,在细胞中的哪个位置发挥作用,以及它有助于执行哪些生物过程(途径、程序)。
-2.2. Kyoto Encyclopedia of Genes and Genomes(KEGG) 2.2.1. KEGG
-KEGG是处理基因组,生物通路,疾病,药物,化学物质的数据库集合,于1995年由京都大学化学研究所教授Minoru Kanehisa在当时正在进行的日本人类基因组计划下发起。
-KEGG 是一种数据库资源,用于从基因组和分子级信息了解生物系统(例如细胞、生物体和生态系统)的高级功能和效用。它是生物系统的计算机表示,由基因和蛋白质(基因组信息)和化学物质(化学信息)的分子构建块组成,它们与相互作用、反应和关系网络(系统信息)的分子接线图知识相结合。它还包含疾病和药物信息(健康信息)作为对生物系统的扰动。
-
-KEGG网站 提供了KEGG信息查询入口,包括KEGG Pathway 中查询KEGG Pathway ID(ko00000)的详细信息。
-2.2.2. KEGG Database KEGG 是一个集成的数据库资源,由如下所示的 16 个数据库组成。它们大致分为系统信息、基因组信息、化学信息和健康信息,它们通过网页的颜色编码来区分。
-
-KEGG Database
-
-
-Category
-Database
-Content
-Color
-
-
-
-
-Systems information
-KEGG PATHWAY
-KEGG pathway maps
-kegg3green
-
-
-KEGG BRITE
-BRITE hierarchies and tables
-
-
-KEGG MODULE
-KEGG modules and reaction modules
-
-
-Genomic information
-KEGG ORTHOLOGY (KO)
-Functional orthologs
-kegg4 yellow
-
-
-KEGG GENES
-Genes and proteins
-kegg1red
-
-
-KEGG GENOME
-KEGG organisms and viruses
-
-
-Chemical information
-KEGG COMPOUND
-Metabolites and other chemical substances
-kegg2blue
-
-
-KEGG GLYCAN
-Glycans
-
-
-KEGG REACTIONKEGG RCLASS
-Biochemical reactionsReaction class
-
-
-KEGG ENZYME
-Enzyme nomenclature
-
-
-Health information
-KEGG NETWORK
-Disease-related network variations
-kegg5purle
-
-
-KEGG VARIANT
-Human gene variants
-
-
-KEGG DISEASE
-Human diseases
-
-
-KEGG DRUGKEGG DGROUP
-DrugsDrug groups
-
-
-
-
-2.2.3. KEGG PATHWAY Database KEGG PATHWAY Database是KEGG资源的核心,是一组手工绘制的KEGG通路图,代表细胞和生物体的新陈代谢和各种其他功能的实验知识。每个通路图都包含一个分子相互作用和反应网络,旨在将基因组中的基因与通路中的基因产物(主要是蛋白质)联系起来。
-3. 富集分析程序 目前有许多程序可以用于富集分析。包括NASQAR,PlantRegMap,MSigDB,Broad Institute,WebGestalt,Enrichr,GeneSCF,DAVID,Metascape,AmiGO 2,GREAT,FunRich,FuncAssociate,InterMine,ToppGene Suite,QuSAGE,Blast2GO,g:Profiler。
-可以根据需要分析的物种类别和数据库更新选择分析平台,根据需要选择先验基因集。
-大部分富集分析程序都只支持已有数据库的物种的富集分析,如果是不在支持物种列表里的物种,可以用富集分析的R包做富集分析。
-下面介绍几种常见的。
-3.1. NASQAR NASQAR (Nucleic Acid SeQuence Analysis Resource)是一个开源的网页平台,可以用R包clusterProfiler做GSEA分析,支持Org.Db数据库 的所有物种的GO Term和KEGG Pathway富集分析。
-3.2. PlantRegMap PlantRegMap ,支持165种植物的GO注释和GO富集分析。
-3.3. Enrichr Enrichr是针对哺乳动物的基因富集分析工具。可以通过API使用,并提供可视化结果。
-3.4. GeneSCF GeneSCF支持多个物种,实时的功能富集分析工具。不需要额外更新数据库,GeneSCF是实时最新的数据库,并且支持多物种富集分析。结果以文本呈现。
-3.5. DAVID DAVID是做注释,富集和可视化的整合的数据库。但注释数据库自从2016年10月就没有更新。
-3.6. Blast2GO Blast2GO可以做组学数据的功能注释和GSEA分析。
-3.7. KOBAS-i 3.7.1. KOBAS-i简介
-KOBAS是中科院和北大联合开发的做功能注释和GSEA分析的工具。
-目前已经发表了第三个版本,KOBAS-intelligence(KOBAS-i),KOBAS-i引入了之前发布的基于机器学习的新方法CGPS,并扩展了可视化功能,支持的物种增加到5944个。
-KOBAS包含注释模块和富集模块。
-
-
-注释模块接受基因列表作为输入,包括 ID 或序列,并根据通路、疾病和GO信息等多个数据库为每个基因生成注释。
-富集模块给出了关于哪些通路和 GO 术语与输入基因列表或表达在统计上显着相关的结果。有两种不同的富集分析可用,命名为基因列表富集和 exp-data 富集。
-
-
-KOBAS-i有网页版,也有本地版。
-
-3.7.2. KOBAS-i网页版【推荐】 给了两个可用的网址:http://kobas.cbi.pku.edu.cn/,http://bioinfo.org/kobas。 KOBAS-i 。
-3.7.2.1. 注释(annotation)和富集(Enrichment)的步骤
-输入 注释只有三个输入项:
+5. reference
+gff3toolkit github:https://github.com/NAL-i5K/GFF3toolkit
+
-选择物种。目前支持5944个物种。
-选择输入基因集数据类型。支持核苷酸或者蛋白质的fasta序列,blast的Tabular输出结果,Ensembl Gene ID,Entrez Gene ID,UniProtKB AC,Gene Symbol。
-输入基因集。可以粘贴文本,也可以上传文件。
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-富集除了需要上面三个输入项外,还需要选择用哪写先验基因集的数据库来做富集分析。包括PATHWAY,DISEASE,GO。其中KEGG Pathway是所有物种都可以用,其他的只有部份物种可以选。
-
-PATHWAY。有四个选项,KEGG Pathway(K),Reactome(R),BioCyc(B),PANTHER(p)。
-DISEASE。有三个选项,OMIM(o),KEGG Disease(k),NHGRI GWAS Catalog(N)
-GO(G)。 此外还有高级选项,可以选择统计学方法和纠错方法。
+ ]]>
+
+ bioinfo
+ fileformat
+
+
+ GFF3
+ GFF3toolkit
+
+
+
+ samtools faidx创建fasta/fastq格式文件的.fai格式索引文件
+ /2023/11/24/bioinfo_fileformat_fa_fai/
+
+
+1. 为fasta/fastq格式文件创建索引
+fasta/fastq文件是用于存储生物序列的常用格式,后缀为fasta/fas/fa/fastq/fq。
+为fasta/fastq创建索引文件,可以快速查找和提取任意位置序列。如使用GATK,IGV等软件时用到。
+samtools faidx sample.fa
命令即可创建sample.fa.fai
索引文件。
+samtools faidx
命令对fasta文件的格式有要求。即对每条序列内,除最后一行外,其他行长度必须相同,行末尾的换行符也必须一致(Unix-style或Windows-style)。同一个fasta文件内的不同序列间的长度和换行符可以不一致,但同一条序列内部必须一致。
+samtools faidx
命令对fastq文件的格式的要求是fastq的碱基质量行必须与序列行有着一样的长度。
-然后点击Run,就可以等待运行结果了。
-
-结果 运行结束后,点击右上角的Download total terms就可以下载到结果。 富集分析还可以点击Visualization得到结果的可视化图。
-
-3.8. GOEAST 在线工具GOEAST
-4. 富集分析的R包 如果是模式物种,或者已有数据库的物种,推荐在线网站PlantRegMap 和KOBAS-i 做GO和KEGG的富集分析。
-常见的有topGO,clusterProfiler,有一些进行富集分析的程序使用了这些包。
-4.1. topGO 用topGO做富集分析的具体教程可以查看博文blog_topGO 。
-topGO是一个R包,用于半自动的GO terms的富集分析。topGO的结果可以展示为有向无环图。
-
+2. 索引文件含义 .fai文件是文本文件,列间用TAB(\t)分隔,fa.fai共五列,fq.fai共六列(多一列QUALOFFSET)。
+2.1. fai文件的六列 NAME Name of this reference sequence LENGTH Total length of this reference sequence, in bases OFFSET Offset in the FASTA/FASTQ file of this sequence's first base LINEBASES The number of bases on each line LINEWIDTH The number of bytes in each line, including the newline QUALOFFSET Offset of sequence's first quality within the FASTQ file
-Figure 2. DAG图示例
from wikipedia:directed acyclic graph
-注:对每个GO节点进行富集,在图中用方框表示显著度最高的10个节点,图中还包含其各层对应关系。每个方框(或椭圆)内给出了该GO节点的内容描述和富集显著性值。不同颜色代表不同的富集显著性,颜色越深,显著性越高。
-4.2. clusterProfiler clusterProfiler包的具体使用参考博文blog_clusterProfiler 。
-4.2.1. clusterProfiler clusterProfiler是一个R包,是一个解释组学数据的通用富集工具,支持Gene Ontology(GO), Kyoto Encyclopedia of Genes and Genomes(KEGG), Disease Ontology(DO), Disease Gene Network(DisGeNET), Molecular Signatures Database(MSigDb), wikiPathways和许多其他的基因集的功能注释和富集分析,以及富集分析结果的可视化。2021年07月发布了clusterProfiler 4.0版本。
-4.2.2. clusterProfiler支持的基因集(gene sets)
-Gene Ontology(GO)
-Kyoto Encyclopedia of Genes and Genomes(KEGG)
-Disease Ontology(DO)
-Disease Gene Network(DisGeNET)
-Molecular Signatures Database(MSigDb)
-wikiPathways
+2.2. 每列的含义
+NAME:序列名称,保留>符号后到第一个空格前的字符串。与SAM文件的@SO header的SN值一致。
+LENGTH:序列长度,即碱基的数量。与SAM文件的@SO header的SL值一致。
+OFFSET:OFFSET(偏移)列包含该序列第一个碱基在 FASTA/FASTQ 文件中的偏移量(以字节为单位,从零开始计数,换行符也统计在内),即从标题行(FASTA 中为”>”行,FASTQ 中为”@”行)的第一个字符到此条序列的第一个碱基(包括换行符)的字符数量。通常情况下,fai 索引文件的各行是按照序列在 FASTA/FASTQ 文件中出现的顺序排列的,因此 .fai 文件通常是按照这一列排序的。
+LINEBASES:除了较短的最后一行外, 其他代表序列的行的碱基数, 单位为bp;
+LINEWIDTH:除了较短的最后一行外, 其他代表序列的行的长度。与LINEBASES不同的是,LINEWIDTH 包括换行符, unix系统中换行符为\n,在序列长度基础上加1;Windows系统中换行符为\r\n, 要在序列长度的基础上加2。
+QUALOFFSET:与 OFFSET 相同,但针对的是序列的第一个质量分数。这将是 “+”行末尾换行后的第一个字符。仅适用于 FASTQ 文件。
-4.2.3. clusterProfiler功能 —— enrichment analysis
-Over Representation Analysis, ORA ORA是用于判断已知的生物功能或过程在实验产生的基因列表(例如差异表达基因列表, differentially expressed genes, DEGs)中是否过表达(over-represented=enriched)的常用方法。
-Gene Set Enrichment Analysis, GSEA
-Leading edge analysis and core enriched genes
+2.3. 例子 https://www.htslib.org/doc/faidx.html 中有一些fasta和fastq文件的索引文件的例子。
+3. 应用
+提取指定位置序列:samtools faidx sample.fa chr1 >chr1.fa
;samtools faidx sample.fa chr1:100-235 >chr1_partial.fa
。
+统计fasta序列长度,保存到bed格式文件:samtools faidx sample.fa && awk '{print $1"\t1\t"$2}' sample.fa.fai > sample.fa.bed
-5. references
-GSEA wiki:https://en.wikipedia.org/wiki/Gene_set_enrichment_analysis
-paper-Ten Years of Pathway Analysis: Current Approaches and Outstanding Challenges:https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002375
-paper-Progress in Gene Functional Enrichment Analysis:https://www.sciengine.com/SSV/article?doi=10.1360/N052016-00139&scroll=
-enrichment analysis:https://www.jianshu.com/p/be8fe1318850
-enrichment analysis methods:https://www.jianshu.com/p/042b888d5520
-enrichment analysis methods:https://blog.csdn.net/fjsd155/article/details/103064166
-GOEAST introduction:https://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&mid=2247484456&idx=1&sn=bbcd0b5d10ba9312d92b7baae777ccde&scene=21#wechat_redirect
-topGO tutorial:https://bioconductor.org/packages/release/bioc/vignettes/topGO/inst/doc/topGO.pdf
-topGO blog:https://datacatz.wordpress.com/2018/01/19/gene-set-enrichment-analysis-with-topgo-part-1/
-R topGO:https://www.codenong.com/cs105162324/
-enrichment:https://www.jianshu.com/p/47b5ea646932
-GO explanation:https://www.jianshu.com/p/7177c372243f
-GO overview:http://geneontology.org/docs/ontology-documentation/
-KEGG:https://en.wikipedia.org/wiki/KEGG
-clusterProfiler github:https://github.com/YuLab-SMU/clusterProfiler
-universal enrichment analysis using clusterProfiler:http://yulab-smu.top/biomedical-knowledge-mining-book/universal-api.html
-clusterProfiler paper:https://www.cell.com/the-innovation/fulltext/S2666-6758(21)00066-7?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS2666675821000667%3Fshowall%3Dtrue
+4. references
+https://www.htslib.org/doc/faidx.html
欢迎关注微信公众号:生信技工
公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
- ]]>
+
+
+
+]]>
bioinfo
- enrichment
+ fileformat
+ fasta
- gene set enrichment analysis
- GSEA
- topGO
- enrichment analysis
- over representation analysis
- ORA
- clusterProfiler
- KOBAS-i
- GOEAST
+ samtools
+ faidx
+ fasta
+ fas
+ fa
+ fastq
+ fq
+ fai
- 富集分析:(二)topGO
- /2021/11/13/bioinfo_enrichment_topGO/
-
+ 软件mitogenomics用于线粒体基因组相关格式转换
+ /2022/06/30/bioinfo_fileformat_mitogenomics/
+
-1. 富集分析(enrichment analysis) 富集分析(enrichment analysis)的概述参考博客:富集分析概述 。
-2. topGO 2.1. topGO简介 topGO是一个R包,用于半自动的GO terms的富集分析。
-因为topGO只用于GO的富集分析,且是半自动化的,推荐使用更方便的在线工具KOBAS-i ;KOBAS-i 备用 ;GOEAST ; 或者功能更完善的clusterProfiler包,参考博客:clusterProfiler包 。
-2.2. GO term GO term分为三大类:
-
-cellular component(CC)-细胞成分(其中基因产物位于细胞内部)
-molecular function(MF)-分子功能(基因产物的功能是什么)
-biology process(BP)-生物过程(即基因产物参与的一系列事件) 三类都可以用topGO做富集分析。
+mitogenomics简介
+无意中发现的一个软件。
+基于已有线粒体基因组序列和基因序列,通过比对获取注释tbl格式文件,所以只适用于线粒体的基因。
+包括两个转化格式的脚本mitos2fasta.py,aln2tbl.py(和python2版本)。
-2.3. topGO支持的统计检验方法 topGO包默认算法用的是weight01,是elim和权重算法的混合。
-
-
-
-topGO支持的统计方法
-fisher
-ks
-t
-globaltest
-sum
-
-
-
-classic
-Y
-Y
-Y
-Y
-Y
-
-
-elim
-Y
-Y
-Y
-Y
-Y
-
-
-weight
-Y
-N
-N
-N
-N
-
-
-weight01
-Y
-Y
-Y
-Y
-Y
-
-
-lea
-Y
-Y
-Y
-Y
-Y
-
-
-parentchild
-Y
-N
-N
-N
-N
-
-
-2.4. 安装topGO if ( ! requireNamespace( "BiocManager" , quietly = TRUE ) ) install.packages( "BiocManager" ) BiocManager:: install( "topGO" , version = "3.14" ) BiocManager:: install( "Rgraphviz" , version = "3.8" ) BiocManager:: install( "GO.db" ) BiocManager:: install( "biomaRt" )
-
-或者
-source( "https://bioconductor.org/biocLite.R" ) biocLite( "topGO" ) biocLite( "GO.db" ) biocLite( "biomaRt" ) biocLite( "Rgraphviz" ) library( topGO) library( GO.db) library( biomaRt) library( Rgraphviz)
-
-2.5. topGO做富集分析(ORA) 2.5.1. 输入文件 两个输入文件
-
-genes.list:需要做富集分析的geneID的list,一个基因ID一行
-sample.anno:基因及GO注释信息,第一列是geneID,第二列是GO注释,空格分隔,GO注释可以有多个,格式为GO:0000428,GO:0003677,GO:0005506,
-
-2.5.2. 富集分析 setwd( 'D:/test_data' ) rm( list = ls( ) ) library( topGO) library( Rgraphviz) input= "genes.list" mapfile= "sample.anno" gene_id = readMappings( file = mapfile) gene_names = names ( gene_id) my_genes = read.table( input) [ , 1 ] gene_list = rep ( 1 , length ( gene_id) ) names ( gene_list) = names ( gene_id) gene_list[ match( my_genes, names ( gene_list) ) ] = 0 top_diff_genes = function ( allScore) { return ( allScore< 0.01 ) } bp_go = new( "topGOdata" , nodeSize = 6 , ontology= "BP" , allGenes = gene_list, annot = annFUN.gene2GO, gene2GO = gene_id, geneSel= top_diff_genes) result_KS.elim = runTest( bp_go, algorithm = "elim" , statistic = "ks" ) allres = GenTable( bp_go, KS = result_KS.elim, ranksOf = "classic" , topNodes = attributes ( result_KS.elim) $ geneData[ 4 ] ) write.table( allres, file = paste( input, ".BP.xls" , sep= "" ) , sep= "\t" , quote = FALSE , col.names= TRUE , row.names= FALSE ) pdf( paste( input, ".BP.pdf" , sep= "" ) ) showSigOfNodes( bp_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) png( paste( input, ".BP.png" , sep= "" ) ) showSigOfNodes( bp_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) mf_go = new( "topGOdata" , nodeSize = 6 , ontology= "MF" , allGenes = gene_list, annot = annFUN.gene2GO, gene2GO = gene_id, geneSel= top_diff_genes) result_KS.elim = runTest( mf_go, algorithm = "elim" , statistic = "ks" ) allres = GenTable( mf_go , KS = result_KS.elim, ranksOf = "classic" , topNodes = attributes ( result_KS.elim) $ geneData[ 4 ] ) write.table( allres, file = paste( input, ".MF.xls" , sep= "" ) , sep= "\t" , quote = FALSE , col.names= TRUE , row.names= FALSE ) pdf( paste( input, ".MF.pdf" , sep= "" ) ) showSigOfNodes( mf_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) png( paste( input, ".MF.png" , sep= "" ) ) showSigOfNodes( mf_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) cc_go = new( "topGOdata" , nodeSize = 6 , ontology= "CC" , allGenes = gene_list, annot = annFUN.gene2GO, gene2GO = gene_id, geneSel= top_diff_genes) result_KS.elim = runTest( cc_go, algorithm = "elim" , statistic = "ks" ) allres = GenTable( cc_go, KS = result_KS.elim, ranksOf = "classic" , topNodes = attributes ( result_KS.elim) $ geneData[ 4 ] ) write.table( allres, file = paste( input, ".CC.xls" , sep= "" ) , sep= "\t" , quote = FALSE , col.names= TRUE , row.names= FALSE ) pdf( paste( input, ".CC.pdf" , sep= "" ) ) showSigOfNodes( cc_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( ) png( paste( input, ".CC.png" , sep= "" ) ) showSigOfNodes( cc_go, score( result_KS.elim) , firstSigNodes = 10 , useInfo = "all" ) dev.off( )
-
-2.5.3. 结果解释
-.xls结果文件中每一列的含义
-
-
-GO.ID:富集的GO ID
-
-Term:GO ID的描述
-
-Annotated : number of genes in go.db which are annotated with the GO-term.在go.db中被注释到GO-term的基因数量。
-
-Significant : number of genes belonging to your input which are annotated with the GO-term. GO-term被注释到的基因中包含输入的基因的数量
-
-Expected : show an estimate of the number of genes a node of size Annotated would have if the significant genes were to be randomly selected from the gene universe. 对节点基因数量的预期
+软件安装
+git下载git clone https://github.com/IMEDEA/mitogenomics
-KS:用KS(Kolmogorov-Smirnov)算法计算得到的p-value值。
-KS全称是:Kolmogorov-Smirnov,KS值是通过KS检验所得,KS检验是一种算法。统计方法如下:
-
-首先计算每个go节点对应的gene个数,
-如果某个节点的子节点也有gene比对上,那么父节点对应的gene个数也要加上子节点的基因数
-使用KS统计检验进行p值的计算,文件中的KS值,就是常说的p value,叫KS值的原因,是体现使用的KS检验方法。
-
+脚本
-
-
-DAG图(矢量图/像素图) 有向无环图(Directed acyclic graph, DAG)中,从上至下依次有包含关系,只有从上往下的箭头,这个箭头代表包含关系,即有向 。只有从上往下的箭头,方向是确定的,所以不会形成闭环,即无环 。
-
-
-Figure 1. DAG图示例
from wikipedia:directed acyclic graph
-有向无环图能直观展示基因富集的GO节点(Term)及其层级关系。
-在有向无环图中,矩形代表富集到的top10个GO Terms,颜色从黄到红,对应p值从大到小。
-分支代表包含关系,从上至下所定义的功能描述范围越来越具体。
-箭头代表包含关系,即该节点的所有基因同样注释到其上级节点中。
+因为软件是三个脚本组成,可以直接使用脚本。
-
-
-Figure 2. topGO结果DAG图
from clusterProfiler blog
-注:对每个GO节点进行富集,在图中用方框表示显著度最高的10个节点,图中还包含其各层对应关系。每个方框(或椭圆)内给出了该GO节点的内容描述和富集显著性值。不同颜色代表不同的富集显著性,颜色越深,显著性越高。
-3. references
-topGO tutorial:https://bioconductor.org/packages/release/bioc/vignettes/topGO/inst/doc/topGO.pdf
-topGO blog:https://datacatz.wordpress.com/2018/01/19/gene-set-enrichment-analysis-with-topgo-part-1/
-R topGO:https://www.codenong.com/cs105162324/
+
+依赖
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+python3的Biopython和argparse模块。
+可以用pip安装pip install biopython argparse
。
- ]]>
-
- bioinfo
- enrichment
-
-
- topGO
- enrichment analysis
- over representation analysis
- ORA
-
-
-
- 从codon比对的cds序列中提取四倍简并位点
- /2021/10/10/bioinfo_extract.4dtv.from.cds/
- 1. 从condon比对的cds序列中提取四倍简并位点输入文件是根据密码子规则(即三个三个对齐)比对好的cds序列,输出文件是以其中一个物种的4dtv为标准提取所有物种的4dtv位点,提取的也是按照比对前的顺序排列,结果保存在4dtv.aln文件中。
-1.1. 输入数据和变量定义
-cds=/path/to/cds.aln
# 定义变量cds为codon模式比对好的cds序列
-species=Athaliana
#以哪个物种的4dtv为标准提取,就定义变量species为那个物种的序列ID
-
-1.2. 三种方案【选择一种】 1.2.1. 一步生成
-一步生成运行文件,生成从cds获取4dtv的命令,很长,所以储存在文件4dtv.sh中。运行4dtv.sh就可以获取seqkit locate -V 0 -i -d -p GCN -p CGN -p GGN -p CTN -p CCN -p TCN -p ACN -p GTN ${cds} |awk -v awka="${species}" '{if ($1 == awka && $6%3== 0) print $6}'|sort -k 1n |uniq |awk -v awkb="${cds}" '{print "<(seqkit subseq -r "$1":"$1" "awkb")"}' |sed -e '1i\seqkit concat -w 0' -e '$a\> 4dtv.aln'|xargs echo >4dtv.sh
-
-代码含义:用seqkit locate根据4dtv的规则提取位置,然后筛选指定物种的位置,筛选第三位位置是3的整数倍的位置,把第三位位置(即4dtv位点)提取出来,排序去重;再按照seqkit concat要求的格式规则把seqkit concat命令写入提取脚本4dtv.sh中。
-除非位点在1000个以内,否则一步生成运行文件可能会运行失败,推荐用下一种方案。
-
-运行生成的4dtv.sh,获得4dtv.aln结果bash 4dtv.sh
-
-1.2.2. 切割分开运行【推荐】 如果需要合并的位点超过1000个,一步生成运行文件占用内存,运行较慢,可以分步骤进行。
-如果因为4dtv.sh太长无法运行,可以把4dtv.temp分成1-n几部分(比如1000行作为一个子文件),然后切割各部分分别生成4dtv_n.sh,之后分别运行再合并。
+软件mitogenomics 脚本mitos2fasta.py python 3 版本,用于转化基因序列为比对到线粒体基因组序列的格式。
-生成临时文件4dtv.tempseqkit locate -V 0 -i -d -p GCN -p CGN -p GGN -p CTN -p CCN -p TCN -p ACN -p GTN ${cds} |awk -v awka="${species}" '{if ($1 == awka && $6%3== 0) print $6}' |sort -k 1n |uniq >4dtv.temp
+命令mitos2fasta.py -m mito.fa -g genes.fa -c Y > assembly.fa
-分割临时文件4dtv.tempsplit -l 1000 4dtv.temp -d -a 4 4dtv.temp_
命令含义:分割文件4dtv.temp成多个文件,每个子文件1000行(-l 1000),以数字(-d)而非字母命名子文件,数字长度为4(-a 4,default是2);会生成4dtv.temp_0000-nnnn的子文件。
+输入输出
-可以先看看4dtv.temp的长度,我尝试了下按1000行切割比较合适,再多就达到能同时打开文件数量上限无法运行了。
-
-生成4dtv.temp.n.shfor i in $(ls 4dtv.temp_*);do cat ${i} |awk -v awkb="${cds}" '{print "<(seqkit subseq -r "$1":"$1" "awkb")"}' |sed -e '1i\seqkit concat -w 0' -e '$a\>'|sed "s/^>$/> ${i}.aln/" |sed 's/$/ \\/g' |sed '$ s/.$//' >${i}.sh; done
+
+-m mito.fa:线粒体基因组序列,fasta格式。
+-g genes.fa:基因序列,fasta格式。可以是软件MITOS2的输出。
+-c Y:是否简化基因名字(genes.fa文件的序列ID)并适应aln2tbl.py,Y/N。
+assembly.fa:输出保存到assembly.fa,即将线粒体基因组序列和基因序列比对好的序列格式,基因没比对的位置用-代替。
+
+aln2tbl.py python 3 版本,用于转化比对到线粒体基因组序列的基因序列(即mitos2fasta.py的输出)为tbl格式。
+aln2tbl-legacy.py是aln2tbl.py的python2版本,功能一样。
+
+命令aln2tbl.py -f assembly.fa -g genes.txt -c 1 > sample.tbl
-运行生成的4dtv.temp.n.sh,获得4dtv.aln_n结果【耗时步骤】for i in $(ls 4dtv.temp_*.sh);do bash ${i};done
+输入输出
-建议用nohup放到后台运行nohup sh -c 'for i in $(ls 4dtv.temp_*.sh);do bash ${i};done' &
-
-合并子文件,获得最终结果seqkit concat ./4dtv.temp_*.aln >4dtv.aln
-
-可以seqkit stats *aln
检查是否都是1000长度的序列;以及seqkit stats 4dtv.aln
检查是否序列长度与4dtv.temp的行数一致。
-
-删除中间文件rm 4dtv.temp*
-
-1.2.3. 分物种运行【不推荐】 一开始没发现seqkit concat这个工具,然后自己写的合并,有时会有aln的问题,不建议用。
-
-定义数组sps为物种列表sps=($(seqkit seq -n ${cds}|xargs))
-以第六个物种${sps[5]}的4dtv为标准,为每个物种保存一份4dtv.bed文件for i in $(echo ${sps[*]}); do cat ${sps[5]}.4dtv|sed "s/${species[5]}/${i}/g" >${i}.4dtv.bed; done
-为每个物种提取4dtv位点,保存到4dtv.aln.temp【耗时步骤】for i in $(echo ${sps[*]}); do seqkit subseq --bed ${i}.4dtv.bed ${cds} | grep -v ">"|xargs echo |sed "1i\>${i}" >${i}.4dtv.aln.temp; done
-合并物种的4dtv位点cat *.4dtv.aln.temp >4dtv.aln
#合并
+
+-f assembly.fa:输入文件是线粒体基因组和基因序列的比对文件,mitos2fasta.py的输出。
+-g genes.txt:保存了基因名称的文本文件,单行,多个基因名称间逗号分隔。
+-c number_genetic_code:用数字指定线粒体编码方式,植物线粒体是一般的编码方式 (1)。此外还有脊椎动物vertebrate (2), 酵母菌yeast (3), 霉菌mold, 原生动物protozoan and 腔肠动物coelenterate (4), 无脊椎动物invertebrate (5), 棘皮动物echinoderm and 扁形虫flatworm (9), 海鞘类ascidian (13)。
+
+sample.tbl:输出到tbl格式文件。
+
+
+
+references
+https://github.com/IMEDEA/mitogenomics
@@ -3399,352 +3197,321 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
bioinfo
- 4dtv
+ fileformat
+ mitogenome
- 4dtv
- codon
+ mitogenome
+ organelle
+ mitogenomics
+ aln2tbl.py
+ aln2tbl-legacy.py
+ mitos2fasta.py
+ tbl
- GFF3文件处理软件 —— GFF3toolkit工具包的介绍和使用
- /2022/05/24/bioinfo_fileformat_GFF3toolkit/
-
+ 富集分析:(一)概述
+ /2021/11/12/bioinfo_enrichment_intro/
+ VIDEO
-1. GFF3toolkit 简介 GFF3toolkit 是用于处理GFF3格式文件的一个基于python的工具包,功能包括检测GFF3格式错误,修正GFF3格式错误,合并GFF3格式文件,排序GFF3格式文件,用GFF3格式文件生成序列等。
-2. GFF3toolkit 安装 pip install gff3tool
-3. GFF3toolkit 模块 GFF3toolkit包含许多模块:
-
-gff3_QC:检测gff3格式错误
-gff3_fix:修正gff3格式错误
-gff3_merge:合并两个gff3文件
-gff3_sort:根据scaffold,coordinates坐标来排序gff3文件
-gff3_to_fasta:根据基因组fasta和注释gff生成gene/cds/protein/exon等序列
-
-4. GFF3toolkit 使用 4.1. gff3_merge 用于合并两个gff3注释文件。
-
-命令gff3_merge -g1 sample1.gff3 -g2 sample2.gff3 -f genome.fa -og merged.gff3 -r merged.report
+(全文约6600字)
+1. 富集分析 1.1. 富集分析概念
+富集分析 富集分析,本质上是对数据的分布检验,如果分布集中在某个区域,则认为富集。 常用的分布检验方法有卡方检验、Fisher精确检验以及KS检验等方法。
-参数
+生物信息学领域的富集分析 在 背景基因集(N) 下获得 一组特定基因集(S) ,S可能是基因列表,表达图谱,基因芯片等形式。在预先构建好基因注释数据库 (例如GO,KEGG等)已对背景基因集(N)根据生物功能或过程进行分类的前提下,通过统计学算法 找出有那些显著区别于背景基因集(N)的类别(生物组成/功能/过程),或者找出这组特定基因集间在生物组成/功能/过程的共性,经过聚类后去除冗余得到基因富集结果的过程,即为富集分析。
-
--g1 sample1.gff3:指定待合并的gff3文件1
--g2 sample2.gff3:指定待合并的gff3文件2
--f genome.fa:指定基因组文件
--og merged.gff3:指定合并后结果文件
--r merged.report:指定合并报告结果文件
--noAuto:这个参数关闭添加replace tags的自动任务。默认是开启的。
--a:默认开启添加replace tags的自动任务只应用在没有replace tags的transcript转录本上,-a参数设置为应用在所有转录本上。
-
+可以这样简单理解富集分析在做什么。全国人口的户籍作为背景数据,我们通过富集分析可以知道相对于全国背景,客家人是不是明显在广东聚集。比如如果广东的客家人数/全国客家人数这个比值远超过广东人数/全国人数的比值,那么我们可以说客家人在广东是富集的。
-输出
+常用数据
-merged.gff3:合并后的gff文件
-merged.report:合并报告
+其中,背景基因集(N) 常常是一个物种的基因组注释基因总和。
+一组特定基因集(S) 常常是差异表达基因集(differentially expressed genes, DEGs)。
+预先构建好基因注释数据库 常用GO或KEGG数据库。
+常见的统计学算法 包括ORA,FCS,PT,NT四种。
-4.2. gff3_sort 用于排序gff3文件。根据scaffold(seqID),coordinates坐标排序基因,根据特征关系(feature relationship)排序基因内注释。
-排序的前提假设:
+
+实际应用 通常会使用其他分析的结果作为**特定基因集(S)**,做基因富集分析来查看这些基因集是否主要集中在某些类别,这些类别代表的功能是否与表型或者进化事件有关联。比如:
+
-任何没有Parent属性的注释都是父注释。
-所有子注释都排在其父注释之后,并在新的父注释之前。
-
-
-命令gff3_sort -g sample.gff3 -og sorted.gff3
-
-参数
-
-
-
--g sample.gff3:指定输入gff3文件
--og sorted.gff3:指定输出排序好的gff3文件
--t sort_template.txt:指定排序模板,按照指定模板的features进行基因内注释的排序。
--i:按特征类型(feature type)对多亚型基因(multi-isoform gene)进行排序,默认是关闭的。
--r:此参数按gff3文件里scaffold(seqID)出现的顺序排序,默认是按照scaffold的数字排序。
+比较转录组分析得到的差异表达基因集;
+比较基因组分析中得到的某物种特有的基因集;
+基因家族收缩扩张分析得到的基因组中显著扩张/收缩的基因集;
+基因组共线性分析中在全基因组复制事件附近的Ks值的基因集等各种分析得到的基因集;
-
-排序模板sort_template.txt文件示例
-gene pseudogene mRNA exon CDS
-
-输出
-
+1.2. 富集分析的算法 富集分析算法经过发展,常见的有四类:
+
+
+Figure 1. 富集分析四类算法
from paper:Progress in Gene Functional Enrichment Analysis
+1.2.1. 过表达分析(Over Representation Analysis, ORA)
+过表达分析(ORA)概念 过表达分析(ORA)是对背景基因集(N)和特定基因集(S)按照已知的基因功能或通路等分组,并鉴定特定基因集(S)在哪些组包含比背景基因集(N)比例更多的基因(过度表达,over-represented,即富集enriched)或更少的基因(表达不足,under-represented)的一种统计学方法。
-
-4.3. gff3_QC 用于检测gff3注释的格式错误
-
-命令nohup gff3_QC -g sample.gff3 -f genome.fa -o sample.qc -s statistic.txt >qc.log 2>&1 &
-
-参数
-
+ORA是出现最早,最常用,有完善的统计学理论基础的方法。ORA重点在于通过基因集组成的比例来判断富集程度。
+
+过表达分析的分布检验 ORA类方法用的是离散分布的检验(Fisher精确检验,依据超几何分布的原理)。
-
--g sample.gff3:指定需要质控的gff文件
--f genome.fa:指定基因组文件
--o sample.qc:指定质控结果输出文件
--s statistic.txt:指定统计输出文件
-
+超几何分布有很多资料可参考,比如:https://www.jianshu.com/p/13f46bebebd4
-输出
+过表达分析(ORA)的局限性
-Line_num Error_code Error_level Error_tag ['Line 1'] Esf0014 Error ["##gff-version" missing from the first line] ['Line 1'] Esf0041 Error [Unknown reserved (uppercase) attribute: "Augustus_transcriptSupport_percentage"] ['Line 749964'] Ema0002 Warning [Protein sequence contains internal stop codons at bp 2397350] ['Line 750456'] Ema0001 Warning [Parent feature start and end coordinates exceed those of child features] ['Line 18852', 'Line 18838'] Emr0002 Warning [Incorrectly split gene parent?]
-
-
-statistic.txt:质控结果的统计
+ORA使用的统计方法(例如超几何分布,二项分布,卡方分布)只考虑差异基因数量,忽略了差异程度(不同表达水平),,需要人为设置阈值,没有一个设置规定,阈值设置有主观性。
+通过一刀切的人为规定的阈值,找出差异最显著的单个基因,而忽略其他基因,比如差异小但变化方向一致的基因集,往往后者比前者更重要。
+利用的统计学假设每个基因相互独立,但是就生物体本身而言,忽略了基因间内部的复杂的相互作用,并且每个基因在不同的生物学过程中发挥的作用大小不一样,同等看待结果可能会不准确。
+假设每条通路都独立其他通路。
-Error_code Number_of_problematic_models Error_level Error_tag Esf0014 1 Error ##gff-version" missing from the first line Esf0041 378399 Error Unknown reserved (uppercase) attribute Ema0006 9 Info Wrong phase Esf0027 8 Error Phase is required for all CDS features Ema0002 468 Warning Protein sequence contains internal stop codons Ema0001 1024 Warning Parent feature start and end coordinates exceed those of child features Emr0002 31 Warning Incorrectly split gene parent?
-
+
+过表达分析(ORA)的实际操作 需要四组数据:
+
-qc.log:运行log文件,也包含了质控相关信息。
+背景基因集(N):常常是一个物种的基因组注释基因总和
+特定基因集(S):常常是差异表达基因集(differentially expressed genes, DEGs)
+背景基因集的分类信息:常常通过注释数据库(GO,KEGG等)和背景基因集获得
+特定基因集的分类信息:常常通过注释数据库(GO,KEGG等)和特定基因集获得
-4.4. gff3_fix 用于修正gff3注释文件格式错误
-
-命令nohup gff3_fix -qc_r sample.qc -g sample.gff3 -og corrected.gff3 >fix.log 2>&1 &
+通过四组数据获得基因数量的2×2列联表,再利用fisher精确检验或超几何分布得到p值。认为设置一个显著性阈值,高于阈值的即为富集基因。
+1.2.2. 功能分类打分(Functional Class Scoring,FCS) 1.2.2.1. 功能分类打分(FCS)
+功能分类打分(FCS)概念和改进 功能分类打分(FCS)与ORA相比进行了基本假设的改变,除了考虑单个基因的显著变化外,还考虑微效基因的叠加效果。代表是基因集富集分析(Gene Set Enrichment Analysis, GSEA)
-参数
+FCS分析的三个步骤
--qc_r sample.qc:指定质控结果文件作为修正参考,这里用gff3_QC的输出文件
--g sample.gff3:指定需要修正的gff文件
--og corrected.gff3:指定输出修正后的gff文件
+计算单个基因表达水平的统计值,采用如衡量差异基因的ANOVA、Q-statistic、t检验、Z-score、信噪比,进行打分或排序,或者直接使用排序好的基因表达谱
+同一通路上所有基因的表达水平统计值进行整合,汇集成单个通路水平的分数或统计值,采用基因水平统计的和、均值或中位数,Wilcoxon rank sum, Maxmean statistic, Kolmogorov-Smirnov statistic
+对通路水平的显著性进行评估:利用重抽样(bootstrap)的统计学方法
-输出
+功能分类打分(FCS)的优势(与ORA相比)
-corrected.gff3:修正后的gff文件
-fix.log:运行log文件。
+不需要人为规定的阈值来一刀切显著性
+FCS考虑同一通路中基因表达的协调变化,即考虑微效基因的叠加效果。
+通过考虑基因表达的协调变化,FCS 方法解释了通路中基因之间的依赖性
-4.5. gff3_to_fasta 用于根据基因组fasta和注释gff生成gene/cds/protein/exon等序列,速度很快。
-
-命令gff3_to_fasta -g sample.gff3 -f genome.fa -st all -d simple -o sample
-
-参数
-
+
+功能分类打分(FCS)的限制
--g sample.gff3:指定需要修正的gff文件
--f genome.fa:指定基因组文件
--st all:指定输出的序列类型,all/gene/exon/cds/pep/trans/pre_trans/user_defined。
--u mRNA CDS:如果用-st user_defined指定了输出自定义的序列,则需要-u参数指定自定义序列名称的parent和child类型。比如-u mRNA CDS会输出CDS序列。
--d simple:指定输出fasta文件的序列ID的格式,simple是只输出gff文件的ID到fasta文件,complete输出完整的信息。
--noQC:默认会执行质控程序,如果不想做质控,加上这个参数。
--o sample:指定输出文件前缀
+与 ORA 类似,FCS 独立分析每个通路。一个基因可以在多个通路中发挥作用,这意味着这些通路可以交叉和重叠。
+许多 FCS 方法使用基因表达的变化来对给定通路中的基因进行排序,并丢弃进一步分析的变化。例如,假设通路中的两个基因 A 和 B 分别发生 2 倍和 20 倍的变化。只要它们与通路中的其他基因相比具有相同的各自等级,大多数 FCS 方法都会平等地对待它们。
-
-输出 输出指定序列,比如:
+1.2.2.2. 基因富集分析(gene set enrichment analysis, GSEA) 基因富集分析(GSEA)是FCS算法中最常用的一种。
+
+基因富集分析(GSEA)的原理
-sample_gene.fa
-sample_exon.fa:exon序列是根据注释情况每条注释生成一条exon序列。
-sample_cds.fa:cds序列是一个mRNA的一条CDS序列。
-sample_pep.fa
-sample_trans.fa
-sample_pre_trans.fa
+基因排序 首先,根据各基因与表型间相关性r或两组间t检验统计量得分值对背景基因集(N)进行降序排列,比如把所有基因在两个分组(或表型)中的差异度从大到小排序,形成排好序的基因列表。
+基因富集 查看基因注释数据库(GO/KEGG)中每个小组基因集(例如GO一个通路一个小组)里的基因是否在排序的背景基因集里均匀分布,或者主要分布在排序背景基因集的顶部/底部。均匀分布说明不在这两个分组(或表型)中富集,集中分布在顶部/底部说明这个小组基因集在两个分组(表型)之一富集。
+富集分析 计算每一小组基因集的富集分数(enrichment score,ES)值,然后对ES值进行显著性检验和多重假设检验,计算得出显著富集的基因集。
-5. reference
-gff3toolkit github:https://github.com/NAL-i5K/GFF3toolkit
+
+基因富集分析(GSEA)分析步骤
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bioinfo
- fileformat
-
-
- GFF3
- GFF3toolkit
-
-
-
- samtools faidx创建fasta/fastq格式文件的.fai格式索引文件
- /2023/11/24/bioinfo_fileformat_fa_fai/
-
-
-1. 为fasta/fastq格式文件创建索引
-fasta/fastq文件是用于存储生物序列的常用格式,后缀为fasta/fas/fa/fastq/fq。
-为fasta/fastq创建索引文件,可以快速查找和提取任意位置序列。如使用GATK,IGV等软件时用到。
-samtools faidx sample.fa
命令即可创建sample.fa.fai
索引文件。
-samtools faidx
命令对fasta文件的格式有要求。即对每条序列内,除最后一行外,其他行长度必须相同,行末尾的换行符也必须一致(Unix-style或Windows-style)。同一个fasta文件内的不同序列间的长度和换行符可以不一致,但同一条序列内部必须一致。
-samtools faidx
命令对fastq文件的格式的要求是fastq的碱基质量行必须与序列行有着一样的长度。
+计算富集分数(enrichment score,ES):对每一个小组基因集,遍历排好序的背景基因集(N),当基因出现在特定基因集(S)就加分,反之减分,加减分值由基因与表型的相关性决定。
+估计ES的统计显著性:基于样品的置换检验可以计算P值。
+多重假设检验矫正:根据每一小组基因集的大小对每个基因的ES做标准化,得到标准化NES(normalized enrichment score ,NES)。为了检验每一小组基因集的NES是否显著,将排好序的背景基因集(N)随机打乱排列一定次数,每次都计算每个基因集的NES(ES),得到每个基因集的NES在随机排序情况下的理论分布,从而计算其p值。若p<0.05,则说明该基因集在有序背景基因集(N)中大都富集在顶部,为富集基因集。FDR则是对p值进行FDR校正之后的p值。
-2. 索引文件含义 .fai文件是文本文件,列间用TAB(\t)分隔,fa.fai共五列,fq.fai共六列(多一列QUALOFFSET)。
-2.1. fai文件的六列 NAME Name of this reference sequence LENGTH Total length of this reference sequence, in bases OFFSET Offset in the FASTA/FASTQ file of this sequence's first base LINEBASES The number of bases on each line LINEWIDTH The number of bytes in each line, including the newline QUALOFFSET Offset of sequence's first quality within the FASTQ file
-
-2.2. 每列的含义
-NAME:序列名称,保留>符号后到第一个空格前的字符串。与SAM文件的@SO header的SN值一致。
-LENGTH:序列长度,即碱基的数量。与SAM文件的@SO header的SL值一致。
-OFFSET:OFFSET(偏移)列包含该序列第一个碱基在 FASTA/FASTQ 文件中的偏移量(以字节为单位,从零开始计数,换行符也统计在内),即从标题行(FASTA 中为”>”行,FASTQ 中为”@”行)的第一个字符到此条序列的第一个碱基(包括换行符)的字符数量。通常情况下,fai 索引文件的各行是按照序列在 FASTA/FASTQ 文件中出现的顺序排列的,因此 .fai 文件通常是按照这一列排序的。
-LINEBASES:除了较短的最后一行外, 其他代表序列的行的碱基数, 单位为bp;
-LINEWIDTH:除了较短的最后一行外, 其他代表序列的行的长度。与LINEBASES不同的是,LINEWIDTH 包括换行符, unix系统中换行符为\n,在序列长度基础上加1;Windows系统中换行符为\r\n, 要在序列长度的基础上加2。
-QUALOFFSET:与 OFFSET 相同,但针对的是序列的第一个质量分数。这将是 “+”行末尾换行后的第一个字符。仅适用于 FASTQ 文件。
-
-2.3. 例子 https://www.htslib.org/doc/faidx.html 中有一些fasta和fastq文件的索引文件的例子。
-3. 应用
-提取指定位置序列:samtools faidx sample.fa chr1 >chr1.fa
;samtools faidx sample.fa chr1:100-235 >chr1_partial.fa
。
-统计fasta序列长度,保存到bed格式文件:samtools faidx sample.fa && awk '{print $1"\t1\t"$2}' sample.fa.fai > sample.fa.bed
-
-4. references
-https://www.htslib.org/doc/faidx.html
+1.2.3. 通路拓扑(Pathway Topology,PT)
+背景
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
-
-
-
-]]>
-
- bioinfo
- fileformat
- fasta
-
-
- samtools
- faidx
- fasta
- fas
- fa
- fastq
- fq
- fai
-
-
-
- 转换GenBank文件为tbl格式,为提交注释做准备
- /2022/06/16/bioinfo_fileformat_gb2tbl/
-
-
-1. 简介
-GenBank格式常常出现在细胞器基因组的注释软件的结果中,但上传细胞器注释到公共数据库(eg NCBI)需要tbl格式文件。
-这篇文章介绍了几种把GenBank格式文件转换成tbl格式的方法。包括在线工具GB2sequin(此工具还包含验证和运行tbl2asn功能,可用于准备上传NCBI的注释文件),以及两个python2写的转换脚本。
+大量公开可用的通路数据库提供的信息超出了每个通路的简单基因列表。与 GO 和分子特征数据库 (MSigDB) 不同,这些知识库还提供有关在给定途径中相互作用的基因产物、它们如何相互作用(例如,激活、抑制等)以及它们在何处相互作用(例如、细胞质、细胞核等)。这些知识库包括 KEGG、MetaCyc、Reactome、RegulonDB、STKE ( http://stke.sciencemag.org )、BioCarta ( http://www.biocarta.com )、和 PantherDB等。
+ORA 和 FCS 方法仅考虑通路中的基因数量或基因共表达来识别重要通路,而忽略这些知识库中可用的附加信息。因此,即使通过基因之间的新联系完全重新绘制了通路,只要它们包含相同的基因组,ORA 和 FCS 也会产生相同的结果。
+已经开发的通路拓扑 (PT) 的方法则利用这些通路数据库的附加信息。
+通路路径拓扑 (PT) 的方法本质上与 FCS 方法相同,因为它们执行与 FCS 方法相同的三个步骤。两者之间的主要区别在于使用通路拓扑来计算基因水平的统计数据。
-1.1. GenBank格式 GenBank是美国国立卫生研究院维护的基因序列数据库,数据库中用gb格式文件(后缀.gb,.gbk)记录基因注释信息。
-GenBank文件格式标准参考:https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html
-1.2. tbl格式(for Sequin) 用于提交基因注释到GenBank的一种tab分隔的五栏的特征表(feature table)文件格式(后缀.tbl)。
-tbl文件格式标准参考:https://www.ncbi.nlm.nih.gov/genbank/feature_table/
-2. GB2sequin在线工具【推荐】 2.1. 简介 GB2sequin是用于转换GenBank格式文件为NCBI提交格式Sequin(包括tbl文件和sqn文件)的在线工具,包含验证GenBank注释的功能和运行tbl2asn的功能。
-网址是:
-https://chlorobox.mpimp-golm.mpg.de/GenBank2Sequin.html
-2.2. 优势
-通过网页在线转换,方便快捷。
-自动对注释进行验证,并生成错误报告,可根据错误报告修正注释。
-支持在输入中加入作者信息的template等文件。
-自动运行tbl2asn,生成sqn文件,方便提交tbl文件到NCBI。
-自动生成标准的GenBank格式文件,去除冗余。
-
-2.3. 使用步骤
-上传GenBank格式文件,要在文件末包含注释的序列,否则运行结果空白。
-【推荐】上传Author Submission Template。可以在https://submit.ncbi.nlm.nih.gov/genbank/template/submission/上填写信息后导出template.sbt文件用于上传。
-【可选】上传Source Modifier Table,Gene Product Specification Table。
-选择分子类别”Molecule Type”,一般默认genomic DNA即可。
-选择是否是完整(complete),环状(circular)的基因。
-选择编码方式”Genetic Code”,植物样品选标准Standard。
-选择基因位置Location,包括叶绿体chloroplast,线粒体mitochondrion等。
-点击Start Conversion,等待几分钟即可得到结果,点击每项结果然后下载(大多是文本文件)。
-根据验证结果文件的错误ERROR和警告WARNING逐一修改原始GenBank文件。
-再次运行,重复以上操作,直至无错误和警告,即可使用sqn文件上传至NCBI。
+
+通路拓扑(PT) 在通路的富集分析中,一般上游基因的表达水平改变要显著大于下游基因对整个通路的影响。PT方法就是把基因在通路中的位置,和其他基因的互作和调控关系结合在一起,评估每个基因对通路的贡献并算出权重,然后把权重整合到富集分析。
-验证结果的含义(tbl2asn运行的部分)可以参考之前写的基因组提交的博客 :https://yanzhongsino.github.io/2022/03/22/omics_genome.submit/
-2.4. 结果 结果文件包括:
+代表是SPIA,由于可用数据库的限制,应用还很少。
+1.2.4. 网络拓扑结构(Network Topology,NT) 利用现有的全基因组范围的生物网络,提取数据库的基因相互作用关系(如:基因连接度、基因在网络中的距离),把基因的生物学属性整合到功能分析。利用网络拓扑结构来计算基因对特定生物通路的重要性并给予相应的权重,再利用传统的ORA 或 FCS 方法来评估特定生物通路的富集程度,如GANPA 和 LEGO。缺点就是算法太复杂,计算速度慢。
+2. 富集分析常用基因集 2.1. Gene Ontology(GO) 2.1.1. GO
+GO是一个国际标准化的基因功能分类体系,由基因本体联合会(Gene Ontology Consortium,GOC) 负责。它提供了一套动态并可控的词汇表(controlled vocabulary)来全面描述生物体中基因和基因产物的属性,它由一组预先定义好的GO术语(GO term)组成,这组术语对基因产物的功能进行限定和描述。
+可在GO官网 )使用的AmiGO2网站 查询GO ID和GO term信息。之前常用的WEGO 2.0 也可以查询。
+
+GO由三个ontology(本体)组成,是由独立的术语表示的,分别描述基因的细胞组分(cellular component,CC)、分子功能(molecular function,MF)、参与的生物过程(biological process,BP)。
+GO这三个本体的含义:
-FASTA:从GenBank提取的fasta文件。
-Annotation Table:tbl文件。
-tbl2asn log:tbl2asn运行的log文件。
-Sequin:sqn文件,用于提交给NCBI。
-GenBank:标准化的GenBank文件。
-Validation:验证结果文件,包括细节。
-Validation Summary:验证结果的概括。
+细胞组成(cellular component,CC):描述基因产物执行功能的细胞结构相关的位置,比如一个蛋白可能定位在细胞核中,也可能定位在核糖体中;
+分子功能(Molecular Function,MF):描述基因产物发生在分子水平上的活动,例如催化或运输。通常对应于单个基因产物(即蛋白质或RNA)可以进行的活动。常见的宽泛的分子功能描述是催化活性(catalytic activity)和转运活动(transporter activity)。为了避免与基因产物名称混淆,通常分子功能描述后加上”activity”一词。
+生物过程(biological process,BP):描述的是指基因产物所关联的一个大的生物功能,或者说是多个分子活动完成的一个大的生物程序。例如有丝分裂或嘌呤代谢;
-3. genbank2tbl的脚本
-只要GB2sequin可以用,就强烈推荐GB2sequin,毕竟自带验证功能和自动运行tbl2asn。
-如果GB2sequin不可用(比如要用的时候服务器宕机了之类的原因,我才不会告诉你我就是这么走运才探索了一下脚本),可用脚本进行GenBank到tbl的格式转换。
-由于都是陈年老脚本,以下脚本都是用python2写的,并且调用了biopython(提前安装biopython)。
-
-脚本gbf2tbl.pl【NCBI 官方出品】
-简介
-
-
-脚本gbf2tbl.pl是NCBI官方提供的perl脚本。
-我暂时还没用过,先记在这。
+2.1.2. GO terms GO terms,它提供生物过程的逻辑结构与相关关系,不同GO terms之间的关系可以通过一个有向无环图来表示。
+此处需要注意的是,GO terms是对基因产物 ,而不是基因本身进行描述,因为基因本身的产物有时候不止一种。GO数据库中的GO分类相关信息会得到不断地更新与增加,这个特点要记住,因为不同的GO分析工具使用的数据库版本有可能不一样,造成GO分析结果出现不同。
+2.1.3. GO annotations GO注释(GO annotations)是关于特定基因功能的声明,它主要是将GO terms和基因或基因产物相关联来提供注释,也就是描述这个GO terms关联的基因产物是什么(蛋白质,还是非编码RNA,还是大分子等),有什么功能,如何在分子水平发挥作用,在细胞中的哪个位置发挥作用,以及它有助于执行哪些生物过程(途径、程序)。
+2.2. Kyoto Encyclopedia of Genes and Genomes(KEGG) 2.2.1. KEGG
+KEGG是处理基因组,生物通路,疾病,药物,化学物质的数据库集合,于1995年由京都大学化学研究所教授Minoru Kanehisa在当时正在进行的日本人类基因组计划下发起。
+KEGG 是一种数据库资源,用于从基因组和分子级信息了解生物系统(例如细胞、生物体和生态系统)的高级功能和效用。它是生物系统的计算机表示,由基因和蛋白质(基因组信息)和化学物质(化学信息)的分子构建块组成,它们与相互作用、反应和关系网络(系统信息)的分子接线图知识相结合。它还包含疾病和药物信息(健康信息)作为对生物系统的扰动。
-
-下载wget ftp://ftp.ncbi.nlm.nih.gov//toolbox/ncbi_tools/converters/scripts/gbf2tbl.pl
-
-3.1. 脚本genbank_to_tbl.py【推荐】 3.1.1. 简介 genbank_to_tbl.py脚本用于转换genbank格式的gene,CDS,exon,intron,tRNA,rRNA,pseudo genes等注释为tbl格式。
-3.1.2. 脚本 下载地址:https://gist.github.com/nickloman/2660685
-import sysfrom copy import copyfrom Bio import SeqIOdef find_gene_entry (features, locus_tag ): for f in features: if f.type == 'gene' : if f.qualifiers['locus_tag' ][0 ] == locus_tag: return f print locus_tag raise ValueError coding = ['CDS' , 'tRNA' , 'rRNA' ] def go (): seqid = 0 fasta_fh = open ("seq.fsa" , "w" ) feature_fh = open ("seq.tbl" , "w" ) allowed_tags = ['locus_tag' , 'gene' , 'product' , 'pseudo' , 'protein_id' , 'gene_desc' , 'old_locus_tag' ] records = list (SeqIO.parse(sys.stdin, "genbank" )) for rec in records: for f in rec.features: if f.type in coding and 'gene' in f.qualifiers: print f.qualifiers['locus_tag' ][0 ] f2 = find_gene_entry(rec.features, f.qualifiers['locus_tag' ][0 ]) f2.qualifiers['gene' ] = f.qualifiers['gene' ] del f.qualifiers['gene' ] for rec in records: seqid += 1 if len (rec) <= 200 : print >>sys.stderr, "skipping small contig %s" % (rec.id ,) continue circular = rec.annotations.get('molecule' , 'linear' ) rec.description = "[organism=%s] [strain=%s] [topology=%s] [molecule=DNA] [tech=wgs] [gcode=11]" % (sys.argv[1 ], sys.argv[2 ], circular) SeqIO.write([rec], fasta_fh, "fasta" ) print >>feature_fh, ">Feature %s" % (rec.name,) for f in rec.features: if f.strand == 1 : print >>feature_fh, "%d\t%d\t%s" % (f.location.nofuzzy_start + 1 , f.location.nofuzzy_end, f.type ) else : print >>feature_fh, "%d\t%d\t%s" % (f.location.nofuzzy_end, f.location.nofuzzy_start + 1 , f.type ) if f.type == 'CDS' and 'product' not in f.qualifiers: f.qualifiers['product' ] = ['hypothetical protein' ] if f.type == 'CDS' : f.qualifiers['protein_id' ] = ["gnl|ProjectID_%s|%s" % (sys.argv[3 ], f.qualifiers['locus_tag' ][0 ])] if f.type in coding: del f.qualifiers['locus_tag' ] for key, vals in f.qualifiers.iteritems(): my_allowed_tags = copy(allowed_tags) if 'pseudo' in f.qualifiers: my_allowed_tags.append('note' ) if key not in my_allowed_tags: continue for v in vals: if len (v) or key == 'pseudo' : print >>feature_fh, "\t\t\t%s\t%s" % (key, v) go()
+KEGG网站 提供了KEGG信息查询入口,包括KEGG Pathway 中查询KEGG Pathway ID(ko00000)的详细信息。
+2.2.2. KEGG Database KEGG 是一个集成的数据库资源,由如下所示的 16 个数据库组成。它们大致分为系统信息、基因组信息、化学信息和健康信息,它们通过网页的颜色编码来区分。
+
+KEGG Database
+
+
+Category
+Database
+Content
+Color
+
+
+
+
+Systems information
+KEGG PATHWAY
+KEGG pathway maps
+kegg3green
+
+
+KEGG BRITE
+BRITE hierarchies and tables
+
+
+KEGG MODULE
+KEGG modules and reaction modules
+
+
+Genomic information
+KEGG ORTHOLOGY (KO)
+Functional orthologs
+kegg4 yellow
+
+
+KEGG GENES
+Genes and proteins
+kegg1red
+
+
+KEGG GENOME
+KEGG organisms and viruses
+
+
+Chemical information
+KEGG COMPOUND
+Metabolites and other chemical substances
+kegg2blue
+
+
+KEGG GLYCAN
+Glycans
+
+
+KEGG REACTIONKEGG RCLASS
+Biochemical reactionsReaction class
+
+
+KEGG ENZYME
+Enzyme nomenclature
+
+
+Health information
+KEGG NETWORK
+Disease-related network variations
+kegg5purle
+
+
+KEGG VARIANT
+Human gene variants
+
+
+KEGG DISEASE
+Human diseases
+
+
+KEGG DRUGKEGG DGROUP
+DrugsDrug groups
+
+
+
-3.1.3. 使用
-命令python2 genbank_to_tbl.py sample mc_01 ncbi_id < sample.gb
-
-参数
-
-
-
-sample:样品名称,organism name
-mc_01:品种编号,strain ID
-ncbi_id:NCBI项目ID
-< sample.gb:输入genbank格式文件
-
-四个参数都是必需参数。
-
-输出
+2.2.3. KEGG PATHWAY Database KEGG PATHWAY Database是KEGG资源的核心,是一组手工绘制的KEGG通路图,代表细胞和生物体的新陈代谢和各种其他功能的实验知识。每个通路图都包含一个分子相互作用和反应网络,旨在将基因组中的基因与通路中的基因产物(主要是蛋白质)联系起来。
+3. 富集分析程序 目前有许多程序可以用于富集分析。包括NASQAR,PlantRegMap,MSigDB,Broad Institute,WebGestalt,Enrichr,GeneSCF,DAVID,Metascape,AmiGO 2,GREAT,FunRich,FuncAssociate,InterMine,ToppGene Suite,QuSAGE,Blast2GO,g:Profiler。
+可以根据需要分析的物种类别和数据库更新选择分析平台,根据需要选择先验基因集。
+大部分富集分析程序都只支持已有数据库的物种的富集分析,如果是不在支持物种列表里的物种,可以用富集分析的R包做富集分析。
+下面介绍几种常见的。
+3.1. NASQAR NASQAR (Nucleic Acid SeQuence Analysis Resource)是一个开源的网页平台,可以用R包clusterProfiler做GSEA分析,支持Org.Db数据库 的所有物种的GO Term和KEGG Pathway富集分析。
+3.2. PlantRegMap PlantRegMap ,支持165种植物的GO注释和GO富集分析。
+3.3. Enrichr Enrichr是针对哺乳动物的基因富集分析工具。可以通过API使用,并提供可视化结果。
+3.4. GeneSCF GeneSCF支持多个物种,实时的功能富集分析工具。不需要额外更新数据库,GeneSCF是实时最新的数据库,并且支持多物种富集分析。结果以文本呈现。
+3.5. DAVID DAVID是做注释,富集和可视化的整合的数据库。但注释数据库自从2016年10月就没有更新。
+3.6. Blast2GO Blast2GO可以做组学数据的功能注释和GSEA分析。
+3.7. KOBAS-i 3.7.1. KOBAS-i简介
+KOBAS是中科院和北大联合开发的做功能注释和GSEA分析的工具。
+目前已经发表了第三个版本,KOBAS-intelligence(KOBAS-i),KOBAS-i引入了之前发布的基于机器学习的新方法CGPS,并扩展了可视化功能,支持的物种增加到5944个。
+KOBAS包含注释模块和富集模块。
-seq.fsa:基因组序列
-seq.tbl:tbl格式文件
+注释模块接受基因列表作为输入,包括 ID 或序列,并根据通路、疾病和GO信息等多个数据库为每个基因生成注释。
+富集模块给出了关于哪些通路和 GO 术语与输入基因列表或表达在统计上显着相关的结果。有两种不同的富集分析可用,命名为基因列表富集和 exp-data 富集。
-notes
+KOBAS-i有网页版,也有本地版。
+
+3.7.2. KOBAS-i网页版【推荐】 给了两个可用的网址:http://kobas.cbi.pku.edu.cn/,http://bioinfo.org/kobas。 KOBAS-i 。
+3.7.2.1. 注释(annotation)和富集(Enrichment)的步骤
+输入 注释只有三个输入项:
-seq.tbl结果中包含genbank注释的gene,CDS,exon,intron,tRNA,rRNA,pseudo genes等结果。
-需要在输入的genbank文件中包含locus_tag的值(可以用基因名称),否则报错。
+选择物种。目前支持5944个物种。
+选择输入基因集数据类型。支持核苷酸或者蛋白质的fasta序列,blast的Tabular输出结果,Ensembl Gene ID,Entrez Gene ID,UniProtKB AC,Gene Symbol。
+输入基因集。可以粘贴文本,也可以上传文件。
-3.2. Genbank2Sequin.py 3.2.1. 简介 Genbank2Sequin.py脚本用于批量转换genbank格式的gene和CDS注释为tbl格式。
-3.2.2. 脚本 下载地址:https://github.com/Van-Doorslaer/Genbank2sequin/blob/master/Genbank2Sequin.py
-from Bio import SeqIOimport re, glob, osfor f in glob.glob("*.gb" ): ID = f.split("." )[0 ] for r in SeqIO.parse(f,"genbank" ): with open (ID+'.fsa' , 'w' ) as fasta, open (ID+".tbl" , 'w' ) as table: print >> fasta, ">%s [organism=Human papillomavirus %s]\n%s" %(ID, ID, r.seq) print >>table, ">Feature " +ID for (index, feature) in enumerate (r.features): if feature.type == 'CDS' : m=re.search('\[(\d*)\:(\d*)\]' ,str (feature.location)) if m: print >>table, "%s\t%s\tgene\n\t\t\tgene\t%s" %(int (m.groups()[0 ])+1 , m.groups()[1 ],feature.qualifiers['note' ][0 ]) print >>table, "%s\t%s\tCDS\n\t\t\tproduct\t%s\n\t\t\tgene\t%s\n\t\t\tcodon_start\t1" %(int (m.groups()[0 ])+1 , m.groups()[1 ], feature.qualifiers['note' ][0 ], feature.qualifiers['note' ][0 ])
-
-3.2.3. 使用
-命令python2 Genbank2Sequin.py
-
+富集除了需要上面三个输入项外,还需要选择用哪写先验基因集的数据库来做富集分析。包括PATHWAY,DISEASE,GO。其中KEGG Pathway是所有物种都可以用,其他的只有部份物种可以选。
-运行后会自动搜索当前文件夹下的所有.gb后缀文件,然后把gene和CDS的注释转换为.tbl文件。
+PATHWAY。有四个选项,KEGG Pathway(K),Reactome(R),BioCyc(B),PANTHER(p)。
+DISEASE。有三个选项,OMIM(o),KEGG Disease(k),NHGRI GWAS Catalog(N)
+GO(G)。 此外还有高级选项,可以选择统计学方法和纠错方法。
+然后点击Run,就可以等待运行结果了。
-输出
+结果 运行结束后,点击右上角的Download total terms就可以下载到结果。 富集分析还可以点击Visualization得到结果的可视化图。
-
-
-notes
+3.8. GOEAST 在线工具GOEAST
+4. 富集分析的R包 如果是模式物种,或者已有数据库的物种,推荐在线网站PlantRegMap 和KOBAS-i 做GO和KEGG的富集分析。
+常见的有topGO,clusterProfiler,有一些进行富集分析的程序使用了这些包。
+4.1. topGO 用topGO做富集分析的具体教程可以查看博文blog_topGO 。
+topGO是一个R包,用于半自动的GO terms的富集分析。topGO的结果可以展示为有向无环图。
+
+
+Figure 2. DAG图示例
from wikipedia:directed acyclic graph
+注:对每个GO节点进行富集,在图中用方框表示显著度最高的10个节点,图中还包含其各层对应关系。每个方框(或椭圆)内给出了该GO节点的内容描述和富集显著性值。不同颜色代表不同的富集显著性,颜色越深,显著性越高。
+4.2. clusterProfiler clusterProfiler包的具体使用参考博文blog_clusterProfiler 。
+4.2.1. clusterProfiler clusterProfiler是一个R包,是一个解释组学数据的通用富集工具,支持Gene Ontology(GO), Kyoto Encyclopedia of Genes and Genomes(KEGG), Disease Ontology(DO), Disease Gene Network(DisGeNET), Molecular Signatures Database(MSigDb), wikiPathways和许多其他的基因集的功能注释和富集分析,以及富集分析结果的可视化。2021年07月发布了clusterProfiler 4.0版本。
+4.2.2. clusterProfiler支持的基因集(gene sets)
+Gene Ontology(GO)
+Kyoto Encyclopedia of Genes and Genomes(KEGG)
+Disease Ontology(DO)
+Disease Gene Network(DisGeNET)
+Molecular Signatures Database(MSigDb)
+wikiPathways
-
-*.tbl结果中只包含genbank注释的gene,CDS结果。
-需要在输入的genbank文件中包含note的值(可以用基因名称),否则报错。
-可批量操作多个gb文件。
-
-4. reference
-GB2sequin paper:https://www.sciencedirect.com/science/article/pii/S0888754318301897?via%3Dihub
-GB2sequin:https://chlorobox.mpimp-golm.mpg.de/GenBank2Sequin.html
-genbank_to_tbl.py:https://gist.github.com/nickloman/2660685
-Genbank2Sequin.py:https://github.com/Van-Doorslaer/Genbank2sequin/blob/master/Genbank2Sequin.py
-genbank格式:https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html
-tbl格式:https://www.ncbi.nlm.nih.gov/genbank/feature_table/
+4.2.3. clusterProfiler功能 —— enrichment analysis
+Over Representation Analysis, ORA ORA是用于判断已知的生物功能或过程在实验产生的基因列表(例如差异表达基因列表, differentially expressed genes, DEGs)中是否过表达(over-represented=enriched)的常用方法。
+Gene Set Enrichment Analysis, GSEA
+Leading edge analysis and core enriched genes
+
+5. references
+GSEA wiki:https://en.wikipedia.org/wiki/Gene_set_enrichment_analysis
+paper-Ten Years of Pathway Analysis: Current Approaches and Outstanding Challenges:https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002375
+paper-Progress in Gene Functional Enrichment Analysis:https://www.sciengine.com/SSV/article?doi=10.1360/N052016-00139&scroll=
+enrichment analysis:https://www.jianshu.com/p/be8fe1318850
+enrichment analysis methods:https://www.jianshu.com/p/042b888d5520
+enrichment analysis methods:https://blog.csdn.net/fjsd155/article/details/103064166
+GOEAST introduction:https://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&mid=2247484456&idx=1&sn=bbcd0b5d10ba9312d92b7baae777ccde&scene=21#wechat_redirect
+topGO tutorial:https://bioconductor.org/packages/release/bioc/vignettes/topGO/inst/doc/topGO.pdf
+topGO blog:https://datacatz.wordpress.com/2018/01/19/gene-set-enrichment-analysis-with-topgo-part-1/
+R topGO:https://www.codenong.com/cs105162324/
+enrichment:https://www.jianshu.com/p/47b5ea646932
+GO explanation:https://www.jianshu.com/p/7177c372243f
+GO overview:http://geneontology.org/docs/ontology-documentation/
+KEGG:https://en.wikipedia.org/wiki/KEGG
+clusterProfiler github:https://github.com/YuLab-SMU/clusterProfiler
+universal enrichment analysis using clusterProfiler:http://yulab-smu.top/biomedical-knowledge-mining-book/universal-api.html
+clusterProfiler paper:https://www.cell.com/the-innovation/fulltext/S2666-6758(21)00066-7?_returnURL=https%3A%2F%2Flinkinghub.elsevier.com%2Fretrieve%2Fpii%2FS2666675821000667%3Fshowall%3Dtrue
@@ -3754,106 +3521,24 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
bioinfo
- fileformat
+ enrichment
- GenBank
- tbl
- organellar genome
- genome annotation
- genome submit
- Sequin
- tbl2asn
- GB2sequin
- gbf2tbl.pl
- genbank_to_tbl.py
- Genbank2Sequin.py
+ gene set enrichment analysis
+ GSEA
+ topGO
+ enrichment analysis
+ over representation analysis
+ ORA
+ clusterProfiler
+ KOBAS-i
+ GOEAST
- 软件mitogenomics用于线粒体基因组相关格式转换
- /2022/06/30/bioinfo_fileformat_mitogenomics/
-
-
-mitogenomics简介
-无意中发现的一个软件。
-基于已有线粒体基因组序列和基因序列,通过比对获取注释tbl格式文件,所以只适用于线粒体的基因。
-包括两个转化格式的脚本mitos2fasta.py,aln2tbl.py(和python2版本)。
-
-软件安装
-git下载git clone https://github.com/IMEDEA/mitogenomics
-
-脚本
-
-
-
-
-依赖
-
-
-python3的Biopython和argparse模块。
-可以用pip安装pip install biopython argparse
。
-
-软件mitogenomics 脚本mitos2fasta.py python 3 版本,用于转化基因序列为比对到线粒体基因组序列的格式。
-
-命令mitos2fasta.py -m mito.fa -g genes.fa -c Y > assembly.fa
-
-输入输出
-
-
-
--m mito.fa:线粒体基因组序列,fasta格式。
--g genes.fa:基因序列,fasta格式。可以是软件MITOS2的输出。
--c Y:是否简化基因名字(genes.fa文件的序列ID)并适应aln2tbl.py,Y/N。
-assembly.fa:输出保存到assembly.fa,即将线粒体基因组序列和基因序列比对好的序列格式,基因没比对的位置用-代替。
-
-aln2tbl.py python 3 版本,用于转化比对到线粒体基因组序列的基因序列(即mitos2fasta.py的输出)为tbl格式。
-aln2tbl-legacy.py是aln2tbl.py的python2版本,功能一样。
-
-命令aln2tbl.py -f assembly.fa -g genes.txt -c 1 > sample.tbl
-
-输入输出
-
-
-
--f assembly.fa:输入文件是线粒体基因组和基因序列的比对文件,mitos2fasta.py的输出。
--g genes.txt:保存了基因名称的文本文件,单行,多个基因名称间逗号分隔。
--c number_genetic_code:用数字指定线粒体编码方式,植物线粒体是一般的编码方式 (1)。此外还有脊椎动物vertebrate (2), 酵母菌yeast (3), 霉菌mold, 原生动物protozoan and 腔肠动物coelenterate (4), 无脊椎动物invertebrate (5), 棘皮动物echinoderm and 扁形虫flatworm (9), 海鞘类ascidian (13)。
-
-sample.tbl:输出到tbl格式文件。
-
-
-
-references
-https://github.com/IMEDEA/mitogenomics
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bioinfo
- fileformat
- mitogenome
-
-
- mitogenome
- organelle
- tbl
- mitogenomics
- aln2tbl.py
- aln2tbl-legacy.py
- mitos2fasta.py
-
-
-
- 分析基因家族扩张和收缩 —— CAFE5
- /2021/10/29/bioinfo_gene.family_CAFE5/
-
+ 分析基因家族扩张和收缩 —— CAFE5
+ /2021/10/29/bioinfo_gene.family_CAFE5/
+
1. CAFE CAFE(Computational Analysis of gene Family Evolution)是一款以解释系统发育历史的方式分析基因家族大小变化的软件,这种分析常被称为基因家族收缩扩张(Gene family expansions and contractions)分析。
CAFE使用出生和死亡过程来模拟用户指定的系统发育树中的基因获得和丢失,可计算由父节点到子节点的基因家族大小转移率,也可推断祖先物种的基因家族大小,在该模型下生成的基因家族规模分布可以为评估观察到的类群之间家族规模差异的显著性提供基础。
@@ -3957,303 +3642,164 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 3s软件
- /2022/09/22/bioinfo_geneflow_3s/
-
+ 分子生物学实验
+ /2021/03/27/bio_experiment/
+
-1. 检测基因流的软件
-基于MCMC算法的:IM,IMA
-基于似然法的:除了3s外的其他软件只能分析两条序列
-Huristic method:ABBA(基于D统计量的计算,无数学模型,无法估计),Hyde
-
-2. 3s软件简介 3s,3 species的简称。
-软件是杨子恒和朱天琪团队开发,基于C语言的,通过计算似然率来检测两个近缘物种/群体间基因流的软件。推荐添加一个外类群,所以称为三个物种(3 species),适用于基因组数据。
-
-3s简介
+
+常用PCR参数
+PCR Easy tag 体系(20μl)
-3s利用似然率来推断两个物种/群体间的基因流方向和强度
+ddH2O 12.2μl
+10Xbuffer 2.0μl
+dNTP 1.6μl
+Easy tag酶 0.2μl
+DNA 2μl
+Primer-F 1μl
+Primer-R 1μl
-3s输入
+PCR常用程序
-输入:基因组或其他测序序列phylip文件
-输出:基因流方向和强度
+预热 94℃ 10min
-
-3s优势和不足
-
+以下步骤循环28-34次
-随着数据量线性增加运算时间,运算快,适合基因组数据。
-一次只能检测三个物种/群体,无法建立系统发育网。
+解螺旋94℃ 0.5-1min
+退火53℃ 30-45seconds
+72℃ 1min15seconds
-3. 开发历史
-3s软件主页
-
+循环结束继续以下步骤
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bio
+ experiment
+
+
+ experiment
+ molecular experiment
+ PCR
+
+
+
+ 基因流推断 —— Dsuite
+ /2022/04/10/bioinfo_geneflow_Dsuite/
+
+
+1. Dsuite
+Dsuite简介
+Dsuite是通过计算Patterson’s D统计量(即ABBA统计量)和f4等统计量来评估种群间或近缘种间基因流的基于C语言的软件。
+
+
+Dsuite 原理
+D值(即ABBA统计量)和f4-ratio统计可以表示为适用于四个分类群的双等位基因SNP:P1,P2,P3,O,拓扑是 (((P1,P2),P3),O)。
+其中外类群O携带祖先等位基因A,衍生等位基因用B表示。BBAA,ABBA,BABA分别代表四个分类群携带等位的三种模式。
+在没有基因流的零假设下,由于具有相同频率的不完全谱系分类,预计P3与P1或P2共享衍生等位基因B的两种模式ABBA和BABA的频率相等,如果ABBA和BABA的频率有显著差异则代表在P3和P1或P2间存在基因渐渗。
+D=(nABBA-nBABA)/(nABBA+nBABA);在外群对于祖先等位基因A是固定的(外群中B的频率为0)假设下,D统计量是等位基因模式计数的归一化差异。
+如果外群中衍生等位基因B不为0,则Dsuite的D值是Patterson’s D,适用于无根的四分类群树。
+
+
+Dsuite输入输出
+输入:基因组snp的vcf格式文件,居群树文件(可选optional)
+输出:D值统计,f4-ratio统计,f-branch统计,f-branch树矩阵热图
+
+
+Dsuite优势和不足
+Dsuite的优势是运行非常快(时间以小时计算)
+不足是Dsuite分析结果不包含基因流的方向
+
+
+Dsuite适用范围
+Dsuite适用于基因组学大数据和多样本(超过十个)数据
+适用于居群间或物种间的基因流推测
+即使每个群体只有一个个体也可以推测基因流
+还可以计算pool-seq数据的基因流
+相较其他计算D值软件,Dsuite还同时可以计算f4-ratio和f-branch,以及滑窗统计f相关值。
+
+
+2. Dsuite install
+安装Dsuite主程序 Dsuite是C编写的,需要编译;需要GCC(>=4.9.0)和zlib压缩库。 编译后可执行文件在Dsuite/Build/目录下,可以加到环境变量中或使用绝对路径。
+
+git clone https://github.com/millanek/Dsuite.git cd Dsuite make
+
-2012年,朱天琪和杨子恒开发的检测基因流的模型SIM3s,发布了软件3s.v2.1版本,包含6个参数。
+安装python3 Fbranch绘图脚本【可选但推荐】 如果要绘制f-branch计算结果,则需要安装这个绘图脚本。注意--prefix=
后没有任何内容。
+
+cd utils python3 setup.py install --user --prefix=
+
+3. Dsuite分析 3.1. 输入文件
+sample.snp.vcf.gz
+基因组尺度的snp文件,vcf格式,可用bgzip压缩
+
+
+sets.txt
+包括两列,tab分隔;第一列个体名,第二列物种名/居群名。
+对于Dtrios模块,至少指定一个个体为外类群,外类群个体的第二列写Outgroup,可有多个。
+要注意第二列物种名不能包含短横杠-和句点.字符,否则Dsuite Dtrios虽然不会报错,但Dsuite Fbranch模块运行报错解析不了树文件(ERROR: The tree string could not be parsed correctly)。
+
+
+species.newick【optional】
+Newick格式的居群/物种树文件,物种名称与sets.txt对应。
+外类群名称替换成Outgroup,与sets.txt对应。
+树文件必须定根在Outgroup,否则dtools.py报错树文件和franch.out的拓扑不一致。
+去掉支持率;否则Dsuite Fbranch模块运行报错解析不了树文件,ERROR: The tree string could not be parsed correctly。
+枝长最好也去掉,不去枝长也不会被Dsuite用到,还可能增加报错风险。
+这个文件对于Dtrios模块是可选项,但建议加上好画fbranch的图。
+
+
+
+3.2. Dtrios模块 Dsuite Dtrios
用于计算所有三物种组合的D和f4-ratio统计量
+
+用法Dsuite Dtrios sample.snp.vcf.gz sets.txt -t species.newick -o sample
+
+输入和常用参数
+
-文章发表在MBE上:https://academic.oup.com/mbe/article/29/10/3131/1029349
+sample.snp.vcf.gz:变异文件
+sets.txt:分组文件
+-t species.newick:指定物种树文件
+-o sample:指定输出文件前缀,默认是sets
+-p 5:如果样品中包含pool-seq数据,-p用于设置最小深度,设置后从等位基因深度估计群体的等位基因频率。
+-c:不输出sample_combine_stderr.txt和sample_combine.txt;这两个文件用作DtriosCombine的输入,如果不需要可加上-c不输出这两个文件。
-2017年,提出了Introgression模型,发布了版本3s.v3.1版本,包含9个参数。
+运行耗时
-2020年,据作者朱天琪说开发了新的more general migration model模型,包含15个参数,2022.09还未发表。
+结果
-假设所有物种间都可能有基因,1-2间,2-3间,1-3间,3-5之间都可能存在基因流。
-这个模型参数太多,最好根据先验知识尽可能设置一些无基因流的群体间参数为0,再进行计算更准确。
-如果实在没有先验知识,那先打开所有可能基因流,运行一遍,再把基因流强度很低的位置关闭,再运行一遍获取更准确结果。
-2020年09月据说代码已有,2022.09说还未发表,可以关注着。
+sample_BBAA.txt:不参考-t的拓扑,尝试推断树拓扑的统计量。对每个三重奏进行排序,假设正确的树是 BBAA 模式比不一致的 ABBA和BABA 模式更常见;ABBA和BABA 模式被认为是由不完整的谱系分类或基因渗入引起的。
+sample_Dmin.txt:不管关于树拓扑的任何假设,不尝试推断树拓扑,而是输出每个三物种组合的最小D值统计量。三物种组合的排序是为了使nABBA和nBABA之间的差异最小。
+sample_tree.txt:如果-t指定物种树则输出此项;与指定树一致的排序的D和f4-ratio统计量。这个文件是后续f-branch分析的输入文件。
+sample.txt
+sample_combine_stderr.txt和sample_combine.txt:用作DtriosCombine的输入,如果不需要可删除
-4. 3s软件原理 4.1. 模型基础
-Wright-Fisher模型:溯祖模型的逆向过程
-多物种溯祖模型
+
+notes
-不区分物种间和群体间,这里的物种=群体
-无法跨物种边界溯祖
-
-4.2. 3s模型的参数定义
-三个物种:两个近缘种(1和2)和一个外类群(3)
-序列数据由中性位点组成
-θ1 =4N1 μ,θ2 =4N2 μ,θ4 =4N4 μ,θ5 =4N5 μ是物种1,2,4,5的群体大小参数。这里没有物种3是因为假设物种3没有基因流。
-τ0, τ1是两个物种的分化时间
-迁移率(migration rate)Mij =Nj mij 。定义是在真实世界,从群体i向群体j的迁移个体的数量,其中Nj 代表群体j的群体大小,mij 代表迁移比例。
-
-
-
-Figure 1. 3个物种的基因流模型参数
图源:https://academic.oup.com/sysbio/article/66/3/379/2670069?login=false
-4.3. SIM3s模型
-通过假设两个参数相等,θ1 =θ2 =θ;M12 =M21 =M
-结果是共有6个参数需要评估:Θ={τ0,τ1,θ4,θ5,θ,M}
-这个模型是2012年发表的老版本模型SIM3s(symmetric IM model for three species)
-
-4.4. 3s模型背后的计算 基于最大似然法估计参数:先算似然函数,对参数做最优,似然值最大的对应参数即为估计结果。
-
-每个位点/序列计算一个似然值 ,似然值代表的是给定参数后基因树的概率。
-似然值的计算是通过马尔科夫链来描述和实现的,三个样本的初始状态是123。
-在比对好的三个样本的序列上对不同模式进行碱基计数。三个样本的碱基一致为同一种模式,12一致3不一致为一种模式,等等。
-3s软件的突变模型使用JC69模型,即各种碱基的任意方向和类型的替换速率是相等的,适合近缘物种/群体。
-通过似然比检验(Likelihood Ratio Test,LRT)来判断有无基因流:当按照95%显著临界值,2Δℓ>5.99时,则认为检验是显著的,即存在基因流,基因流的大小即最大似然估计值。
-
-5. 3s的优势
-3s的计算基于极大似然法,极大似然法的优势在于计算量随着样本数是线性增加的,而比如贝叶斯,MCMC算法则是指数增加。
-使用的segment/locus数量越多,检验功效(指有基因流存在情况下检出率)越好,所以适合检验基因组这种大数据。
-假阳性很低(<5%可接受)
-基因流的方向和强度都可以被估计。
-
-6. 3s模型假设和数据准备 6.1. 3s模型假设和数据选择
-使用中性位点避免重组的影响。
-3s假设segment之间是自由重组的,segment内部是不存在重组的。所以建议在基因组上取样的序列不要离得太近(建议50kb,至少大于10kb),序列长度不要太长(50bp-1kb)。
-使用的segment/locus数量越多,检验功效(指有基因流存在情况下检出率)越好,所以适合检验基因组这种大数据。
-
-6.2. 常用的数据准备方式
-适用于组装好的基因组数据
-
-
-将基因组切分为1kb的片段
-每隔50kb取1kb的片段
-将含有基因和基因上下游10kb的片段去除(基因通常被认为是非中性的)
-
-
-适用于获取的别人的partition数据
-
-
-去除间隔<10kb的partition
-删除序列长度<50bp或者>1000bp的partition
-
-
-适用于微生物等基因组非常小的样品
-
-
-有许多微生物样品的基因组很小,能取的片段数量有限,影响分析结果。
-可以通过非独立重抽样增加片段数量。
-每个物种测序多个个体,共同作为一个数据源,以增加片段数量。比如ABC三个物种都测四个个体,A1B1C1,A2B2C2,A3B3C3,A4B4C4。
-
-7. 3s软件使用 7.1. 3s软件安装 wget http://abacus.gene.ucl.ac.uk/software/3s.v3.1.tgz # 下载软件,只有6.74MB tar -zxf 3s.v3.1.tgz #解压缩和解包 cd 3s.v3.1 #进入文件夹 gcc -O3 -o 3s 3s.c tools.c lfun3s.c -lm #编译
-
-7.2. 输入文件
-三个样本的碱基序列文件
-
-
-phylip格式
-比对好的(aligned)
-
-
-3s.ctl:参数文件基本使用默认即可,不需要变动。
-
-seed = -1 #随机数种子,-1使用时间种子 outfile = path/to/out #存储运行结果的路径 seqfile = sample_align.phylip #比对好的phylip格式的序列 Imapfile = mapfile.txt #map文件,即下面准备的输入文件;如果没有map文件,默认出现的前3个物种为物种1,2,3。 ratefile = ChenLi3s.Rate.txt # 这行作者建议删除,因为使用的JC69模型,无法改变不同碱基的替换率。 nloci = 1000 # 基因位点的数量。如果小于实际位点数,只计算前1000个;如果大于实际位点数,则报错。 npoints = 16 # 做数值积分的格点数,越大精度越高,但速度慢很多。用8,16,32;作者建议16,或者尝试32。 getSE = 0 # 通常设置为0,不算方差;如果设置成1,计算方差,运算速度大幅下降,但总体上来说都很快。算不算都行。 Small_Diff = 0.5e-9 #最大似然估计的时候,似然值到多小就停止计算,建议0.5e-9,在0.5e-8到1e-9范围内调整。 simmodel = 0 #0代表不用对称模型(symmetric models),1代表使用对称模型。对称模型是指所有群体大小参数都一样,一般不用。 models = 0 2 3 #计算的模型,3代表introgression模型。
-
-
-mapfile
-
-
-用于指定三个物种分别是1,2,3的文本文件。
-每行两列,空格隔开。第一列物种名,第二列1,2,3。保存mapfile.txt
-
-
-
-7.3. 3s软件运行 运行命令3s 3s.ctl
即可
-7.4. 运行结果
-结果示例
-***Model 0 (M0)*** lnL = -342929.817009 MLEs theta4 theta5 tau0 tau1 theta1 theta2 theta3 0.002213 0.000337 0.000866 0.000431 0.001156 0.003993 0.000502 ***Model 2*** lnL = -342888.249022 2DlnL = +83.135973 MLEs theta4 theta5 tau0 tau1 theta1 theta2 theta3 M12 0.002248 0.000076 0.000853 0.000759 0.000987 0.001408 0.000500 0.934564
-
-结果的解释
-
-
-
-Model 0是没有基因流的情况下估计得到的参数,theta是θ,tau是τ。
-Model 2是存在基因流的情况下估计得到的参数,M12代表的是从物种1到物种2的基因流,强度是0.934564,代表平均每一代有0.934564个个体从物种1迁移到物种2,是很强的基因流。
-
-7.5. 结果有效性 7.5.1. 如何保证收敛
-同一数据,运行多次保证结果一致,且2dlnL>0。当多次结果不一致时,可以考虑调小small_diff,不行再调大。
-遇到收敛困难时,可以先在M0(即无基因流的模式)下分析,把M0的MLE作为其他模型的初值。
-如果估计值触碰到上下界且明显不合理,需多次分析;可以尝试通过修改in.3s文件将初值设置在更合理的地方。
-将不可能出现迁移的方向迁移率设置为0,减少参数个数。
-
-7.5.2. 如何选择正确模型
-如估计的树接近星状树,需调整物种树再次分析。这个调整物种树就是调整mapfile.txt文件,使得不同物种成为外类群。如果调整成任意物种树都是星状树,则可以作为辐射进化(即τ0,τ1时间很短)的证据。
-如果迁移率Mij 触碰下界可将该迁移率固定为0后重新分析,如两次分析-lnL相差在1.92内,则认为参数少的模型更加准确。
-多次分析后找出最优模型
-
-8. reference 这篇笔记主要是参考“朱天琪老师在中国科学院微生物研究所真菌学国家重点实验室主办的2020种群遗传学与基因组学高级培训班(第二期)和2022组学驱动的进化生态高级培训班的讲座和PPT”。
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bioinfo
- gene flow
-
-
- gene flow
- hybridization
- introgressive
- 3s
- SIM3s
-
-
-
- 基因流推断 —— Dsuite
- /2022/04/10/bioinfo_geneflow_Dsuite/
-
-
-1. Dsuite
-Dsuite简介
-Dsuite是通过计算Patterson’s D统计量(即ABBA统计量)和f4等统计量来评估种群间或近缘种间基因流的基于C语言的软件。
-
-
-Dsuite 原理
-D值(即ABBA统计量)和f4-ratio统计可以表示为适用于四个分类群的双等位基因SNP:P1,P2,P3,O,拓扑是 (((P1,P2),P3),O)。
-其中外类群O携带祖先等位基因A,衍生等位基因用B表示。BBAA,ABBA,BABA分别代表四个分类群携带等位的三种模式。
-在没有基因流的零假设下,由于具有相同频率的不完全谱系分类,预计P3与P1或P2共享衍生等位基因B的两种模式ABBA和BABA的频率相等,如果ABBA和BABA的频率有显著差异则代表在P3和P1或P2间存在基因渐渗。
-D=(nABBA-nBABA)/(nABBA+nBABA);在外群对于祖先等位基因A是固定的(外群中B的频率为0)假设下,D统计量是等位基因模式计数的归一化差异。
-如果外群中衍生等位基因B不为0,则Dsuite的D值是Patterson’s D,适用于无根的四分类群树。
-
-
-Dsuite输入输出
-输入:基因组snp的vcf格式文件,居群树文件(可选optional)
-输出:D值统计,f4-ratio统计,f-branch统计,f-branch树矩阵热图
-
-
-Dsuite优势和不足
-Dsuite的优势是运行非常快(时间以小时计算)
-不足是Dsuite分析结果不包含基因流的方向
-
-
-Dsuite适用范围
-Dsuite适用于基因组学大数据和多样本(超过十个)数据
-适用于居群间或物种间的基因流推测
-即使每个群体只有一个个体也可以推测基因流
-还可以计算pool-seq数据的基因流
-相较其他计算D值软件,Dsuite还同时可以计算f4-ratio和f-branch,以及滑窗统计f相关值。
-
-
-
-2. Dsuite install
-安装Dsuite主程序 Dsuite是C编写的,需要编译;需要GCC(>=4.9.0)和zlib压缩库。 编译后可执行文件在Dsuite/Build/目录下,可以加到环境变量中或使用绝对路径。
-
-git clone https://github.com/millanek/Dsuite.git cd Dsuite make
-
-
-安装python3 Fbranch绘图脚本【可选但推荐】 如果要绘制f-branch计算结果,则需要安装这个绘图脚本。注意--prefix=
后没有任何内容。
-
-cd utils python3 setup.py install --user --prefix=
-
-3. Dsuite分析 3.1. 输入文件
-sample.snp.vcf.gz
-基因组尺度的snp文件,vcf格式,可用bgzip压缩
-
-
-sets.txt
-包括两列,tab分隔;第一列个体名,第二列物种名/居群名。
-对于Dtrios模块,至少指定一个个体为外类群,外类群个体的第二列写Outgroup,可有多个。
-要注意第二列物种名不能包含短横杠-和句点.字符,否则Dsuite Dtrios虽然不会报错,但Dsuite Fbranch模块运行报错解析不了树文件(ERROR: The tree string could not be parsed correctly)。
-
-
-species.newick【optional】
-Newick格式的居群/物种树文件,物种名称与sets.txt对应。
-外类群名称替换成Outgroup,与sets.txt对应。
-树文件必须定根在Outgroup,否则dtools.py报错树文件和franch.out的拓扑不一致。
-去掉支持率;否则Dsuite Fbranch模块运行报错解析不了树文件,ERROR: The tree string could not be parsed correctly。
-枝长最好也去掉,不去枝长也不会被Dsuite用到,还可能增加报错风险。
-这个文件对于Dtrios模块是可选项,但建议加上好画fbranch的图。
-
-
-
-3.2. Dtrios模块 Dsuite Dtrios
用于计算所有三物种组合的D和f4-ratio统计量
-
-用法Dsuite Dtrios sample.snp.vcf.gz sets.txt -t species.newick -o sample
-
-输入和常用参数
-
-
-
-sample.snp.vcf.gz:变异文件
-sets.txt:分组文件
--t species.newick:指定物种树文件
--o sample:指定输出文件前缀,默认是sets
--p 5:如果样品中包含pool-seq数据,-p用于设置最小深度,设置后从等位基因深度估计群体的等位基因频率。
--c:不输出sample_combine_stderr.txt和sample_combine.txt;这两个文件用作DtriosCombine的输入,如果不需要可加上-c不输出这两个文件。
-
-
-运行耗时
-
-
-7Mb的29个物种的snp数据花费大概3-4小时。
-
-
-结果
-
-
-sample_BBAA.txt:不参考-t的拓扑,尝试推断树拓扑的统计量。对每个三重奏进行排序,假设正确的树是 BBAA 模式比不一致的 ABBA和BABA 模式更常见;ABBA和BABA 模式被认为是由不完整的谱系分类或基因渗入引起的。
-sample_Dmin.txt:不管关于树拓扑的任何假设,不尝试推断树拓扑,而是输出每个三物种组合的最小D值统计量。三物种组合的排序是为了使nABBA和nBABA之间的差异最小。
-sample_tree.txt:如果-t指定物种树则输出此项;与指定树一致的排序的D和f4-ratio统计量。这个文件是后续f-branch分析的输入文件。
-sample.txt
-sample_combine_stderr.txt和sample_combine.txt:用作DtriosCombine的输入,如果不需要可删除
-
-
-notes
-
-
-sample_BBAA.txt,sample_Dmin.txt,sample_tree.txt三个文件结构一致,是在不同树的假设前提下(意味着三物种组合的不同排序)的统计量输出。
-三个文件包含三物种组合的D统计量,Z-score,未调整的p-value,f4-ratio,三种模式(BBAA,ABBA,BABA)的计数。
-三个文件的D统计量总是正值,因为软件对P1和P2进行排序,使得nABBA>=nBABA。
-Dtrios模块使用标准block-jackknife程序获得一个近似正态分布的标准误差,在三个文件中,计算Z-scores的公式是Z=D/std_err(D),并输出p-values。
-可以用p-values<0.05/0.01来筛选D显著大于0的三联体,当D显著大于0,代表P2与P3间有基因流。
+sample_BBAA.txt,sample_Dmin.txt,sample_tree.txt三个文件结构一致,是在不同树的假设前提下(意味着三物种组合的不同排序)的统计量输出。
+三个文件包含三物种组合的D统计量,Z-score,未调整的p-value,f4-ratio,三种模式(BBAA,ABBA,BABA)的计数。
+三个文件的D统计量总是正值,因为软件对P1和P2进行排序,使得nABBA>=nBABA。
+Dtrios模块使用标准block-jackknife程序获得一个近似正态分布的标准误差,在三个文件中,计算Z-scores的公式是Z=D/std_err(D),并输出p-values。
+可以用p-values<0.05/0.01来筛选D显著大于0的三联体,当D显著大于0,代表P2与P3间有基因流。
3.3. 计算和绘制f-branch 3.3.1. 计算f-branch值 Dsuite Fbranch
是一种启发式方法,执行f-branch计算,用于解释f4-ratio相关结果。
@@ -4311,8 +3857,8 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
gene flow
hybridization
- introgressive
Dsuite
+ introgressive
@@ -4719,145 +4265,128 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 基因流及其推断
- /2022/04/10/bioinfo_geneflow_intro/
-
+ 转换GenBank文件为tbl格式,为提交注释做准备
+ /2022/06/16/bioinfo_fileformat_gb2tbl/
+
-1. 基因流(gene flow)/杂交(hybridization)/渐渗(introgressive) 基因流,杂交和渐渗通常一起讨论,有些情况下甚至三者在说同一件事。从定义判断,基因流通常发生在种内群体间,杂交则是发生在种间,渐渗是指杂交加回交产生的一种现象。 可以这样理解,杂交和渐渗都是基因流的具体结果。
-
-基因流(gene flow)
-
-
-基因流是指遗传物质在不同群体间的流动。
-造成基因流动的原因可能是个体或配子(例如花粉)在群体间的迁徙,或者不同群体间个体的交配等。
-基因流可能发生在同一物种的不同群体间,也可能发生在不同物种间。
+1. 简介
+GenBank格式常常出现在细胞器基因组的注释软件的结果中,但上传细胞器注释到公共数据库(eg NCBI)需要tbl格式文件。
+这篇文章介绍了几种把GenBank格式文件转换成tbl格式的方法。包括在线工具GB2sequin(此工具还包含验证和运行tbl2asn功能,可用于准备上传NCBI的注释文件),以及两个python2写的转换脚本。
-
-杂交(hybridization)
+1.1. GenBank格式 GenBank是美国国立卫生研究院维护的基因序列数据库,数据库中用gb格式文件(后缀.gb,.gbk)记录基因注释信息。
+GenBank文件格式标准参考:https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html
+1.2. tbl格式(for Sequin) 用于提交基因注释到GenBank的一种tab分隔的五栏的特征表(feature table)文件格式(后缀.tbl)。
+tbl文件格式标准参考:https://www.ncbi.nlm.nih.gov/genbank/feature_table/
+2. GB2sequin在线工具【推荐】 2.1. 简介 GB2sequin是用于转换GenBank格式文件为NCBI提交格式Sequin(包括tbl文件和sqn文件)的在线工具,包含验证GenBank注释的功能和运行tbl2asn的功能。
+网址是:
+https://chlorobox.mpimp-golm.mpg.de/GenBank2Sequin.html
+2.2. 优势
+通过网页在线转换,方便快捷。
+自动对注释进行验证,并生成错误报告,可根据错误报告修正注释。
+支持在输入中加入作者信息的template等文件。
+自动运行tbl2asn,生成sqn文件,方便提交tbl文件到NCBI。
+自动生成标准的GenBank格式文件,去除冗余。
-
-杂交指不同物种间通过有性生殖实现配子融合形成下一代的过程。
+2.3. 使用步骤
+上传GenBank格式文件,要在文件末包含注释的序列,否则运行结果空白。
+【推荐】上传Author Submission Template。可以在https://submit.ncbi.nlm.nih.gov/genbank/template/submission/上填写信息后导出template.sbt文件用于上传。
+【可选】上传Source Modifier Table,Gene Product Specification Table。
+选择分子类别”Molecule Type”,一般默认genomic DNA即可。
+选择是否是完整(complete),环状(circular)的基因。
+选择编码方式”Genetic Code”,植物样品选标准Standard。
+选择基因位置Location,包括叶绿体chloroplast,线粒体mitochondrion等。
+点击Start Conversion,等待几分钟即可得到结果,点击每项结果然后下载(大多是文本文件)。
+根据验证结果文件的错误ERROR和警告WARNING逐一修改原始GenBank文件。
+再次运行,重复以上操作,直至无错误和警告,即可使用sqn文件上传至NCBI。
+
+验证结果的含义(tbl2asn运行的部分)可以参考之前写的基因组提交的博客 :https://yanzhongsino.github.io/2022/03/22/omics_genome.submit/
+2.4. 结果 结果文件包括:
+
+FASTA:从GenBank提取的fasta文件。
+Annotation Table:tbl文件。
+tbl2asn log:tbl2asn运行的log文件。
+Sequin:sqn文件,用于提交给NCBI。
+GenBank:标准化的GenBank文件。
+Validation:验证结果文件,包括细节。
+Validation Summary:验证结果的概括。
+
+3. genbank2tbl的脚本
+只要GB2sequin可以用,就强烈推荐GB2sequin,毕竟自带验证功能和自动运行tbl2asn。
+如果GB2sequin不可用(比如要用的时候服务器宕机了之类的原因,我才不会告诉你我就是这么走运才探索了一下脚本),可用脚本进行GenBank到tbl的格式转换。
+由于都是陈年老脚本,以下脚本都是用python2写的,并且调用了biopython(提前安装biopython)。
-
-渐渗(introgressive)
+脚本gbf2tbl.pl【NCBI 官方出品】
+简介
-渐渗是指通过种间杂种与亲本物种之一的反复回交,将遗传物质从一个物种转移到另一个物种的基因库中,是一个长期的过程。
+脚本gbf2tbl.pl是NCBI官方提供的perl脚本。
+我暂时还没用过,先记在这。
-2. 推断基因流/杂交 通常在物种内检测不同地区的群体间是否存在基因流,也可以在物种间检测基因流来判断杂交/渐渗,物种间的基因流会导致系统发育树的不稳定或核质冲突等问题,所以可以推断系统发育网络来检测所有物种对的基因流。
-2.1. 推断基因流的软件
-通过计算Patterson’s D值(ABBA-BABA值)和相关统计量来判断基因流:Dsuite(2020),ADMIXTOOLS(2012),HyDe(2018),ANGSD(2011,2018),POPGENOME(2014,2019),COMP-D(2020)。
-推断系统发育网络:PhyloNetworks(2017),PhyloNet(2008,2018),TreeMix(2012),BEAST2(2017)。
-基于最大似然法:3s(2017)
-基于MCMC算法的:IM, IMA
+
+下载wget ftp://ftp.ncbi.nlm.nih.gov//toolbox/ncbi_tools/converters/scripts/gbf2tbl.pl
-有几个软件单独写了博客:
-2.1.1. Dsuite【推荐】 Dsuite blog
-
-Dsuite简介
-Dsuite是通过计算Patterson’s D统计量(即ABBA统计量)和f4等统计量来评估种群间或近缘种间基因流的基于C语言的软件。
-
-
-Dsuite 原理
-D值(即ABBA统计量)和f4-ratio统计可以表示为适用于四个分类群的双等位基因SNP:P1,P2,P3,O,拓扑是 (((P1,P2),P3),O)。
-其中外类群O携带祖先等位基因A,衍生等位基因用B表示。BBAA,ABBA,BABA分别代表四个分类群携带等位的三种模式。
-在没有基因流的零假设下,由于具有相同频率的不完全谱系分类,预计P3与P1或P2共享衍生等位基因B的两种模式ABBA和BABA的频率相等,如果ABBA和BABA的频率有显著差异则代表在P3和P1或P2间存在基因渐渗。
-D=(nABBA-nBABA)/(nABBA+nBABA);在外群对于祖先等位基因A是固定的(外群中B的频率为0)假设下,D统计量是等位基因模式计数的归一化差异。
-如果外群中衍生等位基因B不为0,则Dsuite的D值是Patterson’s D,适用于无根的四分类群树。
-
-
-Dsuite输入输出
-输入:基因组snp的vcf格式文件,居群树文件(可选optional)
-输出:D值统计,f4-ratio统计,f-branch统计,f-branch树矩阵热图
-
-
-Dsuite优势和不足
-Dsuite的优势是运行非常快(时间以小时计算)
-不足是Dsuite分析结果不包含基因流的方向
-
+3.1. 脚本genbank_to_tbl.py【推荐】 3.1.1. 简介 genbank_to_tbl.py脚本用于转换genbank格式的gene,CDS,exon,intron,tRNA,rRNA,pseudo genes等注释为tbl格式。
+3.1.2. 脚本 下载地址:https://gist.github.com/nickloman/2660685
+import sysfrom copy import copyfrom Bio import SeqIOdef find_gene_entry (features, locus_tag ): for f in features: if f.type == 'gene' : if f.qualifiers['locus_tag' ][0 ] == locus_tag: return f print locus_tag raise ValueError coding = ['CDS' , 'tRNA' , 'rRNA' ] def go (): seqid = 0 fasta_fh = open ("seq.fsa" , "w" ) feature_fh = open ("seq.tbl" , "w" ) allowed_tags = ['locus_tag' , 'gene' , 'product' , 'pseudo' , 'protein_id' , 'gene_desc' , 'old_locus_tag' ] records = list (SeqIO.parse(sys.stdin, "genbank" )) for rec in records: for f in rec.features: if f.type in coding and 'gene' in f.qualifiers: print f.qualifiers['locus_tag' ][0 ] f2 = find_gene_entry(rec.features, f.qualifiers['locus_tag' ][0 ]) f2.qualifiers['gene' ] = f.qualifiers['gene' ] del f.qualifiers['gene' ] for rec in records: seqid += 1 if len (rec) <= 200 : print >>sys.stderr, "skipping small contig %s" % (rec.id ,) continue circular = rec.annotations.get('molecule' , 'linear' ) rec.description = "[organism=%s] [strain=%s] [topology=%s] [molecule=DNA] [tech=wgs] [gcode=11]" % (sys.argv[1 ], sys.argv[2 ], circular) SeqIO.write([rec], fasta_fh, "fasta" ) print >>feature_fh, ">Feature %s" % (rec.name,) for f in rec.features: if f.strand == 1 : print >>feature_fh, "%d\t%d\t%s" % (f.location.nofuzzy_start + 1 , f.location.nofuzzy_end, f.type ) else : print >>feature_fh, "%d\t%d\t%s" % (f.location.nofuzzy_end, f.location.nofuzzy_start + 1 , f.type ) if f.type == 'CDS' and 'product' not in f.qualifiers: f.qualifiers['product' ] = ['hypothetical protein' ] if f.type == 'CDS' : f.qualifiers['protein_id' ] = ["gnl|ProjectID_%s|%s" % (sys.argv[3 ], f.qualifiers['locus_tag' ][0 ])] if f.type in coding: del f.qualifiers['locus_tag' ] for key, vals in f.qualifiers.iteritems(): my_allowed_tags = copy(allowed_tags) if 'pseudo' in f.qualifiers: my_allowed_tags.append('note' ) if key not in my_allowed_tags: continue for v in vals: if len (v) or key == 'pseudo' : print >>feature_fh, "\t\t\t%s\t%s" % (key, v) go()
+
+3.1.3. 使用
+命令python2 genbank_to_tbl.py sample mc_01 ncbi_id < sample.gb
-Dsuite适用范围
-Dsuite适用于基因组学大数据和多样本(超过十个)数据
-适用于居群间或物种间的基因流推测
-即使每个群体只有一个个体也可以推测基因流
-还可以计算pool-seq数据的基因流
-相较其他计算D值软件,Dsuite还同时可以计算f4-ratio和f-branch,以及滑窗统计f相关值。
-
+ 参数
-2.1.2. PhyloNetworks PhyloNetworks blog
-
-PhyloNetworks简介
-PhyloNetworks是通过基因树或多位点序列(SNaQ)的最大伪似然进行推断系统发育网络的一个Julia包。
-
-
-PhyloNetworks原理
-原理:通过SNaQ来实现网络推断,SNaQ通过估计4分类群子集的最大伪似然来加速运算,估计的网络不受根的影响。
-
-
-PhyloNetworks输入输出
-输入:newick格式基因树(多个基因树组成的文件)
-输出:系统发育网络,基因流方向和杂交节点贡献比例
-
-
-PhyloNetworks优势和不足
-推断系统发育网络,包括基因流的方向和强度。
-相较于其他推断系统发育网络的软件,PhyloNetworks集成了上游分析,网络估计,引导分析,下游特征进化分析,绘图等功能。
-不足是运行多样本(超过十个个体)和数据量大(超过1000个)会非常耗时(常常以星期/月计时)。
-
-
-PhyloNetworks适用范围
-PhyloNetworks适用于基因树数据
-适用于居群间或物种间的基因流推测
-适用于推断基因流方向和强度
+
+sample:样品名称,organism name
+mc_01:品种编号,strain ID
+ncbi_id:NCBI项目ID
+< sample.gb:输入genbank格式文件
-
+四个参数都是必需参数。
+
+输出
-2.1.3. TreeMix TreeMix blog
-
-TreeMix简介
-TreeMix利用等位基因频率来推断群体间分化和杂合(基因流动或基因渗入)
-
-
-TreeMix输入输出
-输入:基因组snp的vcf文件,和居群系统树(可选optional)
-输出:最佳杂交次数和系统发育网络(包含杂交方向和强度)
-
-
-TreeMix优势和不足
-TreeMix和PhyloNetworks一样,也是推断系统发育网络。
-我自己用时,有些PhyloNetworks报错无法定根和边缘错误的情况TreeMix可以找到最佳杂交次数。
-不足是比PhyloNetworks更耗时,超级耗时。
+
+seq.fsa:基因组序列
+seq.tbl:tbl格式文件
-
+
+notes
-2.1.4. 3s 3s blog
-
-3s简介
+
+seq.tbl结果中包含genbank注释的gene,CDS,exon,intron,tRNA,rRNA,pseudo genes等结果。
+需要在输入的genbank文件中包含locus_tag的值(可以用基因名称),否则报错。
+
+3.2. Genbank2Sequin.py 3.2.1. 简介 Genbank2Sequin.py脚本用于批量转换genbank格式的gene和CDS注释为tbl格式。
+3.2.2. 脚本 下载地址:https://github.com/Van-Doorslaer/Genbank2sequin/blob/master/Genbank2Sequin.py
+from Bio import SeqIOimport re, glob, osfor f in glob.glob("*.gb" ): ID = f.split("." )[0 ] for r in SeqIO.parse(f,"genbank" ): with open (ID+'.fsa' , 'w' ) as fasta, open (ID+".tbl" , 'w' ) as table: print >> fasta, ">%s [organism=Human papillomavirus %s]\n%s" %(ID, ID, r.seq) print >>table, ">Feature " +ID for (index, feature) in enumerate (r.features): if feature.type == 'CDS' : m=re.search('\[(\d*)\:(\d*)\]' ,str (feature.location)) if m: print >>table, "%s\t%s\tgene\n\t\t\tgene\t%s" %(int (m.groups()[0 ])+1 , m.groups()[1 ],feature.qualifiers['note' ][0 ]) print >>table, "%s\t%s\tCDS\n\t\t\tproduct\t%s\n\t\t\tgene\t%s\n\t\t\tcodon_start\t1" %(int (m.groups()[0 ])+1 , m.groups()[1 ], feature.qualifiers['note' ][0 ], feature.qualifiers['note' ][0 ])
+
+3.2.3. 使用
+命令python2 Genbank2Sequin.py
-3s利用似然率来推断两个物种/群体间的基因流方向和强度
+运行后会自动搜索当前文件夹下的所有.gb后缀文件,然后把gene和CDS的注释转换为.tbl文件。
-3s输入
+输出
-输入:基因组或其他测序序列phylip文件
-输出:基因流方向和强度
+*.tbl:tbl格式文件。
-3s优势和不足
+notes
-随着数据量线性增加运算时间,运算快,适合基因组数据。
-一次只能检测三个物种/群体,无法建立系统发育网。
+*.tbl结果中只包含genbank注释的gene,CDS结果。
+需要在输入的genbank文件中包含note的值(可以用基因名称),否则报错。
+可批量操作多个gb文件。
-3. reference
-wiki: gene flow:https://en.wikipedia.org/wiki/Gene_flow
-wiki: introgression:https://en.wikipedia.org/wiki/Introgression
-Dsuite paper:https://onlinelibrary.wiley.com/doi/10.1111/1755-0998.13265
-PhyloNetworks paper:https://academic.oup.com/mbe/article/34/12/3292/4103410
-TreeMix paper:https://www.nature.com/articles/npre.2012.6956.1
+4. reference
+GB2sequin paper:https://www.sciencedirect.com/science/article/pii/S0888754318301897?via%3Dihub
+GB2sequin:https://chlorobox.mpimp-golm.mpg.de/GenBank2Sequin.html
+genbank_to_tbl.py:https://gist.github.com/nickloman/2660685
+Genbank2Sequin.py:https://github.com/Van-Doorslaer/Genbank2sequin/blob/master/Genbank2Sequin.py
+genbank格式:https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html
+tbl格式:https://www.ncbi.nlm.nih.gov/genbank/feature_table/
@@ -4867,17 +4396,20 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
bioinfo
- gene flow
+ fileformat
- gene flow
- hybridization
- introgressive
- 3s
- Dsuite
- PhyloNetworks
- population networks
- TreeMix
+ tbl
+ GenBank
+ organellar genome
+ genome annotation
+ genome submit
+ Sequin
+ tbl2asn
+ GB2sequin
+ gbf2tbl.pl
+ genbank_to_tbl.py
+ Genbank2Sequin.py
@@ -5618,51 +5150,6 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
orthofinder
-
- 质体的分类、角色和转换
- /2024/05/31/bio_plastid_typesandroles/
-
-
-植物细胞内的质体会随着植物生长和环境的变化而变化,不同植物组织和器官内的质体是不同的。
-
-
-Figure 1. 植物质体的分类、角色和转换
-
-
-Figure 2. 植物质体的分类、角色和转换
-reference
-https://www.frontiersin.org/journals/plant-science/articles/10.3389/fpls.2021.692024/full#B52
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bio
- plastid
-
-
- plastid
- 质体
- proplastid
- 原质体
- leucoplast
- 白质体
- amyloplast
- elaioplast
- proteinoplast
- chromoplast
- 色质体
- chloroplast
- 叶绿体
- etioplast
- 黄化体
- gerontoplast
- 老年体
-
-
树空间的多维缩放(multidimensional scaling,MDS)可视化物种树和基因树的RF距离
/2023/03/13/bioinfo_phylogeny_MDS/
@@ -5763,19 +5250,212 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 用软件Quartet Sampling来计算分支支持率,评估系统发育树不一致程度,区分强冲突和弱支持
- /2022/11/08/bioinfo_phylogeny_QuartetSampling/
-
-
+ 用R包MSCquartets评估不完全谱系分选的程度
+ /2023/03/13/bioinfo_phylogeny_MSCquartets/
+
-1. Quartet Sampling(QS)method Quartet Sampling(QS)是为系统发育树量化分支的支持率的一种方法,用于区分植物系统发育树上的强烈拓扑冲突和信息不足(缺乏支持)导致的支持率低,即区分强冲突(不一致)和弱支持(不确定性)。
-1.1. 原理 1.1.1. 四重采样
-对于给定的系统发育树,每个内部枝将树划分为四个不重叠的分类群子集(图A)。
-这四组分类群(也被称为元-四重奏,meta-quartet)可以以三种拓扑关系存在:与给定拓扑一致的关系,以及两种替代的不一致关系(Replicate 1和Replicate 2)。
-QS方法从四个子集中的每一个子集中重复随机采样一个分类单元,然后基于给定序列数据(完全比对或随机采样的基因分区),评估跨越该特定分支的随机选择的四条序列(即四重奏,quartet)的所有三个可能系统发育拓扑的似然值。
-对于同一分支采样的所有四重奏,评估这四个采样分类群可以采用的所有三种可能拓扑的可能性。
-然后记录所有重复中具有最佳可能性的四重拓扑并制成表格。
-此过程生成一组计数(跨每个分支的所有复制),其中一致或两个不一致关系中的每一个都具有最佳可能性。
+1. R包MSCquartets 1.1. 简介 MSCquartets(Rhodes, et al. 2020)被用来进行基于枝长的假设检验,评估在不完全谱系分选(Incomplete lineage sorting, ILS)下的多物种溯祖(multispecies coalescent, MSC)模型的物种树或物种网。它首先确定所有基因树中每组四分类群的三个可能拓扑结构的数量,这些被称为四分体计数一致性系数(quartet count concordance factor, qcCF),可以通过比较生成P值来判断基因树与物种树的拟合度。所有四分类群的四分体一致性系数可以用simplex图来表示,以全面了解整个基因树数据集的不协调情况。
+1.2. 分析步骤
+用MSCquartets(Rhodes, et al. 2020)的quartetTable函数计算基因树的所有四分体的计数一致性系数(qcCFs),并生成四分体计数表。
+用MSCquartets的quartetTableResolved函数生成只保留解决四分体的计数表。
+用MSCquartets的quartetTreeTestInd函数,ASTRAL构建的物种树作为指定物种树,在”T1 model”模型下进行MSC下的树型拟合假设检验。
+用MSCquartets的quartetTestPlot函数为每个拒绝水平的所有的四分类群子集生成一个simplex图(Allman, et al. 2021)。不同的拒绝水平包括α= 0.01、0.001、1e-04和1e-06。
+
+1.3. 结果解释 要么qcCFs与MSC下的ILS在指定的统计学意义水平上是一致的,要么ILS以外的一些机制(例如:杂交,或基因复制和丢失,以及大量的基因树推断错误等)更可能解释基因树的不一致。
+在simplex图中,带颜色的符号用来显示假设检验结果。当带颜色的符号处在接近图形中心点的位置,表明有大量的ILS主导;当符号更接近顶点,表明ILS的作用很小;那些被拒绝的符号应该由ILS以外的其他过程来解释。
+2. 用MSCquartets检验ILS
+输入文件
+
+
+genes.tre:基因树文件,保存多棵基因树
+物种树:可以用文本输入Rstree="(((t5,t6),t4),((t1,t2),t3));"
+
+
+运行
+
+install.packages( "MSCquartets" ) library( "MSCquartets" ) gtrees= read.tree( file= "genes.tre" ) tnames= taxonNames( gtrees) tnames QT= quartetTable( gtrees, tnames[ 6 : 11 ] ) RQT= quartetTableResolved( QT) stree= "(((t5,t6),t4),((t1,t2),t3));" pTable= quartetTreeTestInd( RQT, "T1" , speciestree= stree) pTable= quartetStarTestInd( pTable) quartetTestPlot( pTable, "T1" , alpha= .01 , beta= 1 ) quartetTestPlot( pTable, "T1" , alpha= .001 , beta= 1 ) quartetTestPlot( pTable, "T1" , alpha= .0001 , beta= 1 ) quartetTestPlot( pTable, "T1" , alpha= .000001 , beta= 1 )
+
+
+结果
+
+在simplex图中,带颜色的符号用来显示假设检验结果。当蓝色圆形符号(fail to reject tree)处在接近图形中心点的位置,表明有大量的ILS主导;当蓝色符号更接近顶点,表明ILS的作用很小。而那些代表拒绝的红色三角形符号(reject tree)应该由ILS以外的其他过程来解释。
+
+
+图 1. simplex图示例 图源:https://doi.org/10.1093/sysbio/syab068
+3. R包MSCquartets常用函数 3.1. quartetTable
+quartetTable函数用来计算基因树的四分体计数一致性系数(quartet count concordance factor, qcCF),并生成四分体计数表。
+用法:quartetTable(trees, taxonnames = NULL, epsilon = 0, random = 0)
+参数
+
+
+trees:包含un/rooted metric/topological trees的multiphylo对象,把保存了所有基因树的文件读进来就可以用在这
+taxonnames:选取trees里的部分类群进行分析,n个名字组成的向量,默认是NULL代表trees[[1]]的类群
+epsilon:被处理成非零的最小枝长,一般默认设置成0就ok。
+random:4 taxa的随机子集的数量。如果设置为0,用所有子集。这个参数也是一般默认设置成0就ok。
+最终会生成n+4列的计数表(n是选中的类群数量)
+耗时步骤,29个类群3000棵树用时1h。
+
+
+结果
+
+
+一个(n choose 4)×(n+4)的矩阵,或者(random)×(n+4)的矩阵。编码taxonnames的四个类群子集,以及所有树的四分体种类(种类:12|34,13|24,14|23,1234)的计数。
+
+3.2. quartetTableResolved
+quartetTableResolved函数用于把四分体计数表(常由quartetTable函数生成)的未解决四分体部分转化。转化方式是要么丢弃未解决部分,要么将未解决部分均匀分配在三个已解决的计数中。
+用法:quartetTableResolved(qt,omit=FALSE)
+参数
+
+
+qt:quartetTable函数的从n个选中的类群中生成n+4列的计数表
+omit:设置为TRUE代表删除未解决的四分体列;设置为FALSE代表删除未解决的四分体列的同时重新三等分这些未解决的计数分配到解决计数里。默认是FALSE。
+
+
+结果
+
+
+与qt类似的四分体计数表,但只包含展示被解决四分体计数的列。
+
+3.3. quartetTableDominant
+quartetTableDominant函数用于将n个分类群上已解决的四分体计数表(常由quartetTableResolved函数生成)转换为只显示占支配地位的一个四分体的计数表,并附有MSC下的内部边缘权重的最大似然估计。
+用法:quartetTableDominant(rqt,bigweights="infinite")
+参数
+
+
+rqt:quartetTableResolved函数生成的已解决四分体的计数表。列数为(n choose 4)x(n+3)。
+bigweights:默认为infinite,可设置成finite。表示只有一种拓扑结构的四分体的weight(internal edge length)是无限的(infinite)的值,还是有限的(finite)但很大的数值给出。如果设置成finite,,当一组4个类群的四分体计数为(m,0,0)时,那么边缘权重(edge weight)的计算方法是:主导拓扑结构的相对频率为m/(m+1)。
+
+
+结果
+
+
+一个(n choose 4)×(n+1)的矩阵,包含用1,1,-1,-1为类群列编码的支配地位四分体拓扑。第(n+1)列”weight”包含MSC下的四个类群的树的四分体的中心边缘长度的最大似然估计,溯祖单位。
+
+3.4. quartetTreeTest
+quartetTreeTest函数用于测试在MSC下四分体计数拟合一棵物种树的假设检验
+用法:quartetTreeTest(obs,model="T3",lambda=0,method="MLest",smallcounts="approximate",bootstraps=10^4)
+参数
+
+
+obs:已解决四分体频率的3个计数向量(三个数字组成的向量)
+model:假设检验的模型,T1用于指定的一棵物种树的四分体拓扑,T3代表任何物种树四分体拓扑。
+lambda:power-divergence统计参数,0代表似然率统计,1代表卡方检验(Chi-squared)统计
+method:可选MLtest,conservative或者bootstrap
+smallcounts:当有些计数很小时,获取p值的方法,可选bootstrap或者approximate
+bootstraps:bootstrapping采样的数量
+
+
+其他参数细节描述:
+
+
+这个函数实现了Mitchell等人(2019)给出的两个版本的测试,以及 参数boostrapping,当一些预期计数较小时,还有其他程序。当 拓扑结构和/或内部四分体分支长度不是由无效假设指定的,这些是 比单自由度的Chi-square测试更准确,后者在理论上是不成立的。在模型的奇异点和边界附近是不合理的。
+如果method=”MLtest”,则使用Mitchell等人(2019)第7节中描述的该名称的测试。对于T1和T3模型来说,该测试在四元组物种内部的一个小范围内是略微反保守的。边缘的四分体物种树的小范围内,测试略显反常。虽然该检验在实践中一般表现良好,但它缺乏对 在T1或T3的全部参数空间中缺乏统一的渐进保证。
+如果method=”conservative”,则使用Mitchell等人(2019)所描述的保守检验。对于模型T3,它使用1个自由度的Chi-square分布(”最不利 “的方法),而对于模型T1,它使用最小调整的Bonferroni,基于n=1e+6的模拟中预先计算的值。拒绝无效假设,但代价是第二类错误的增加。
+如果method=”bootstrap”,那么将根据四元组拓扑结构和内部边缘长度的参数估计进行参数化引导。引导样本的大小是由 bootstrap参数。
+当一些预期的拓扑结构计数较小时,”MLest “和 “conservative”方法并不合适。参数smallcounts决定了是使用bootstrapping还是更快的其他近似方法。这两种方法都涉及对四元组拓扑结构和内部边缘长度的估计。近似法返回一个预先计算好的p值,通过用1e+6替换最大的观察计数,并进行1e+8的计算,找到了p值。用1e+6代替最大的观察数,并对模型T3进行1e+8的引导。当n足够大(至少是30),一些预期计数较小,四叉树的错误概率较小,bootstrap p值大约与T3或T1的选择以及最大的观察计数无关。
+对于T1模型,obs的第一个条目被视为与物种树一致的基因四分体的计数。种树一致的基因四分体。
+当样本量较小时,如少于30个基因树,应谨慎对待返回的p值。返回的bl值是一个一致的估计值,但不是凝聚单位的内部边缘长度的MLE。虽然一致,但t的MLE是有偏的。我们的一致估计值仍有偏差,但比MLE的偏差小。关于在参数空间存在边界和/或奇异性的情况下处理参数估计的偏差的更多讨论,见Mitchell等人(2019)。
+
+
+结果
+
+
+结果是两个值:(p-value,bl)
+p-value是假设检验结果的p值
+bl是以溯祖为单位的内部边缘长度(internal edge length)的一致性估计,可能是Inf。
+
+3.5. quartetTreeTestInd
+quartetTreeTestInd函数用于执行多个独立的MSC下的四分体计数拟合到物种树的假设检验。它是quartetTreeTest函数的多线程版本,quartetTreeTest只做一个假设检验,quartetTreeTestInd则是对所有已解决的四分体都进行假设检验。
+用法:quartetTreeTestInd(rqt,model="T3",lambda=0,method="MLest",smallcounts="approximate",bootstraps=10^4,speciestree=NULL)
+参数
+
+
+rqt:已解决四分体频率的计数表(由quartetTableResolved函数或quartetStarTestInd函数生成)
+model:假设检验的模型,T1用于指定的一棵物种树的四分体拓扑,T3代表任何物种树四分体拓扑。
+lambda:power-divergence统计参数,0代表似然率统计,1代表卡方检验(Chi-squared)统计
+method:可选MLtest,conservative或者bootstrap。与quartetTreeTest函数一致。
+smallcounts:当有些计数很小时,获取p值的方法,可选bootstrap或者approximate
+bootstraps:bootstrapping采样的数量
+speciestree:物种树,Newick文本格式,用于T1 test的物种四分体。model=”T1”的必选项,model=”T3”则会忽略这个参数。
+
+
+结果
+
+
+如果model=”T3”,输出rqt相同的表,并附加一列”p_T3”。附加列代表每个四分体的p-values。
+如果model=”T1”,输出rqt相同的表,并附加两列”p_T1”和”qindex”。”p_T1”代表每个四分体的p-values。”qindex”代表与指定物种树一致的四分体的索引值,1代表物种树上的12|34,2代表13|24,3代表14|23。
+
+3.6. quartetStarTestInd
+quartetStarTestInd函数用于多个独立的MSC下的基因四分体计数拟合一个物种四分体星形树(star tree)的假设检验。它是quartetStarTest的多线程版本。这个函数假设所有四分体都是已解决的。
+用法:quartetStarTestInd(rqt)
+参数
+
+
+rqt:已解决的四分体计数表(由quartetTableResolved函数或quartetTreeTestInd函数生成)
+
+
+结果
+
+
+与输入的rqt相同的表,附加列”p_star”。附加列代表用于判断是否在一个星形树上拟合进MSC的p-values。
+
+3.7. quartetTestPlot
+quartetTestPlot函数用于用四分体假设检验的结果(常由quartetTreeTest函数生成)绘制simplex图,simplex图上的点代表所有四分体计数向量,颜色代表拒绝或失败或特定显著水平的拒绝。
+用法:quartetTestPlot(pTable,test,alpha=0.05,beta=1,cex=1)
+参数
+
+
+pTable:四分体和p值表(常由quartetTreeTestInd函数,quartetStarTestInd函数或NANUQ函数生成)
+test:树的零假设使用的模型,选T1或T3
+alpha:test给出的零假设的树测试的显著性水平
+beta:零假设检测星形树(star tree)的显著性水平。beta=1代表只有beta<1和pTable的p_star列存在的测试结果才会绘制点。
+cex:绘制符号尺寸的缩放比例
+
+
+结果
+
+
+4. references
+R包MSCquartets的manual:https://cran.r-project.org/web/packages/MSCquartets/MSCquartets.pdf
+R包MSCquartets的paper:https://doi.org/10.1093/bioinformatics/btaa868
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bioinfo
+ phylogeny
+ ILS
+
+
+ gene flow
+ phylogeny
+ R packages
+ MSCquartets
+ ILS
+ MSC
+ simplex
+
+
+
+ 用软件Quartet Sampling来计算分支支持率,评估系统发育树不一致程度,区分强冲突和弱支持
+ /2022/11/08/bioinfo_phylogeny_QuartetSampling/
+
+
+
+1. Quartet Sampling(QS)method Quartet Sampling(QS)是为系统发育树量化分支的支持率的一种方法,用于区分植物系统发育树上的强烈拓扑冲突和信息不足(缺乏支持)导致的支持率低,即区分强冲突(不一致)和弱支持(不确定性)。
+1.1. 原理 1.1.1. 四重采样
+对于给定的系统发育树,每个内部枝将树划分为四个不重叠的分类群子集(图A)。
+这四组分类群(也被称为元-四重奏,meta-quartet)可以以三种拓扑关系存在:与给定拓扑一致的关系,以及两种替代的不一致关系(Replicate 1和Replicate 2)。
+QS方法从四个子集中的每一个子集中重复随机采样一个分类单元,然后基于给定序列数据(完全比对或随机采样的基因分区),评估跨越该特定分支的随机选择的四条序列(即四重奏,quartet)的所有三个可能系统发育拓扑的似然值。
+对于同一分支采样的所有四重奏,评估这四个采样分类群可以采用的所有三种可能拓扑的可能性。
+然后记录所有重复中具有最佳可能性的四重拓扑并制成表格。
+此过程生成一组计数(跨每个分支的所有复制),其中一致或两个不一致关系中的每一个都具有最佳可能性。
该过程可以通过评估每个四重奏的完全比对的可能性(即在单矩阵框架中)或通过从多基因或全基因组比对(即在多基因树中)的单个基因/分区比对中随机抽样来执行聚结框架)。
@@ -6678,463 +6358,243 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 使用pixy计算群体的pi,dxy,fst
- /2023/03/13/bioinfo_population.genetics_pixy/
-
-
-1. 用pixy计算群体的pi,dxy,fst pixy可以基于多组学的vcf格式文件来计算群体的pi,dxy,fst值。
-1.1. 安装pixy conda install --yes -c conda-forge pixy conda install --yes -c bioconda htslib pixy --help
-
-1.2. 准备vcf文件 pixy需要的vcf文件与只包含snp的vcf文件不同,是同时包含变异位点(variant sites)和非变异位点(invariant sites)的全位点(all sites)文件。
-
-获取all-sites的vcf文件
-
-gatk --java-options "-Xmx32g" HaplotypeCaller -R ref.fa -I input.bam -O output.g.vcf -ERC GVCF # 生成单个样本gvcf文件 gatk --java-options "-Xmx32g" GenomicsDBImport -V output1.g.vcf -V output2.g.vcf ... --genomicsdb-workspace-path <allsamples_genomicsdb> for chr in $(cat chr.list);do gatk --java-options "-Xmx32g" GenotypeGVCFs -R ref.fa -V samples.g.vcf -L ${chr} -all-sites -O ${chr}_allsites.vcf.gz;done # joint-calling这里一定要加参数-all-sites(把non-variant位点也保存到vcf文件中,后面才能进行pixy的分析)。必须使用-L指定染色体,否则有报错风险。耗时步骤。 ls *_allsites.vcf.gz >vcf.list # 把生成的染色体的vcf文件名保存到vcf.list gatk MergeVcfs -I vcf.list -O samples_allsites.vcf.gz # 合并所有染色体vcf文件到一个vcf文件,耗时步骤
-
-
-分别获取invariant和variant位点,过滤后,再合并
-
-vcftools --gzvcf samples_allsites.vcf.gz --max-maf 0 --minQ 30 --max-missing 0.9 --min-meanDP 10 --max-meanDP 43 --remove filter.indv --recode --stdout | bgzip -c > samples_invariant_filtered.vcf.gz & # 提取invariant位点并过滤,同时生成out.log名称的log文件 vcftools --gzvcf samples_allsites.vcf.gz --mac 1 --min-alleles 2 --max-alleles 2 --minQ 30 --max-missing 0.9 --min-meanDP 10 --max-meanDP 43 --remove filter.indv --recode --stdout | bgzip -c > samples_variant_filtered.vcf.gz & # 提取variant位点并过滤,同时也生成out.log名称的log文件,最好与上一步骤分开在两个文件夹运行 tabix samples_invariant_filtered.vcf.gz tabix samples_variant_filtered.vcf.gz bcftools concat --allow-overlaps samples_variant.vcf.gz samples_invariant.vcf.gz -O z -o samples_allsites_filtered.vcf.gz # 合并invariant和variant位点到一个文件
+ 鉴定全基因复制事件(WGD)后保留的复制基因
+ /2022/10/18/bioinfo_WGD_geneRetention/
+
-1.3. pixy计算dxy,pi和fst
-popfile.txt群体文件
+1. 全基因组复制事件(WGD) 全基因组复制事件(WGD)是指在生物进化历史上发生的全基因组范围的染色体加倍、基因复制的事件,根据目前研究现状,WGD在植物进化历史上是很常见的。
+2. WGD后保留的复制基因 全基因组复制事件(WGD)后基因的命运有所不同。有些复制的基因对中的一个会发生变异、甚至假基因化,从而使得目前我们观察到的基因组上这类基因是单拷贝的;有些复制的基因对则保留到现在,成为WGD的证据。
+3. 思路 3.1. 参考 通过参考焦远年团队的文章: https://www.sciencedirect.com/science/article/pii/S1674205219303594 的 Methods部分,构建了以下分析思路,用来实现对发生特定WGD事件的物种的基因复制保留分析。
+
+实现的目的是:找到某物种基因组上那些在进化历史上发生特定WGD事件后保留至今的基因对,尽可能减少假阳性和假阴性。
+文章里用了多个软件,目前Orthofinder2可以实现第2,3,4,5步骤。
+
+3.2. 步骤
+数据
-popfile.txt文件包含样本个体分组信息,两列内容,tab分隔。第一列样本ID,第二列分组名称(常用物种作为分组依据)。
+多个物种的基因组。最少两个物种,除了发生WGD的被分析物种外,还要包括至少一个不共享此次WGD的外类群。
+如果要分析多个物种各自的WGDs,也可以一起构建物种树和基因树,在各自筛选基因树做各自WGD保留基因的根系。
-ERS223827 BFS ERS223759 BFS ERS223750 BFS ERS223967 AFS ERS223970 AFS ERS223924 AFS ERS224300 AFS ERS224168 KES ERS224314 KES
-
-运行
+基因家族(gene family)同源关系的鉴定
-bgzip samples_allsites_filtered.vcf tabix samples_allsites_filtered.vcf.gz nohup pixy --stats pi fst dxy --vcf sample_allsites_filtered.vcf.gz --populations popfile.txt --window_size 10000 --n_cores 16 &
-
-1.4. pixy的结果 根据–stats的设定,生成三个统计量的结果文件。
-
-pixy_pi.txt:居群内的核苷酸多样性(nucleotide diversity (pi))
+
+
+构建物种树
-pop:popfile.txt群体文件中群体ID
-chromosome:染色体或contig的ID
-window_pos_1:基因组window的起始位置
-window_pos_2:基因组window的终止位置
-avg_pi:window的位点的平均核苷酸多样性。更具体地说,pixy 计算window中所有位点的每个位点的加权平均核苷酸多样性,其中权重由每个位点的基因分型样本数决定。
-no_sites:window中至少具有一种有效基因型的位点总数。此统计信息被提供给用户,不会直接用于任何计算。
-count_diffs:window中所有基因型之间成对差异的原始数量。这是计算 avg_pi 的分子。
-count_comparisons:window中所有基因型之间非缺失成对比较的原始数量(即比较两种基因型且均有效的情况)。这是计算 avg_pi 的分母。
-count_missing:window中所有基因型之间缺失配对比较的原始数量(即比较两种基因型且至少缺失一种的情况)。
+文章用的APG系统的物种树。
+发现OrthoFinder2可以直接实现物种树构建。
+或者用单拷贝基因构建,RAxML-NG和IQ-TREE等软件都可。
-pop chromosome window_pos_1 window_pos_2 avg_pi no_sites count_diffs count_comparisons count_missing BFS HiC_scaffold_1 1 10000 0.0 6 0 6 0 AFS HiC_scaffold_1 1 10000 0.0 6 0 6 0 ... ...
-
-
-pixy_dxy.txt:居群间的核苷酸差异(nucleotide divergence (dxy))
+
+构建基因树
-pop1:popfile.txt群体文件中群体ID,比较的第一个居群
-pop2:popfile.txt群体文件中群体ID,比较的第二个居群
-chromosome:染色体或contig的ID
-window_pos_1:基因组window的起始位置
-window_pos_2:基因组window的终止位置
-avg_dxy:window的平均每个位点的核苷酸差异
-no_sites:window中两个群体中至少具有一种有效基因型的位点总数。此统计信息提供给用户,不会直接用于任何计算。
-count_diffs:所有基因型之间的成对交叉种群差异的原始数量。这是计算 avg_dxy 的分子。
-count_comparisons:window中所有基因型之间非缺失成对交叉种群比较的原始数量(即比较两种基因型且均有效的情况)。这是计算 avg_dxy 的分母。
-count_missing:window中所有基因型之间缺失的成对跨种群比较的原始数量(即两个基因型被比较而至少有一个缺失的情况)。这个统计数字提供给用户,不直接用于任何计算。
+文章里是用的是,通过OrthoMCL鉴定出来的orthogroups,筛除掉少于4个基因和不包含外类群的orthogroups来构建。
+我发现OrthoFinder2可以直接实现基因树构建,但基因树的筛选需要手动进行。
-pop1 pop2 chromosome window_pos_1 window_pos_2 avg_dxy no_sites count_diffs count_comparisons count_missing BFS AFS HiC_scaffold_1 1 10000 0.0 6 24 0 CFS DES HiC_scaffold_1 1 10000 0.0 6 24 0
-
-
-pixy_fst.txt:Weir and Cockerham’s FST
+
+根据物种树整理基因树的节点
-pop1:popfile.txt群体文件中群体ID,比较的第一个居群
-pop2:popfile.txt群体文件中群体ID,比较的第二个居群
-chromosome:染色体或contig的ID
-window_pos_1:基因组window的起始位置
-window_pos_2:基因组window的终止位置
-avg_wc_fst:window的平均每个SNP(不是每个位点)的 Weir and Cockerham’s FST
-no_snps:window内变异位点(SNPs)的总数
+通过与物种树的节点比较,对基因树的节点进行整理,保持与物种树一致。
+文章是用软件Notung2.9来根据物种树的拓扑,融合OrthoMCL的基因树结果。
-pop1 pop2 chromosome window_pos_1 window_pos_2 avg_wc_fst no_snps BFS AFS HiC_scaffold_1 30001 40000 NA 67 CFS DES HiC_scaffold_1 30001 40000 0.0 67
-
-结果的后续处理
-计算平均值的注意事项
+
+根据物种树拓扑筛选基因树
-值得注意的是,如果想用pixy的结果继续计算更大的window或者整个基因组的平均值不能直接用window的pi/dxy值来计算。
-正确的计算方法是使用原始计数重新计算differences/comparisons ratios,公式如下:
-$$(window 1 count_diffs + window 2 count_diffs + … + window n count_diffs) / (window 1 comparisons + window 2 comparisons + … + window n comparisons)$$
-
-计算整个基因组的pi值
+
+通过指定一些标准,从OrthoFinder2或者OrthoMCL的结果中筛选符合物种树的基因树,使用这些基因树的基因对作为有发生基因复制事件证据的基因对。
+文章里的标准是,两个子枝(child branches)需要拥有来自至少一个最近共同祖先的基因,父母节点(parental node)和至少一个子节点(child nodes)有超过50%的支持率。
+这个也需要手动进行。
+
+
+移除串联重复(tandem duplications)
-cat pixy_pi.txt |cut -f1,2 |sort|uniq >pops.list cat pops.list | while read line do a=$(echo $line | awk '{print $1}'); b=$(echo $line | awk '{print $2}'); cat pixy_dxy.txt |awk '$1 == "'$a'" && $2 == "'$b'" {suma+=$8;sumb+=$9} END {print "'$a'", "'$b'", suma, sumb, suma/sumb}' >> dxy_average.txt done
-
-
-计算整个基因组的dxy平均值
+
+移除串联重复tandem,这些不是全基因组复制事件中产生。
+文章里对tandem的鉴定用的标准是两个基因的位置在五个基因以内即做看作tandem。
+操作上,我是通过基因ID来实现的(如果基因ID的编号相差在5以内就被看作tandem,这种基因树被删除)。注释基因组时对基因ID根据位置进行排序和整理的好处这个时候就体现了。
+
+
+鉴定基因复制事件的基因
-cat pixy_dxy.txt |cut -f1 |sort|uniq >pop.list cat pop.list | while read line do a=$(echo $line | awk '{print $1}'); cat pixy_pi.txt |awk '$1 == "'$a'" {suma+=$7;sumb+=$8} END {print "'$a'", suma, sumb, suma/sumb}' >> pi_average.txt done
-
-结果可视化 2. references
-pixy manual:https://pixy.readthedocs.io/en/latest/index.html
-pixy github:https://github.com/ksamuk/pixy
+
+通过以上4,5,6,7步骤的筛选,我们获得代表WGD的基因树,这也就意味着得到了WGD后保留的复制基因(基因树上那些基因)。
+把得到的基因树上的基因根据位置提取出来,分别从两个child branches中各提取一个基因,组成一个基因对。有些基因树上只有一个基因对,有些可能不止两个基因,会产生多于一个基因对。
+
+
+多次WGDs
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+如果系统发育树的同一枝上有超过一次的WGD事件(比如某物种特有两次WGDs),则通过计算鉴定出来的复制基因对的Ks,通过Ks区分这些WGDs。
+例如一次WGD的Ks峰值在0.2,另一次在0.7,则可一刀切的把Ks大于两者平均值$$0.45=(0.2+0.7)/2$$的那些基因对算作0.7那次WGD保留的,Ks小于0.45的算作0.2那次保留的。
+这个是没有其他更好的解决办法的处理方式,在文章中对水稻等发生两次WGDs的物种也是这样处理的。
- ]]>
-
- bioinfo
- population genetics
-
-
- pixy
- pi
- dxy
- fst
-
-
-
- 多序列比对的整体可视化
- /2024/08/02/bioinfo_alignment_align_MSA_visualization/
-
-
-一句话总结:推荐使用AliView进行多序列比对的整体可视化。
-1. 多序列比对的可视化 通过肉眼查看多序列比对结果,可以用MEGA, Bioedit, Genious, AliView等软件。
+
+TF分析【可选】
+
-MEGA, Bioedit可以查看局部比对结果,并对碱基/氨基酸渲染颜色,但无法从整体上查看比对结果,即无法对比对结果进行缩放(Zoom out/in)。
-Genious可以对比对结果缩放(Zoom out/in),从而从整体上查看比对结果。但是它是商业软件,费用较高。可以用邮箱注册试用。
-AliView是免费开源的软件,支持对比对结果缩放(Zoom out/in),从整体上查看比对结果,推荐使用。
+得到WGD后保留的基因对后,还可以进行转录因子(transcription factor,TF)的WGD后保留分析。
-2. AliView
-AliView是Uppsala University团队开发的一个多序列比对可视化工具:https://ormbunkar.se/aliview/。
-免费开源,在github上可获取:https://github.com/AliView/AliView。
-支持FASTA,PHYLIP,NEXUS,CLUSTAL,MSF格式的输入文件。
+notes:其中第4,5,6,7步骤都是在对基因树进行筛选,把那些代表了特定WGD的基因树筛选出来,避免其他基因树的干扰(比如tandem)。把代表WGD的基因树筛选出来后,也就意味着得到了WGD后保留的复制基因(基因树上那些基因)。
+4. 实战 4.1. 准备
+数据准备:物种A有两次物种特有的WGDs,不共享这两次WGD的外类群B。至少这两个物种的基因组数据。有其他物种的也可以一起用。
-需要查看多序列比对的整体效果,只需在AliView上打开多序列比对文件,然后File-Export alignments as image即可导出图,注意导出的图不包含序列ID。
-
-
-Figure 1. 多序列比对整体图
-3. msaviewer 另外,NCBI有个在线工具msaviewer(NCBI Multiple Sequence Alignment Viewer),支持对多序列比对结果进行缩放(Zoom out/in),查看整体比对。
-https://www.ncbi.nlm.nih.gov/projects/msaviewer/
-4. references
-https://ormbunkar.se/aliview/
-https://github.com/AliView/AliView3
-https://www.ncbi.nlm.nih.gov/projects/msaviewer/
+4.2. orthofinder2构建物种树和基因树 4.2.1. OrthoFinder2运行
+4.2.2. 结果文件 要用的主要是三个个文件,在/OrthoFinder/Results_xx/Gene_Duplication_Events/目录下的Duplications.tsv和SpeciesTree_Gene_Duplications_0.5_Support.txt,以及/OrthoFinder/Results_xx/Orthogroups下的Orthogroups.txt。
+
+Duplications.tsv
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+是一个制表符分隔的文本文件,它列出了通过检查每个正群基因树的每个节点识别出的所有基因复制事件,每行代表至少一次基因复制事件。
+七列内容分别是:
+1.Orthogroup的ID
+2.Species Tree node:发生复制的物种树的分支,参见Species_Tree/SpeciesTree_rooted_node_labels.txt
+3.Gene tree node:与基因复制事件对应的节点,参见相应的orthogroup Resolved_Gene_Trees/ 中的树;
+4.Support:存在复制基因的两个副本的预期物种的比例
+5.Type:”Terminal”:物种树终端分支上的重复;”Non-Terminal”:物种树内部分支上的重复,因此被多个物种共享;”Non-Terminal”:STRIDE检查基因树的拓扑结构在复制后应该是什么;
+6.Genes 1:基因列表来自复制基因的一个副本,逗号分隔;
+7.Genes 2:基因列表来自复制基因的另一个副本,逗号分隔。
- ]]>
-
- bioinfo
- alignment
- align
- MSA
-
-
- alignment
- Multiple Sequence Alignment
- MSA
- visualization
- AliView
- msaviewer
-
-
-
- 用R包MSCquartets评估不完全谱系分选的程度
- /2023/03/13/bioinfo_phylogeny_MSCquartets/
-
+Orthogroup Species Tree Node Gene Tree Node Support Type Genes 1 Genes 2 OG0000000 N5 n62 0.5 Non-Terminal Mcandidum_pep_mc33950 Mdodecandrum_pep_DR005872, Mcandidum_pep_mc01326, Mdodecandrum_pep_DR006000, Mcandidum_pep_mc01492 OG0000000 N5 n63 1.0 Non-Terminal Mdodecandrum_pep_DR005872, Mcandidum_pep_mc01326 Mdodecandrum_pep_DR006000, Mcandidum_pep_mc01492 OG0000000 N5 n177 0.5 Non-Terminal Mdodecandrum_pep_DR002276, Mdodecandrum_pep_DR013872, Mcandidum_pep_mc36653, Mdodecandrum_pep_DR026891, Mcandidum_pep_mc22876, Mcandidum_pep_mc37513, Mdodecandrum_pep_DR026886 Mdodecandrum_pep_DR004265
-1. R包MSCquartets 1.1. 简介 MSCquartets(Rhodes, et al. 2020)被用来进行基于枝长的假设检验,评估在不完全谱系分选(Incomplete lineage sorting, ILS)下的多物种溯祖(multispecies coalescent, MSC)模型的物种树或物种网。它首先确定所有基因树中每组四分类群的三个可能拓扑结构的数量,这些被称为四分体计数一致性系数(quartet count concordance factor, qcCF),可以通过比较生成P值来判断基因树与物种树的拟合度。所有四分类群的四分体一致性系数可以用simplex图来表示,以全面了解整个基因树数据集的不协调情况。
-1.2. 分析步骤
-用MSCquartets(Rhodes, et al. 2020)的quartetTable函数计算基因树的所有四分体的计数一致性系数(qcCFs),并生成四分体计数表。
-用MSCquartets的quartetTableResolved函数生成只保留解决四分体的计数表。
-用MSCquartets的quartetTreeTestInd函数,ASTRAL构建的物种树作为指定物种树,在”T1 model”模型下进行MSC下的树型拟合假设检验。
-用MSCquartets的quartetTestPlot函数为每个拒绝水平的所有的四分类群子集生成一个simplex图(Allman, et al. 2021)。不同的拒绝水平包括α= 0.01、0.001、1e-04和1e-06。
-
-1.3. 结果解释 要么qcCFs与MSC下的ILS在指定的统计学意义水平上是一致的,要么ILS以外的一些机制(例如:杂交,或基因复制和丢失,以及大量的基因树推断错误等)更可能解释基因树的不一致。
-在simplex图中,带颜色的符号用来显示假设检验结果。当带颜色的符号处在接近图形中心点的位置,表明有大量的ILS主导;当符号更接近顶点,表明ILS的作用很小;那些被拒绝的符号应该由ILS以外的其他过程来解释。
-2. 用MSCquartets检验ILS
-输入文件
+
+SpeciesTree_Gene_Duplications_0.5_Support.txt
-genes.tre:基因树文件,保存多棵基因树
-物种树:可以用文本输入Rstree="(((t5,t6),t4),((t1,t2),t3));"
+提供了物种树分支上的上述重复的总和。
+它是一个 newick 格式的文本文件。
+每个节点或物种名称后面的数字是在导致节点/物种的分支上发生的具有至少 50% 支持度的基因复制事件的数量。
+分支长度是标准分支长度,如 Species_Tree/SpeciesTree_rooted.txt 中给出的。
-
-运行
-
-install.packages( "MSCquartets" ) library( "MSCquartets" ) gtrees= read.tree( file= "genes.tre" ) tnames= taxonNames( gtrees) tnames QT= quartetTable( gtrees, tnames[ 6 : 11 ] ) RQT= quartetTableResolved( QT) stree= "(((t5,t6),t4),((t1,t2),t3));" pTable= quartetTreeTestInd( RQT, "T1" , speciestree= stree) pTable= quartetStarTestInd( pTable) quartetTestPlot( pTable, "T1" , alpha= .01 , beta= 1 ) quartetTestPlot( pTable, "T1" , alpha= .001 , beta= 1 ) quartetTestPlot( pTable, "T1" , alpha= .0001 , beta= 1 ) quartetTestPlot( pTable, "T1" , alpha= .000001 , beta= 1 )
+(((((Mcandidum.pep_7199:1,Mdodecandrum.pep_3425:1)N5_9299:1,Egrandis.pep_12485:1)N3_296:1,((Ptrichocarpa.pep_13300:1,(Csinensis.pep_5628:1,(Graimondii.pep_15253:1,Athaliana.pep_8750:1)N10_30:1)N8_5:1)N6_61:1,(Ppersica.pep_5798:1,(Mtruncatula.pep_23336:1,Csativus.pep_3576:1)N9_48:1)N7_12:1)N4_19:1)N2_96:1,Vvinifera.pep_7596:1)N1_535:1,Mguttatus.pep_8911:1)N0_1806;
-结果
-
-在simplex图中,带颜色的符号用来显示假设检验结果。当蓝色圆形符号(fail to reject tree)处在接近图形中心点的位置,表明有大量的ILS主导;当蓝色符号更接近顶点,表明ILS的作用很小。而那些代表拒绝的红色三角形符号(reject tree)应该由ILS以外的其他过程来解释。
-
-
-图 1. simplex图示例 图源:https://doi.org/10.1093/sysbio/syab068
-3. R包MSCquartets常用函数 3.1. quartetTable
-quartetTable函数用来计算基因树的四分体计数一致性系数(quartet count concordance factor, qcCF),并生成四分体计数表。
-用法:quartetTable(trees, taxonnames = NULL, epsilon = 0, random = 0)
-参数
+Orthogroups.txt
-trees:包含un/rooted metric/topological trees的multiphylo对象,把保存了所有基因树的文件读进来就可以用在这
-taxonnames:选取trees里的部分类群进行分析,n个名字组成的向量,默认是NULL代表trees[[1]]的类群
-epsilon:被处理成非零的最小枝长,一般默认设置成0就ok。
-random:4 taxa的随机子集的数量。如果设置为0,用所有子集。这个参数也是一般默认设置成0就ok。
-最终会生成n+4列的计数表(n是选中的类群数量)
-耗时步骤,29个类群3000棵树用时1h。
+Orthogroups.txt保存了鉴别的orthogroups的信息。
+第一列是OG开头的orthogroups的ID号,冒号结束;后面不同数量的列是此orthogroup包含的各物种的基因ID。
-
-结果
+4.3. 筛选基因复制事件和复制的基因对 4.3.1. 筛选基因家族 从Orthogroups.txt文件中筛选符合标准的orthogroups,提取orthogroups的ID号。
+
+筛选标准
-一个(n choose 4)×(n+4)的矩阵,或者(random)×(n+4)的矩阵。编码taxonnames的四个类群子集,以及所有树的四分体种类(种类:12|34,13|24,14|23,1234)的计数。
+每个基因家族至少包含四个基因。
+每个基因家族至少包含一个外类群基因。
-3.2. quartetTableResolved
-quartetTableResolved函数用于把四分体计数表(常由quartetTable函数生成)的未解决四分体部分转化。转化方式是要么丢弃未解决部分,要么将未解决部分均匀分配在三个已解决的计数中。
-用法:quartetTableResolved(qt,omit=FALSE)
-参数
+
+筛选命令
-qt:quartetTable函数的从n个选中的类群中生成n+4列的计数表
-omit:设置为TRUE代表删除未解决的四分体列;设置为FALSE代表删除未解决的四分体列的同时重新三等分这些未解决的计数分配到解决计数里。默认是FALSE。
+cat /path/to/OrthoFinder/Results_xx/Orthogroups/Orthogroups.txt |awk 'NF>4 {print $0}' |grep "OUTGROUP"|sed "s/:.*//g" >orthogroups_filter.list
+其中awk 'NF>4 {print $0}'
代表提取列数大于4的行,即包含至少4个基因的基因家族。
+其中grep "OUTGROUP"
代表提取有OUTGROUP字符串的行,这里提取包含外类群基因ID特征(比如Eugr)前缀的行。
+其中sed "s/:.*//g"
代表把冒号及之后的所有信息删除,只保留orthogroups的ID信息。
-
-结果
+4.3.2. 筛选基因复制事件 从Duplications.tsv文件中筛选符合标准的基因复制事件,提取基因复制事件中发生复制的基因。
+
+提取特定枝上的基因复制事件
-与qt类似的四分体计数表,但只包含展示被解决四分体计数的列。
+比如这里是要筛选Mcandidum和Mdodecandrum的最近共同祖先发生的WGDs事件,在上面SpeciesTree_Gene_Duplications_0.5_Support.txt文件的例子中,是N5代表的节点。
+则可以通过cat Duplications.tsv|awk -v FS='\t' '$2=="N5" {print $0}' >N5.tsv
来获取第二列是N5的复制事件
-3.3. quartetTableDominant
-quartetTableDominant函数用于将n个分类群上已解决的四分体计数表(常由quartetTableResolved函数生成)转换为只显示占支配地位的一个四分体的计数表,并附有MSC下的内部边缘权重的最大似然估计。
-用法:quartetTableDominant(rqt,bigweights="infinite")
-参数
+
+其他筛选标准
-rqt:quartetTableResolved函数生成的已解决四分体的计数表。列数为(n choose 4)x(n+3)。
-bigweights:默认为infinite,可设置成finite。表示只有一种拓扑结构的四分体的weight(internal edge length)是无限的(infinite)的值,还是有限的(finite)但很大的数值给出。如果设置成finite,,当一组4个类群的四分体计数为(m,0,0)时,那么边缘权重(edge weight)的计算方法是:主导拓扑结构的相对频率为m/(m+1)。
+两个子枝(child branch)都有来自分析物种A的基因。都有才代表物种A的基因复制了。
+支持率(这里用Duplications.tsv第4列Support值)大于等于0.5。
-
-结果
-
-
-一个(n choose 4)×(n+1)的矩阵,包含用1,1,-1,-1为类群列编码的支配地位四分体拓扑。第(n+1)列”weight”包含MSC下的四个类群的树的四分体的中心边缘长度的最大似然估计,溯祖单位。
-
-3.4. quartetTreeTest
-quartetTreeTest函数用于测试在MSC下四分体计数拟合一棵物种树的假设检验
-用法:quartetTreeTest(obs,model="T3",lambda=0,method="MLest",smallcounts="approximate",bootstraps=10^4)
-参数
-
-
-obs:已解决四分体频率的3个计数向量(三个数字组成的向量)
-model:假设检验的模型,T1用于指定的一棵物种树的四分体拓扑,T3代表任何物种树四分体拓扑。
-lambda:power-divergence统计参数,0代表似然率统计,1代表卡方检验(Chi-squared)统计
-method:可选MLtest,conservative或者bootstrap
-smallcounts:当有些计数很小时,获取p值的方法,可选bootstrap或者approximate
-bootstraps:bootstrapping采样的数量
-
-
-其他参数细节描述:
-
-
-这个函数实现了Mitchell等人(2019)给出的两个版本的测试,以及 参数boostrapping,当一些预期计数较小时,还有其他程序。当 拓扑结构和/或内部四分体分支长度不是由无效假设指定的,这些是 比单自由度的Chi-square测试更准确,后者在理论上是不成立的。在模型的奇异点和边界附近是不合理的。
-如果method=”MLtest”,则使用Mitchell等人(2019)第7节中描述的该名称的测试。对于T1和T3模型来说,该测试在四元组物种内部的一个小范围内是略微反保守的。边缘的四分体物种树的小范围内,测试略显反常。虽然该检验在实践中一般表现良好,但它缺乏对 在T1或T3的全部参数空间中缺乏统一的渐进保证。
-如果method=”conservative”,则使用Mitchell等人(2019)所描述的保守检验。对于模型T3,它使用1个自由度的Chi-square分布(”最不利 “的方法),而对于模型T1,它使用最小调整的Bonferroni,基于n=1e+6的模拟中预先计算的值。拒绝无效假设,但代价是第二类错误的增加。
-如果method=”bootstrap”,那么将根据四元组拓扑结构和内部边缘长度的参数估计进行参数化引导。引导样本的大小是由 bootstrap参数。
-当一些预期的拓扑结构计数较小时,”MLest “和 “conservative”方法并不合适。参数smallcounts决定了是使用bootstrapping还是更快的其他近似方法。这两种方法都涉及对四元组拓扑结构和内部边缘长度的估计。近似法返回一个预先计算好的p值,通过用1e+6替换最大的观察计数,并进行1e+8的计算,找到了p值。用1e+6代替最大的观察数,并对模型T3进行1e+8的引导。当n足够大(至少是30),一些预期计数较小,四叉树的错误概率较小,bootstrap p值大约与T3或T1的选择以及最大的观察计数无关。
-对于T1模型,obs的第一个条目被视为与物种树一致的基因四分体的计数。种树一致的基因四分体。
-当样本量较小时,如少于30个基因树,应谨慎对待返回的p值。返回的bl值是一个一致的估计值,但不是凝聚单位的内部边缘长度的MLE。虽然一致,但t的MLE是有偏的。我们的一致估计值仍有偏差,但比MLE的偏差小。关于在参数空间存在边界和/或奇异性的情况下处理参数估计的偏差的更多讨论,见Mitchell等人(2019)。
-
-
-结果
-
-
-结果是两个值:(p-value,bl)
-p-value是假设检验结果的p值
-bl是以溯祖为单位的内部边缘长度(internal edge length)的一致性估计,可能是Inf。
-
-3.5. quartetTreeTestInd
-quartetTreeTestInd函数用于执行多个独立的MSC下的四分体计数拟合到物种树的假设检验。它是quartetTreeTest函数的多线程版本,quartetTreeTest只做一个假设检验,quartetTreeTestInd则是对所有已解决的四分体都进行假设检验。
-用法:quartetTreeTestInd(rqt,model="T3",lambda=0,method="MLest",smallcounts="approximate",bootstraps=10^4,speciestree=NULL)
-参数
-
-
-rqt:已解决四分体频率的计数表(由quartetTableResolved函数或quartetStarTestInd函数生成)
-model:假设检验的模型,T1用于指定的一棵物种树的四分体拓扑,T3代表任何物种树四分体拓扑。
-lambda:power-divergence统计参数,0代表似然率统计,1代表卡方检验(Chi-squared)统计
-method:可选MLtest,conservative或者bootstrap。与quartetTreeTest函数一致。
-smallcounts:当有些计数很小时,获取p值的方法,可选bootstrap或者approximate
-bootstraps:bootstrapping采样的数量
-speciestree:物种树,Newick文本格式,用于T1 test的物种四分体。model=”T1”的必选项,model=”T3”则会忽略这个参数。
-
-
-结果
-
-
-如果model=”T3”,输出rqt相同的表,并附加一列”p_T3”。附加列代表每个四分体的p-values。
-如果model=”T1”,输出rqt相同的表,并附加两列”p_T1”和”qindex”。”p_T1”代表每个四分体的p-values。”qindex”代表与指定物种树一致的四分体的索引值,1代表物种树上的12|34,2代表13|24,3代表14|23。
-
-3.6. quartetStarTestInd
-quartetStarTestInd函数用于多个独立的MSC下的基因四分体计数拟合一个物种四分体星形树(star tree)的假设检验。它是quartetStarTest的多线程版本。这个函数假设所有四分体都是已解决的。
-用法:quartetStarTestInd(rqt)
-参数
-
-
-rqt:已解决的四分体计数表(由quartetTableResolved函数或quartetTreeTestInd函数生成)
-
-
-结果
+
+筛选命令
-与输入的rqt相同的表,附加列”p_star”。附加列代表用于判断是否在一个星形树上拟合进MSC的p-values。
+cat N5.tsv|awk -v FS='\t' '$4>=0.5 && $6 ~ "mc" && $7 ~ "mc" {print $0}' >N5_filter.tsv
+其中$6 ~ "mc" && $7 ~ "mc"
代表模糊匹配第六列和第七列都包含mc字段的行。这里的mc是我们想要筛选的物种的基因ID的前缀。即实现了筛选两个子枝(child branch)都有来自分析物种A的基因。
+其中$4>=0.5
代表第四列大于等于0.5的行。即实现了筛选支持率大于等于0.5的行。
-3.7. quartetTestPlot
-quartetTestPlot函数用于用四分体假设检验的结果(常由quartetTreeTest函数生成)绘制simplex图,simplex图上的点代表所有四分体计数向量,颜色代表拒绝或失败或特定显著水平的拒绝。
-用法:quartetTestPlot(pTable,test,alpha=0.05,beta=1,cex=1)
-参数
+
+由于OrthoFinder2运行时也会有一些基础的筛选,所以有可能这步筛选结束后与筛选前完全一致。
-
-pTable:四分体和p值表(常由quartetTreeTestInd函数,quartetStarTestInd函数或NANUQ函数生成)
-test:树的零假设使用的模型,选T1或T3
-alpha:test给出的零假设的树测试的显著性水平
-beta:零假设检测星形树(star tree)的显著性水平。beta=1代表只有beta<1和pTable的p_star列存在的测试结果才会绘制点。
-cex:绘制符号尺寸的缩放比例
-
-
-结果
+4.3.3. 整理数据
+取以上基因家族和基因复制事件筛选结果的交集
-不输出值,会绘制simplex图。
+grep -f orthogroups_filter.list N5_filter.tsv |awk '{print "dup"NR"dup",$0}' |sed "s/ /\t/g" >N5_filter_OG_dup.tsv
+其中awk '{print "dup"NR"dup",$0}'
代表在行首加上dup12dup
这列,其中12是行号,目的是为每一行的基因复制事件取一个不重复的ID。
-4. references
-R包MSCquartets的manual:https://cran.r-project.org/web/packages/MSCquartets/MSCquartets.pdf
-R包MSCquartets的paper:https://doi.org/10.1093/bioinformatics/btaa868
+
+整理数据
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+把N5_filter_OG_dup.tsv整理成基因对格式的文件genepairs.tsv。
+genepairs.tsv是tab分隔的文本文件,包含三列,第一列是N5_filter_OG_dup.tsv的第一列,这里是dup12dup
形式的基因复制事件的ID;第二列和第三列分别是两个子枝(child branch)中各取一个基因生成的基因对,迭代生成所有可能的基因对。
+写了一个python小脚本来实现N5_filter_OG_dup.tsv到genepairs.tsv的转换。
- ]]>
-
- bioinfo
- phylogeny
- ILS
-
-
- gene flow
- phylogeny
- R packages
- MSCquartets
- ILS
- MSC
- simplex
-
-
-
- 用PSMC推断有效群体大小历史
- /2022/10/17/bioinfo_psmc/
-
+import sys, math, oswith open ('N5_filter_OG_dup.tsv' ,'r' ) as f: for l in f.readlines(): line = l.strip() dr = line.split("\t" )[0 ] genes1 = line.split("\t" )[6 ] genes2 = line.split("\t" )[7 ] gene_1 = list (genes1.split("," )) gene_2 = list (genes2.split("," )) for i in range (len (gene_1)): for j in range (len (gene_2)): with open ('genepairs.tsv' , mode='a' ) as gp: gp.write(dr+'\t' +gene_1[i]+'\t' +gene_2[j]+'\n' )
-1. PSMC Pairwise Sequentially Markovian Coalescent (PSMC) 是李恒开发的一款软件,可以通过一个二倍体个体的基因组的分析获得这个个体代表的群体的有效群体大小的历史动态。
-2. PSMC分析原理 通过一个二倍体个体的基因组的等位基因上存在的变异位点计算序列间差异,从而推断序列的分化时间;计算所有等位基因(也可以换成等位片段)的分化时间。认为某个分化时间的等位基因数量越多,代表当时的有效群体大小越大,所以可以通过整个基因组上等位基因的分化时间的分布推断有效群体大小的历史动态。
-
-这个算法让人惊叹的点在于,我们可以只从一个个体的基因组上看到群体的进化历史。
-有意思的是,前些时候看《自私的基因》那本书的时候,书里的序也详细讲解了PSMC的算法,从等位基因回溯到基因的共同祖先,讲得很清晰,非专业人士也可以读懂,有兴趣的读者可以去看看。
-分析人类的有效群体大小历史时,在三百万年有一次共有的高峰,有可能是人类从猩猩中分化出来时期的群体规模高峰期。不过,这么久远的分化区域意味着高度差异的等位基因片段(高度杂合)。这些高度杂合的片段也有可能来自平衡选择,或重测序比对过程中重复序列不正确比对产生的错误SNP。因此,三百万年的高峰可能并不可信。
-
-3. PSMC运行 3.1. 文件准备
-基因组文件:genome.fa
-二代测序数据:sample_R1.clean.u.fq和sample_R2.clean.u.fq
-
-3.2. 运行步骤 3.2.1. 准备全基因组二倍体一致序列
-二代序列mapping
+4.3.4. 筛除串联重复(tandem duplications) 从上面的结果文件genepairs.tsv中筛除鉴定为串联重复产生的基因对,生成genepairs_del_tandem.tsv。(ps:也可以从N5_filter_OG_dup.tsv筛除)
+
+串联重复的标准
-time bwa mem -t 12 genome.fa sample_R1.clean.u.fq sample_R2.clean.u.fq | samtools sort -@ 12 -m 12G > sample_sort.bam
把二代数据mapping到基因组上
+取的文章里的标准:在两个子枝(child branch)中的基因在五个基因范围内则被看作是串联重复导致的。
-获取二倍体一致序列
-
-
-samtools mpileup -C50 -uf genome.fa sample_sort.bam | bcftools view --threads 16 -c - | vcfutils.pl vcf2fq -d 10 -D 100 |pgzip -p 12 >diploid.fq.gz
生成全基因组二倍体一致序列diploid.fq.gz
-bcftools view
可以换成bcftools call
-其中,vcfutils.pl vcf2fq -d 10 -D 100
的-d 10
参数是最小read depth,作者建议设置成平均depth的三分之一(1/3);-D 100
参数是最大read depth,建议设置成平均depth的两倍。
-
-
-上一步可分解为以下几步:
+筛除
-samtools mpileup -C50 -uf genome.fa sample_sort.bam | bcftools view --threads 16 -O z -o sample.vcf.gz
call snp,得到的是genotype likelihoods的vcf文件
-bcftools call sample.vcf.gz -c -v --threads 16 -O z -o sample.variants.vcf.gz
生成只有snp和indel的vcf文件,其中-c代表SNP calling选择consensus-caller算法,另可选-m即multiallelic-caller算法(更适合多种allel和罕见变异的情况)。
-bcftools view -H sample.variants.vcf.gz | wc -l
统计snp数量。snp数量除以基因组大小即可得到估计的杂合度。
-vcfutils.pl vcf2fq -d 8 -D 50 sample.variants.vcf.gz| pigz -p 12 > diploid.fq.gz
生成二倍体fq文件
+由于我注释基因组的时候,基因ID是根据位置排序产生的,所以这里筛除就直接把genepairs.tsv文件的第二列和第三列的数字相减再取绝对值,如果数字小于等于5的话就把这行删除。另外注意一下染色体首尾的基因就好。
+如果是注释基因组时基因ID命名没有规则,就需要自行想办法了。
-3.2.2. 运行单次PSMC
-格式转换
+4.3.5. 基因复制树和复制的基因对 到这里,就获得了物种A发生特定WGD后保留的基因复制事件(N5_filter_OG_dup.tsv)和相应的基因对(genepairs.tsv或者进行筛除串联重复后的genepairs_del_tandem.tsv)。
+4.4. 多个WGDs的情况 如果同一个枝(branch)上发生了两次或以上的WGDs事件,通过基因树和物种树无法区分这两次WGDs,此时就需要通过计算基因对的Ks后通过Ks来区分。
+4.4.1. 计算基因对的Ks
+文件准备
-fq2psmcfa -q20 diploid.fq.gz > diploid.psmcfa
格式转换
+此前得到了genepairs.tsv文件(或者进行筛除串联重复后的genepairs_del_tandem.tsv),即有了基因对ID文件。
-PSMC运行
-
-
-nohup psmc -p "4+25*2+4+6" -t15 -N30 -r4 -o diploid.psmc diploid.psmcfa &
-psmc计算二倍体间序列差异
-
-
-PSMC参数
+运行
-参数-p可根据经验或者近缘类群的文献设定,或者多尝试几个参数看看结果,-t,-N,-r可用默认参数。
--p:代表psmc有效群体大小变化的图随时间变化划分的时间阶段单位数量,例如默认的-p “4+25*2+4+6”表示从古自今依次经历了一个4单位+25个2单位+一个4单位+一个6单位的时期。数字越大需要的计算资源越多。可根据经验调整。
--t:maximum 2N0 coalescent time [15]; 2N0的最大世代时间,代表the upper limit of the TMRCA。
--r: initial theta/rho ratio [4]; 起始θ/ρ率,默认4。
--N:maximum number of iterations [30];迭代的最大次数,默认30。
--o:指定输出的diploid.psmcfa文件。
+参考博客:https://yanzhongsino.github.io/2022/09/07/bioinfo_Ks_batch.calculation.Ks/
-3.2.3. 运行bootstrap的PSMC【推荐】 如果要运行多次抽样的PSMC,则在上面的格式转换后,先分割长序列,再用for循环语句运行。
+4.4.2. 区分两次WGDs 通过两次WGDs的Ks峰值来区分,比如两次WGDs的峰值分别为0.2和0.7,取平均值是0.45,则把Ks大于等于0.45的看作0.7代表的WGD,把Ks小于0.45的看作0.2代表的WGD。
+有两种方式区分,一种是把基因复制事件分类到两次WGDs中,一种是把基因对分类到两次WGDs中。我之前用的基因复制事件,但想想用基因对可能更准确。
-分割长序列
-
-
-splitfa diploid.psmcfa > split.psmcfa
若需要做bootstrap需先把太长序列分割
-
-
-bootstrap抽样运行PSMC
-
-
-for i in {1..100};do nohup psmc -b -p "6+25*2+6+8" -t15 -N30 -r4 -o round${i}.psmc split.psmcfa &
#-b参数表示bootstrap抽样做psmc,重复100次。估计服务器运算能力,可以10个重复作为一批。
-
-
-合并结果
-
-
-cat diploid.psmc round*.psmc >combine.psmc
#psmc结果合并
-
-3.3. 画图
-运行
+把基因复制事件分类到两次WGDs
-psmc_plot.pl -p -g 1 -u 4.79e-9 combine combine.psmc
-画图,生产combine.eps和combine.pdf。
+计算得到基因对的Ks后,把每次基因复制事件的所有基因对的Ks取平均值,根据Ks平均值来区分。
-参数
+把基因对分类到两次WGDs
--p:指用epstopdf把esp转化成pdf文件,相当于运行完多加一个epstopdf combined.eps
一步。
--g:number of years per generation [25],指定该物种的平均世代时间(即繁殖一代的时间),比如人的默认为25年,该处值为-g 25;许多草本植物为1年。
--u:absolute mutation rate per nucleotide [2.5e-08],指定该物种碱基替换率,单位是subst./syn. site/year,比如默认水稻的2.5e-08,文献里提到的蕨类4.79e-9(Barker 2009)。参考已有文献对研究类群的替换率的推断,也可由进化树的枝长除以r8s评估该物种的分歧时间得到。
+直接根据基因对的Ks来区分。
-4. references
-https://github.com/lh3/psmc
+4.5. WGD后保留基因的分析 得到特定WGD后保留的基因对后,可以用富集分析或其他分析看保留了一些什么基因,是否有进化意义,或者是否与适应、特定的遗传性状等相关。
+4.6. WGD后保留TF的分析 分析WGD后保留的基因中的转录因子(transcription factor,TF)也是一个可考虑的点。 除了直接看WGD后保留的基因中包含了什么种类和多少数量的TF外,还可以通过利用转录因子数据库PlantTFDB来做WGD后保留的每种TF的保留模式的进一步分析。
+详情可参考博客:https://yanzhongsino.github.io/2022/10/18/bioinfo_transcriptionFactor/
+5. references
+paper: https://www.sciencedirect.com/science/article/pii/S1674205219303594
@@ -7144,10 +6604,12 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
bioinfo
+ WGD
- biosoft
- PSMC
+ OrthoFinder2
+ WGD
+ gene duplication event
@@ -7466,120 +6928,104 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 基因组间的同线性分析 —— MCscan
- /2021/11/05/bioinfo_synteny_MCscan/
-
+ 用PSMC推断有效群体大小历史
+ /2022/10/17/bioinfo_psmc/
+
-1. MCscan背景 1.1. jcvi介绍 jcvi 是美国佐治亚大学唐海宝开发的一个生物信息学python库。主要有几个常见pipeline用到了jcvi库,一个是做基因组scaffoldding的ALLMAPS ,另一个是做基因组同线性分析的MCscan ,以及提取植物表型数据的GRABSEEDS 。
-1.2. MCscan介绍 用MCscan pipeline做两个基因组间的同线性分析,包括成对同线性(pairwise synteny)分析,宏观同线性(macrosynteny)分析,微观同线性(microsynteny)分析和结果的可视化(visualization)。
-成对同线性分析主要是制作同线性点图(dotplot),同线性深度直方图;宏观同线性分析主要是制作同线性染色体图。其中同线性深度直方图,同线性染色体图需要用到同线性点图的结果文件作为输入。
-微观同线性分析等后面用到再补坑。
-2. MCscan使用 2.1. 安装jcvi 2.1.1. 依赖 jcvi依赖包括biopython,numpy,matplotlib。
-MCscan依赖包括LASTAL。
-LASTAL可以用conda install -c bioconda last
安装,但我用conda安装的lastal和lastdb不能多线程运行,所以在运行python -m jcvi.compara.catalog ortholog --cpu=1
时用参数--cpu=1
来限制单线程运行。
-2.1.2. 安装jcvi 任意选一种安装方式
-
-pip install jcvi
-pip install git+git://github.com/tanghaibao/jcvi.git
-cd jcvi git clone git://github.com/tanghaibao/jcvi.git pip install -e .
+1. PSMC Pairwise Sequentially Markovian Coalescent (PSMC) 是李恒开发的一款软件,可以通过一个二倍体个体的基因组的分析获得这个个体代表的群体的有效群体大小的历史动态。
+2. PSMC分析原理 通过一个二倍体个体的基因组的等位基因上存在的变异位点计算序列间差异,从而推断序列的分化时间;计算所有等位基因(也可以换成等位片段)的分化时间。认为某个分化时间的等位基因数量越多,代表当时的有效群体大小越大,所以可以通过整个基因组上等位基因的分化时间的分布推断有效群体大小的历史动态。
+
+这个算法让人惊叹的点在于,我们可以只从一个个体的基因组上看到群体的进化历史。
+有意思的是,前些时候看《自私的基因》那本书的时候,书里的序也详细讲解了PSMC的算法,从等位基因回溯到基因的共同祖先,讲得很清晰,非专业人士也可以读懂,有兴趣的读者可以去看看。
+分析人类的有效群体大小历史时,在三百万年有一次共有的高峰,有可能是人类从猩猩中分化出来时期的群体规模高峰期。不过,这么久远的分化区域意味着高度差异的等位基因片段(高度杂合)。这些高度杂合的片段也有可能来自平衡选择,或重测序比对过程中重复序列不正确比对产生的错误SNP。因此,三百万年的高峰可能并不可信。
+
+3. PSMC运行 3.1. 文件准备
+基因组文件:genome.fa
+二代测序数据:sample_R1.clean.u.fq和sample_R2.clean.u.fq
-2.2. 准备输入文件 输入文件包括两个基因组的CDS/氨基酸序列文件(fa格式),两个基因组的注释坐标文件(bed格式)。
-2.2.1. jcvi支持直接从phytozome下载数据
-连接phytozome(需要登录,提前注册账号)python -m jcvi.apps.fetch phytozome
输入账户登录信息后,出现可以下载的基因组list。
-
-下载CDS序列和注释文件(gff格式),例如下载这两个物种:grape and peachpython -m jcvi.apps.fetch phytozome Vvinifera,Ppersica
-
-转换GFF为BED格式python -m jcvi.formats.gff bed --type=mRNA --key=Name --primary_only Vvinifera_145_gene.gff3.gz -o grape.bed
-
+3.2. 运行步骤 3.2.1. 准备全基因组二倍体一致序列
+二代序列mapping
-python -m jcvi.formats.gff bed --type=mRNA --key=Name --primary_only Ppersica_139_gene.gff3.gz -o peach.bed
-其中--primary_only
是用于去除多个转录本的,只保留一个。(原文是多个isoforms)一般不去也不影响后续步骤,加上更好吧。
-
-整理一下,获得CDS文件python -m jcvi.formats.fasta format Vvinifera_145_Genoscope.12X.cds.fa.gz grape.cds
+
+time bwa mem -t 12 genome.fa sample_R1.clean.u.fq sample_R2.clean.u.fq | samtools sort -@ 12 -m 12G > sample_sort.bam
把二代数据mapping到基因组上
+
+
+获取二倍体一致序列
-python -m jcvi.formats.fasta format Ppersica_298_v2.1.cds.fa.gz peach.cds
-2.2.2. 自己的数据
-gff2bedpython -m jcvi.formats.gff bed --type=mRNA --key=ID --primary_only sampleA.gff3.gz > sampleA.bed
+
+samtools mpileup -C50 -uf genome.fa sample_sort.bam | bcftools view --threads 16 -c - | vcfutils.pl vcf2fq -d 10 -D 100 |pgzip -p 12 >diploid.fq.gz
生成全基因组二倍体一致序列diploid.fq.gz
+bcftools view
可以换成bcftools call
+其中,vcfutils.pl vcf2fq -d 10 -D 100
的-d 10
参数是最小read depth,作者建议设置成平均depth的三分之一(1/3);-D 100
参数是最大read depth,建议设置成平均depth的两倍。
+
+
+上一步可分解为以下几步:
-python -m jcvi.formats.gff bed --type=mRNA --key=ID --primary_only sampleB.gff3.gz > sampleB.bed
-其中--primary_only
是用于去除多个转录本的,只保留一个。(原文是多个isoforms)一般不去也不影响后续步骤,加上更好吧。
-
-去重,会生成sampleA.uniq.bed和sampleB.uniq.bed,然后重命名
-python -m jcvi.formats.bed uniq sampleA.bed mv sampleA.uniq.bed sampleA.bed python -m jcvi.formats.bed uniq sampleB.bed mv sampleB.uniq.bed sampleB.bed
-
-提取cds和pep
-seqkit grep -f <(cut -f 4 sampleA.uniq.bed ) sampleA.cdna.all.fa.gz | seqkit seq -i > sampleA.cds seqkit grep -f <(cut -f 4 sampleA.uniq.bed ) sampleB.pep.all.fa.gz | seqkit seq -i > sampleA.pep seqkit grep -f <(cut -f 4 sampleB.uniq.bed ) sampeB.cdna.fa.gz | seqkit seq -i > sampleB.cds seqkit grep -f <(cut -f 4 sampleB.uniq.bed ) sampleB.pep.fa.gz | seqkit seq -i > sampleB.pep
+
+samtools mpileup -C50 -uf genome.fa sample_sort.bam | bcftools view --threads 16 -O z -o sample.vcf.gz
call snp,得到的是genotype likelihoods的vcf文件
+bcftools call sample.vcf.gz -c -v --threads 16 -O z -o sample.variants.vcf.gz
生成只有snp和indel的vcf文件,其中-c代表SNP calling选择consensus-caller算法,另可选-m即multiallelic-caller算法(更适合多种allel和罕见变异的情况)。
+bcftools view -H sample.variants.vcf.gz | wc -l
统计snp数量。snp数量除以基因组大小即可得到估计的杂合度。
+vcfutils.pl vcf2fq -d 8 -D 50 sample.variants.vcf.gz| pigz -p 12 > diploid.fq.gz
生成二倍体fq文件
+
+3.2.2. 运行单次PSMC
+格式转换
-2.3. 同线性点图 2.3.1. CDS的同线性点图dotplot
-确保sampleA.cds
,sampleA.bed
,sampleB.cds
,sampleB.bed
四个文件在同一目录下。
-运行python -m jcvi.compara.catalog ortholog --no_strip_names --cpu=1 sampleA sampleB
制作同线性点图。
+
+fq2psmcfa -q20 diploid.fq.gz > diploid.psmcfa
格式转换
+
+
+PSMC运行
---cpu=1
是因为conda安装的lastal不支持多线程,所以用单线程。
+
+nohup psmc -p "4+25*2+4+6" -t15 -N30 -r4 -o diploid.psmc diploid.psmcfa &
+psmc计算二倍体间序列差异
+
-运行时如果报错ERROR savefig failed. Reset usetex to False
是缺少dvipng包没能生成png格式图,但看看结果文件sampleA.sampleB.anchors还是完整生成了就可以进行下一步。
+PSMC参数
-2.3.2. 蛋白的同线性点图 与CDS一样,cds数据换成pep数据,在运行参数里加上数据类型--dbtype prot
即可。
-python -m jcvi.compara.catalog ortholog --dbtype prot --no_strip_names --cpu=1 sampleA sampleB
---cpu=1
是因为conda安装的lastal不支持多线程,所以用单线程。
-2.3.3. 结果 会生成五个结果文件。
-sampleA.sampleB.last: 基于LAST的比对结果
-sampleA.sampleB.last.filtered: LAST的比对结果过滤串联重复和低分比对
-sampleA.sampleB.anchors: 高质量的同线性区块
-sampleA.sampleB.lifted.anchors:增加了额外的锚点,形成最终的同线性区块
-sampleA.sampleB.pdf:同线性点图
+参数-p可根据经验或者近缘类群的文献设定,或者多尝试几个参数看看结果,-t,-N,-r可用默认参数。
+-p:代表psmc有效群体大小变化的图随时间变化划分的时间阶段单位数量,例如默认的-p “4+25*2+4+6”表示从古自今依次经历了一个4单位+25个2单位+一个4单位+一个6单位的时期。数字越大需要的计算资源越多。可根据经验调整。
+-t:maximum 2N0 coalescent time [15]; 2N0的最大世代时间,代表the upper limit of the TMRCA。
+-r: initial theta/rho ratio [4]; 起始θ/ρ率,默认4。
+-N:maximum number of iterations [30];迭代的最大次数,默认30。
+-o:指定输出的diploid.psmcfa文件。
-同线性点图一般可以看点连成的比较长的线,在同一横坐标范围有几根线,或者在同一纵坐标范围有几根线,从而判断两个基因组的倍数关系。
-
-
-Figure 1. 同线性点图结果示例
from MCscan jcvi viki
-2.4. 同线性深度直方图
-在同线性点图运行成功获得sampleA.sampleB.anchors结果文件的前提下
-运行python -m jcvi.compara.synteny depth --histogram sampleA.sampleB.anchors
-生成sampleA.sampleB.depth.pdf,显示了同线性深度比例。
-
-
-
-Figure 2. 同线性深度直方图结果示例
from MCscan jcvi viki
-2.5. 同线性染色体图 2.5.1. 输入文件
-seqids文件
+3.2.3. 运行bootstrap的PSMC【推荐】 如果要运行多次抽样的PSMC,则在上面的格式转换后,先分割长序列,再用for循环语句运行。
+
+分割长序列
-指定展示的染色体ID,两行对应两个物种,每行的染色体之间逗号隔开,不能有空行。
-seqids文件染色体的顺序对应同线性染色体图的顺序,可以根据前面得到的同线性点图来调整顺序使两个基因组的同线性对应,使图更清晰。
+splitfa diploid.psmcfa > split.psmcfa
若需要做bootstrap需先把太长序列分割
-scaf001,scaf002,scaf003,scaf004,scaf005,scaf006,scaf007,scaf008,scaf009,scaf010,scaf011,scaf012,scaf013,scaf014 scaffold1,scaffold2,scaffold3,scaffold4,scaffold5,scaffold6,scaffold7
-
-.simple文件
+bootstrap抽样运行PSMC
-每行代表一个同线性区块
-一共六列,前四列是两个物种的同线性区块的上下限基因,第五列是评分,第六列是方向。
-用前面分析同线性点图的结果文件.anchors创建。
-运行python -m jcvi.compara.synteny screen --minspan=30 --simple sampleA.sampleB.anchors sampleA.sampleB.anchors.new
会生成sampleA.sampleB.anchors.simple文件。
+for i in {1..100};do nohup psmc -b -p "6+25*2+6+8" -t15 -N30 -r4 -o round${i}.psmc split.psmcfa &
#-b参数表示bootstrap抽样做psmc,重复100次。估计服务器运算能力,可以10个重复作为一批。
-layout文件
+合并结果
-设置绘制参数。前三列是设置图的位置坐标信息,整个图的x和y轴都是[0-1]范围。第四列是设置旋转角度,第五列是设置染色体颜色,第六列是展示的标签,第七列是对齐方式,第八列指定bed文件。
-注意, #edges下的每一行开头都不能有空格。用于指定simple文件。# y, xstart, xend, rotation, color, label, va, bed .6, .2, .8, 0, lightblue, sample_A, top, sampleA.bed .4, .2, .8, 0, lightpink, sample_B, top, sampleB.bed # edges e, 0, 1, sampleA.sampleB.anchors.simple
+cat diploid.psmc round*.psmc >combine.psmc
#psmc结果合并
-2.5.2. 运行 python -m jcvi.graphics.karyotype seqids layout
-生成karyotype.pdf文件,为同线性双染色体图
-
-
-Figure 3. 同线性双染色体图结果示例
from MCscan jcvi wiki
-2.5.3. tips
-运行虽然报错ERROR savefig failed. Reset usetex to False.
,应该是没能生成png图,但还是生成了pdf图文件。
-当label用的名称过长时,label和图容易重叠,没有好的办法解决,最好用短一点的label。
+3.3. 画图
+运行
+
+
+psmc_plot.pl -p -g 1 -u 4.79e-9 combine combine.psmc
+画图,生产combine.eps和combine.pdf。
-2.5.4. 个性化 2.5.4.1. highlight指定同线性区块 如果要突出显示指定的同线性区块(一般用于展示染色体倍数关系),则在sampleA.sampleB.anchors.sample文件中的对应同线性区域行的前面加上yellowgreen*
,表示这行的颜色用yellowgreen展示。
-然后再运行python -m jcvi.graphics.karyotype seqids layout
就会生成突出显示的图。
-3. references
-https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)
-https://xuzhougeng.top/archives/Comparative-genomics-using-JCVI-part-one
+
+参数
+
+
+-p:指用epstopdf把esp转化成pdf文件,相当于运行完多加一个epstopdf combined.eps
一步。
+-g:number of years per generation [25],指定该物种的平均世代时间(即繁殖一代的时间),比如人的默认为25年,该处值为-g 25;许多草本植物为1年。
+-u:absolute mutation rate per nucleotide [2.5e-08],指定该物种碱基替换率,单位是subst./syn. site/year,比如默认水稻的2.5e-08,文献里提到的蕨类4.79e-9(Barker 2009)。参考已有文献对研究类群的替换率的推断,也可由进化树的枝长除以r8s评估该物种的分歧时间得到。
+
+4. references
+https://github.com/lh3/psmc
@@ -7589,101 +7035,259 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
bioinfo
- synteny
biosoft
- MCscan
- jcvi
- synteny
- colinearity
+ PSMC
- 基因组WGD事件的鉴定和时间估算 —— MCScanX,KaKa_Calculator
- /2021/11/27/bioinfo_synteny_MCScanX/
-
+ 基因流及其推断
+ /2022/04/10/bioinfo_geneflow_intro/
+
-1. MCScanX介绍 MCScanX调整MCScan算法 进行检测基因组间或基因组内的同线性,并附加了14个下游分析和可视化的脚本。
-2. MCScanX同线性分析 2.1. 种内同线性分析MCScanX 2.1.1. 准备输入文件 MCScanX做同线性分析需要两个输入文件sample.gff(四列数据)和sample.blast。
-如果是多个物种,则把多个物种的gff3文件和pep.fa文件合并后再准备sample.gff和sample.blast输入文件。
+1. 基因流(gene flow)/杂交(hybridization)/渐渗(introgressive) 基因流,杂交和渐渗通常一起讨论,有些情况下甚至三者在说同一件事。从定义判断,基因流通常发生在种内群体间,杂交则是发生在种间,渐渗是指杂交加回交产生的一种现象。 可以这样理解,杂交和渐渗都是基因流的具体结果。
-sample.gff
+基因流(gene flow)
-与gff3文件格式不一样,这里的sample.gff包含四列数据,第一列染色体ID,第二列基因ID,第三和第四列分别是起始和终止位置。
-cat sample.gene.gff3 |awk '{if($3=="gene"){print $1,$9,$4,$5}}'|sed "s/;.*;//g"|sed "s/ID=//g"|sed "s/ /\t/g" >sample.gff
从gff3文件准备sample.gff文件
+基因流是指遗传物质在不同群体间的流动。
+造成基因流动的原因可能是个体或配子(例如花粉)在群体间的迁徙,或者不同群体间个体的交配等。
+基因流可能发生在同一物种的不同群体间,也可能发生在不同物种间。
-sample.blast
+杂交(hybridization)
-makeblastdb -in sample.pep.fa -dbtype prot -out index/sample.pep #给蛋白序列建库 blastp -query sample.pep.fa -db index/sample.pep -out sample.blast -evalue 1e-5 -num_threads 12 -outfmt 6 -num_alignments 5 & #进行自我比对,生成6号格式的比对结果sample.blast
-
-2.1.2. 运行MCScanX 在有sample.gff和sample.blast两个文件的目录下,指定前缀sample运行MCScanX sample
。
-重要参数解释:
--s MATCH_SIZE,default: 5。每个共线性区块包含的基因数量的下限。
--m MAX_GAPS,default:25。在共线性区块中允许的最大gaps数量。
--b patterns of collinear blocks。0:intra- and inter-species (default); 1:intra-species; 2:inter-species。
+杂交指不同物种间通过有性生殖实现配子融合形成下一代的过程。
-2.2. 种间同线性分析MCScanX_h MCScanX_h是MCScanX软件下的一个程序,输入文件和运行方式与MCScanX很像。
-
-原理
+
+渐渗(introgressive)
-可用MCScanX_h分析指定基因对的同线性关系,用于确认orthofinder或者OrthoMCL等软件鉴定的物种间的orthologs基因对。
-如果要分析物种间orthologs的Ks分布来确定物种分化时间,直接用MCScanX做物种间共线性分析会同时得出orthologs和paralogs的结果,但MCScanX_h则可以指定orthofinder或者OrthoMCL鉴定的orthologs基因对。
-可以这样理解,orthofinder鉴定出物种A和物种B的orthologs(物种A和B各只有一个基因的那些行),然后用MCScanX_h确认鉴定的orthologs的同线性关系,从而更加确认orthologs的可靠性。
+渐渗是指通过种间杂种与亲本物种之一的反复回交,将遗传物质从一个物种转移到另一个物种的基因库中,是一个长期的过程。
-
-运行的区别
+2. 推断基因流/杂交 通常在物种内检测不同地区的群体间是否存在基因流,也可以在物种间检测基因流来判断杂交/渐渗,物种间的基因流会导致系统发育树的不稳定或核质冲突等问题,所以可以推断系统发育网络来检测所有物种对的基因流。
+2.1. 推断基因流的软件
+通过计算Patterson’s D值(ABBA-BABA值)和相关统计量来判断基因流:Dsuite(2020),ADMIXTOOLS(2012),HyDe(2018),ANGSD(2011,2018),POPGENOME(2014,2019),COMP-D(2020)。
+推断系统发育网络:PhyloNetworks(2017),PhyloNet(2008,2018),TreeMix(2012),BEAST2(2017)。
+基于最大似然法:3s(2017)
+基于MCMC算法的:IM, IMA
-
+
+ bioinfo
+ gene flow
+
+
+ gene flow
+ hybridization
+ Dsuite
+ introgressive
+ PhyloNetworks
+ population networks
+ TreeMix
+ 3s
+
+
+
+ 基因组WGD事件的鉴定和时间估算 —— MCScanX,KaKa_Calculator
+ /2021/11/27/bioinfo_synteny_MCScanX/
+
+
+1. MCScanX介绍 MCScanX调整MCScan算法 进行检测基因组间或基因组内的同线性,并附加了14个下游分析和可视化的脚本。
+2. MCScanX同线性分析 2.1. 种内同线性分析MCScanX 2.1.1. 准备输入文件 MCScanX做同线性分析需要两个输入文件sample.gff(四列数据)和sample.blast。
+如果是多个物种,则把多个物种的gff3文件和pep.fa文件合并后再准备sample.gff和sample.blast输入文件。
+
+sample.gff
+
+
+与gff3文件格式不一样,这里的sample.gff包含四列数据,第一列染色体ID,第二列基因ID,第三和第四列分别是起始和终止位置。
+cat sample.gene.gff3 |awk '{if($3=="gene"){print $1,$9,$4,$5}}'|sed "s/;.*;//g"|sed "s/ID=//g"|sed "s/ /\t/g" >sample.gff
从gff3文件准备sample.gff文件
+
+
+sample.blast
+
+makeblastdb -in sample.pep.fa -dbtype prot -out index/sample.pep #给蛋白序列建库 blastp -query sample.pep.fa -db index/sample.pep -out sample.blast -evalue 1e-5 -num_threads 12 -outfmt 6 -num_alignments 5 & #进行自我比对,生成6号格式的比对结果sample.blast
+
+2.1.2. 运行MCScanX 在有sample.gff和sample.blast两个文件的目录下,指定前缀sample运行MCScanX sample
。
+重要参数解释:
+
+-s MATCH_SIZE,default: 5。每个共线性区块包含的基因数量的下限。
+-m MAX_GAPS,default:25。在共线性区块中允许的最大gaps数量。
+-b patterns of collinear blocks。0:intra- and inter-species (default); 1:intra-species; 2:inter-species。
+
+2.2. 种间同线性分析MCScanX_h MCScanX_h是MCScanX软件下的一个程序,输入文件和运行方式与MCScanX很像。
+
+原理
+
+
+可用MCScanX_h分析指定基因对的同线性关系,用于确认orthofinder或者OrthoMCL等软件鉴定的物种间的orthologs基因对。
+如果要分析物种间orthologs的Ks分布来确定物种分化时间,直接用MCScanX做物种间共线性分析会同时得出orthologs和paralogs的结果,但MCScanX_h则可以指定orthofinder或者OrthoMCL鉴定的orthologs基因对。
+可以这样理解,orthofinder鉴定出物种A和物种B的orthologs(物种A和B各只有一个基因的那些行),然后用MCScanX_h确认鉴定的orthologs的同线性关系,从而更加确认orthologs的可靠性。
+
+
+运行的区别
+
+
+区别是输入文件用sample.homology代替sample.blast。
+sample.homology是tab分隔的成对基因ID的list。
+
+2.2.1. 输入文件
+sample.gff:格式同上面MCScanX的说明。
+sample.homology
+
+
+包含两列数据,是两个物种的基因对,代表一一对应的同源关系。这里用来计算物种间分化,所以指定的是两个物种间一一对应的直系同源关系。
+可从orthofinder或者OrthoMCL等软件鉴定的物种间提取。
+从orthofinder的./Results_Apr01/Orthogroups/Orthogroups.txt
文件提取只包含物种A和物种B各有一个基因的行。如果是多物种做的orthofinder,则提取只包含物种A和物种B各有一个基因的行后把其他物种删除。提取后把列间分隔符改成tab。(ps:用不同物种跑的orthofinder提取结果会有一点差异)
+
+2.2.2. 运行MCScanX_h 与运行MCScanX一样:
+
+在有sample.gff和sample.homology两个文件的目录下,指定前缀sample运行MCScanX_h sample
。
+参数也一致。
+
+2.3. 结果文件
+sample.collinearity
+
+共线性结果文件,包括三部分内容:
+
+参数(parameters)
+基本统计信息(statistics):共线性基因的总数,总基因数,共线性基因占比。
+共线性区块(block)信息:一个Alignment代表一个共线性区块(0起始编号)。后面跟着这个共线性区块的基因对的信息。第一列:block编号;第二列:基因对编号;第三列和第四列:基因对名称;第五列:blast比对的e_value值。
+
+sample.collinearity示例:
+############### Parameters ############### # MATCH_SCORE: 50 # MATCH_SIZE: 5 # GAP_PENALTY: -1 # OVERLAP_WINDOW: 5 # E_VALUE: 1e-05 # MAX GAPS: 25 ############### Statistics ############### # Number of collinear genes: 21371, Percentage: 56.25 # Number of all genes: 37996 ########################################## ## Alignment 0: score=352.0 e_value=1.2e-17 N=8 scaf014&scaf014 plus 477- 0: bv37796 bv37889 3e-06 477- 1: bv37820 bv37905 6e-24 477- 2: bv37822 bv37926 9e-29 477- 3: bv37826 bv37930 4e-62 477- 4: bv37828 bv37931 1e-74 477- 5: bv37829 bv37932 3e-142 477- 6: bv37830 bv37933 6e-78 477- 7: bv37832 bv37934 3e-76 ## Alignment 1: score=300.0 e_value=6.1e-08 N=6 scaf014&scaf014 minus 478- 0: bv35514 bv35525 0 478- 1: bv35515 bv35524 0 478- 2: bv35516 bv35523 1e-81 478- 3: bv35517 bv35522 0 478- 4: bv35518 bv35521 1e-115 478- 5: bv35519 bv35520 0 ... ... ... ...
+
+
+sample.html
+
+网页文件所在的文件夹,里面有每条染色体一个html文件。html文件用浏览器打开,包含三列信息。
+
+第一列是复制深度。
+第二列是这条染色体上所有基因的排列顺序,串联重复基因的背景为红色。
+第三列和之后列是对应的比对上的基因名称。
+
+
+sample.tandem
+
+包含基因组内串联重复 的基因ID的list。
+notes:MCScanX 会根据 gff 文件中染色体号的前缀(前2个字符)将染色体划分为不同的物种,若 MCScanX 识别到输入数据中包含多个物种,则不会生成 tandem 文件。
+3. MCScanX下游分析 3.1. 提取block位置 cat sample.collinearity|grep -C 1 "Alignment"|sed '/^--$/d' >block.tem #提取block首尾基因对 tail -1 sample.collinearity >>block.tem #提取block首尾基因对 cat block.tem |sed -e "s/## //g" -e "s/.*gene/gene/g"|tr '\n' ' '|sed "s/Alignment /\nAlignment/g" |sed -e "/^$/d" -e "s/ /\t/g"|sed -e "s/\t\+/\t/g" -e "s/\://g"|awk -v FS="\t" -v OFS="\t" '{print $1,$2,$3,$4,$5,$6,$7,$10,$8,$11}' >block.txt #整理成一个block一行信息的格式,其中"s/.*gene/gene/g"部分的gene修改成geneID的前缀用来去除多余信息。
+
3.2. 绘图脚本 MCScanX的downstream_analyses目录包含一些下游脚本。
许多java脚本可以实现绘图功能,包括:
@@ -7854,341 +7458,248 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
biosoft
- ggplot2
- WGD
Ks
ParaAT
KaKs_Calculator
+ ggplot2
divergence time
paml
+ WGD
synteny
colinearity
MCScanX
- 分析基因组共线性、计算Ks和鉴定WGD —— WGDI
- /2021/09/11/bioinfo_synteny_WGDI/
-
+ 3s软件
+ /2022/09/22/bioinfo_geneflow_3s/
+
-1. WGDI介绍 WGDI (Whole-Genome Duplication Integrated analysis)是python写的命令行工具,用于多倍化和跨物种基因组比对的综合分析,包括鉴定基因组内共线性区块,Ks计算,全基因组复制事件(WGD, whole genome duplication)的数量和时间的鉴定。
-WGDI主要的三个功能是:
-
-多倍体推断
-基因组同源性的层次推断
-祖先染色体核型分析
-
-2. WGDI安装 WGDI的依赖:PAML,MAFFT,MUSCLE,PAL2NAL,IQTREE。
-安装有三种方法:
-
-condaconda create -c bioconda -c conda-forge -n wgdi wgdi
建议新建一个环境
-pippip install wgdi
-githubgit clone https://github.com/SunPengChuan/wgdi.git cd wgdi python setup.py install
+1. 检测基因流的软件
+基于MCMC算法的:IM,IMA
+基于似然法的:除了3s外的其他软件只能分析两条序列
+Huristic method:ABBA(基于D统计量的计算,无数学模型,无法估计),Hyde
-3. WGDI进行共线性分析 3.1. 初始输入文件 3.1.1. 输入文件 WGDI需要三个输入文件,分别是基因的位置信息文件sample.gff,染色体长度信息文件sample.len和BLAST的输出文件sample.blast.txt,要求格式如下:
+2. 3s软件简介 3s,3 species的简称。
+软件是杨子恒和朱天琪团队开发,基于C语言的,通过计算似然率来检测两个近缘物种/群体间基因流的软件。推荐添加一个外类群,所以称为三个物种(3 species),适用于基因组数据。
-input.gff
+3s简介
-一共七列,以tab分隔,分别为chr(chromosome number),geneid(gene name),start,end,direction(strand+/-),order(order of each chromosome,starting from 1, 每个chr内部从1开始的顺序),original(original id and not read,旧的id,不会读入)。
-和典型的GFF格式不一样
+3s利用似然率来推断两个物种/群体间的基因流方向和强度
-input.len
+3s输入
-一共三列,以tab分隔,染色体长度信息和染色体上的基因个数,chr(chromosome number), chr_length(染色体长度bp), chr_gene_number(注释到单个染色体的基因数量)。
-后面分析作图,比如点图,图中显示的染色体顺序是依据这个文件的顺序来决定的。所以可以通过修改这个文件的染色体顺序来修改图的显示。
+输入:基因组或其他测序序列phylip文件
+输出:基因流方向和强度
-LG01 35874591 5368 LG02 29224816 3939 LG03 27760256 3620
-
-sample.blast.txt
+3s优势和不足
-蛋白质序列的自我比对,BLAST的-outfmt 6输出格式的文件sample.blast.txt
+随着数据量线性增加运算时间,运算快,适合基因组数据。
+一次只能检测三个物种/群体,无法建立系统发育网。
-3.1.2. 用开发者脚本准备input.gff和input.len 开发者准备的三个脚本来对原始的sample.gff进行处理,对基因名称进行排序和重命名,生成新基因名称,以及输入文件input.gff,input.len,和用来准备sample.blast.txt的input.pep.fa。
-脚本地址:https://github.com/SunPengChuan/wgdi-example/tree/main/genome/Aquilegia_coerulea/Aquilegia_coerulea
-
-01.getgff.py
+3. 开发历史
+3s软件主页
-功能:从传统的gff3格式的注释文件sample.gff中提取中间文件temp.gff
-用法:python 01.getgff.py sample.gff temp.gff
-temp.gff格式如下:
-
-LG01 DR000002 884947 886421 + LG01 DR000003 886634 890799 -
-
-
-import sysimport pandas as pddata = pd.read_csv(sys.argv[1 ], sep="\t" , header=None ,skiprows=3 ) data = data[data[2 ] == 'mRNA' ] data = data.loc[:, [0 , 8 , 3 , 4 , 6 ]] data[8 ] = data[8 ].str .split(':|=|;' ,expand=True )[1 ] data[0 ] = data[0 ].str .replace('Chr_0?' ,'' ) data.to_csv(sys.argv[2 ], sep="\t" , header=None , index=False )
-
-02.gff_lens.py
+2012年,朱天琪和杨子恒开发的检测基因流的模型SIM3s,发布了软件3s.v2.1版本,包含6个参数。
-功能:从temp.gff中生成两个输入文件:input.gff和input.len
-用法:python 02.gff_lens.py temp.gff input.gff input.len
-这个脚本还对基因名称做了整理和重命名。先对temp.gff进行排序,再按照物种标识符(md)+染色体名称(LG01)+基因名称(g00001)进行重命名,input.gff的第二列是新名称,第七列是旧名称。
-修改物种标识符(md)可以通过修改脚本的md来实现。
+文章发表在MBE上:https://academic.oup.com/mbe/article/29/10/3131/1029349
-LG01 mdLG01g00001 23987 27163 + 1 DR032173 LG01 mdLG01g00002 30894 32329 - 2 DR032172
-
-
-import sysimport pandas as pddata = pd.read_csv(sys.argv[1 ], sep="\t" , header=None ) new = data[1 ].str .split('.' ).str data['id' ] = new[0 ].values data['cha' ] = data[3 ]-data[2 ] for name, group in data.groupby(['id' ]): if len (group) == 1 : continue ind = group.sort_values(by='cha' , ascending=False ).index[1 :].values data.drop(index=ind, inplace=True ) data['order' ] = '' data['newname' ] = '' data[2 ] = data[2 ].astype('int' ) print (data.head())for name, group in data.groupby([0 ]): number = len (group) group = group.sort_values(by=[2 ]) data.loc[group.index, 'order' ] = list (range (1 , len (group)+1 )) data.loc[group.index, 'newname' ] = list ( ['md' +str (name)+'g' +str (i).zfill(5 ) for i in range (1 , len (group)+1 )]) data['order' ] = data['order' ].astype('int' ) data = data[[0 , 'newname' , 2 , 3 , 4 , 'order' , 1 ]] print (data.head())data = data.sort_values(by=[0 , 'order' ]) data.to_csv(sys.argv[2 ], sep="\t" , index=False , header=None ) lens = data.groupby(0 ).max ()[[3 , 'order' ]] lens.to_csv(sys.argv[3 ], sep="\t" , header=None )
-
-03.seq_newname.py
+2017年,提出了Introgression模型,发布了版本3s.v3.1版本,包含9个参数。
-import sysimport pandas as pdfrom Bio import SeqIOdata = pd.read_csv(sys.argv[1 ], sep="\t" , header=None , index_col=6 ) id_dict = data[1 ].to_dict() print (data.head())seqs = [] n = 0 for seq_record in SeqIO.parse(sys.argv[2 ], "fasta" ): if seq_record.id in id_dict: seq_record.id = id_dict[seq_record.id ] n += 1 else : continue seqs.append(seq_record) SeqIO.write(seqs, sys.argv[3 ], "fasta" ) print (n)
-
-generate_conf.py脚本准备input.gff和input.len
-脚本generate_conf.py
+
+2020年,据作者朱天琪说开发了新的more general migration model模型,包含15个参数,2022.09还未发表。
-使用脚本generate_conf.py:https://github.com/xuzhougeng/myscripts/blob/master/comparative/generate_conf.py 从基因组genome.fa和注释文件sample.gff3中获取input.gff和input.len文件。
-
-命令是python generate_conf.py -p input genome.fa sample.gff3
。
-
+假设所有物种间都可能有基因,1-2间,2-3间,1-3间,3-5之间都可能存在基因流。
+这个模型参数太多,最好根据先验知识尽可能设置一些无基因流的群体间参数为0,再进行计算更准确。
+如果实在没有先验知识,那先打开所有可能基因流,运行一遍,再把基因流强度很低的位置关闭,再运行一遍获取更准确结果。
+2020年09月据说代码已有,2022.09说还未发表,可以关注着。
-
-可能的错误
+4. 3s软件原理 4.1. 模型基础
+Wright-Fisher模型:溯祖模型的逆向过程
+多物种溯祖模型
-如果存在contig没被注释到基因,generate_conf.py会报错:
-
-Traceback (most recent call last): File "generate_conf.py", line 117, in <module> chrom=chrom,lens=lens,count=gene_count[chrom]), file=len_file) KeyError: 'contig030'
-
-
-并在contig030的地方停止继续写入input.len,input.gff不受影响。
+不区分物种间和群体间,这里的物种=群体
+无法跨物种边界溯祖
-
-可以用下面的脚本get_len.sh获取input.len
+4.2. 3s模型的参数定义
+三个物种:两个近缘种(1和2)和一个外类群(3)
+序列数据由中性位点组成
+θ1 =4N1 μ,θ2 =4N2 μ,θ4 =4N4 μ,θ5 =4N5 μ是物种1,2,4,5的群体大小参数。这里没有物种3是因为假设物种3没有基因流。
+τ0, τ1是两个物种的分化时间
+迁移率(migration rate)Mij =Nj mij 。定义是在真实世界,从群体i向群体j的迁移个体的数量,其中Nj 代表群体j的群体大小,mij 代表迁移比例。
-# samtools faidx genome.fa cat genome.fa.fai |cut -f1,2 >chrom.len # cat sample.gff3 |awk '$3 == "gene" {print $1}' >chrom.tem contig=$(head -1 chrom.tem |sed "s/[0-9]//g") c_number=$(tail -1 chrom.tem|sed "s/[A-Za-z]//g") for i in $(seq -w 1 $c_number); do echo -e $contig$i"\t"$(grep "$contig$i" chrom.tem |wc -l);done >chrom.count # join chrom.len chrom.count|sed "s/ /\t/g" >input.len # rm chrom.tem chrom.len chrom.count
+
-准备sample.blastp.txt 用蛋白序列建库,blastp进行蛋白序列的自我比对,获取-outfmt 6格式的输出文件sample.blastp.txt。 如果用开发者脚本准备的输入文件,则这里需要用重命名的input.pep.fa代替sample.pep.fa。 命令如下:
-
-makeblastdb -in sample.pep.fa -dbtype prot
-blastp -num_threads 32 -db sample.pep.fasta -query sample.pep.fa -outfmt 6 -evalue 1e-5 -num_alignments 20 -out sample.blastp.txt &
-
-3.2. 共线性分析 WGDI的分析的参数都是在配置文件中进行设置,所以分析都需要先创建配置文件,然后修改配置文件,最后运行程序。 每个配置项中都有gff1,gff2;lens1,lens2;blast这五个参数,是相同的。
-3.2.1. 绘制共线性点阵图 WGDI的d模块绘制基因组内的共线性点阵图,初略估计是否有基因复制区域。 共线性点阵图是把两个基因组(做WGD分析则是把一个基因组的两份复制)分别作为横纵坐标,把检测到的同源匹配基因在相应位置做点标记;点数量多且相邻时,会有点组成的线出现,线代表比较长的共线性区块,代表着历史上的复制事件。
-
-创建配置文件input.confwgdi -d ? >input.conf
-
-创建input.conf配置文件,里面包含[dotplot]配置参数。
-
-修改配置文件
-
-
-input.conf配置文件的信息
-[dotplot] blast = blast file # sample.blastp.txt文件 gff1 = gff1 file # 比对项1的input.gff文件 gff2 = gff2 file # 比对项2的input.gff文件,如果是自我比对,则gff1和gff2一样 lens1 = lens1 file # 比对项1的input.len文件 lens2 = lens2 file # 比对项2的input.len文件,如果是自我比对,则lens1和lens2一样 genome1_name = Genome1 name # 比对项1的基因组名称 genome2_name = Genome2 name # 比对项2的基因组名称,如果是自我比对,与genome1_name一致 multiple = 1 # 最好的同源基因对数量,输出结果图中会用红点表示。可以先画图,再来修改这个值。 score = 100 # blast输出的score过滤 evalue = 1e-5 # blast输出的evalue过滤 repeat_number = 10 # 显示的一个基因对应的同源基因的数量 position = order # 从order,start,end中选 blast_reverse = false ancestor_left = ancestor file or none # 点阵图左侧物种的祖先染色体区域,一般设置成none就好 ancestor_top = ancestor file or none # 点阵图顶侧物种的祖先染色体区域,一般设置成none就好 markersize = 0.5 # 点的尺寸 figsize = 10,10 # 图的尺寸 savefig = savefile(.png, .pdf, .svg) # 保存的图片结果名称和格式
-
-input.conf配置文件示例
-[dotplot] blast = sample.blastp.txt gff1 = input.gff gff2 = input.gff lens1 = input.len lens2 = input.len genome1_name = sample genome2_name = sample multiple = 1 score = 100 evalue = 1e-5 repeat_number = 10 position = order blast_reverse = false ancestor_left = none ancestor_top = none markersize = 0.5 figsize = 10,10 savefig = out_dotplot.png
-
-
-运行wgdi -d input.conf
-
-结果 结果保存在out_dotplot.pdf的图中。
-
+Figure 1. 3个物种的基因流模型参数
图源:https://academic.oup.com/sysbio/article/66/3/379/2670069?login=false
+4.3. SIM3s模型
+通过假设两个参数相等,θ1 =θ2 =θ;M12 =M21 =M
+结果是共有6个参数需要评估:Θ={τ0,τ1,θ4,θ5,θ,M}
+这个模型是2012年发表的老版本模型SIM3s(symmetric IM model for three species)
-结果解释:
-
-图中有三种颜色,红色表示genome2的基因在genome1中的最优同源匹配,次优的四个基因是蓝色,其余的是灰色。
-WGDI会过滤掉自身与自身的比对结果,所以图中对角线出现的片段不是自身比对结果,而是串联基因(tandem)形成的共线性区块。
-如果基因组存在加倍事件,则基因组不同区域的同源基因的排布顺序会比较一致,在图上就能观察到多个点排列组成的“线”。
-
-3.2.2. 获取共线性区块 WGDI的icl(Improved version of ColinearScan)模块用于获取共线性区块的具体位置信息。与MCScanX软件功能一致。
+4.4. 3s模型背后的计算 基于最大似然法估计参数:先算似然函数,对参数做最优,似然值最大的对应参数即为估计结果。
-建立配置文件wgdi -icl ? >>input.conf
+每个位点/序列计算一个似然值 ,似然值代表的是给定参数后基因树的概率。
+似然值的计算是通过马尔科夫链来描述和实现的,三个样本的初始状态是123。
+在比对好的三个样本的序列上对不同模式进行碱基计数。三个样本的碱基一致为同一种模式,12一致3不一致为一种模式,等等。
+3s软件的突变模型使用JC69模型,即各种碱基的任意方向和类型的替换速率是相等的,适合近缘物种/群体。
+通过似然比检验(Likelihood Ratio Test,LRT)来判断有无基因流:当按照95%显著临界值,2Δℓ>5.99时,则认为检验是显著的,即存在基因流,基因流的大小即最大似然估计值。
-在已有配置文件input.conf的基础上添加[collinearity]配置参数。
-
-修改配置参数
-[collinearity] gff1 = gff1 file # 比对项1的input.gff文件 gff2 = gff2 file # 比对项2的input.gff文件,如果是自我比对,则gff1和gff2一样 lens1 = lens1 file # 比对项1的input.len文件 lens2 = lens2 file # 比对项2的input.len文件,如果是自我比对,则lens1和lens2一样 blast = blast file # sample.blastp.txt文件 blast_reverse = false multiple = 1 # 最好的同源基因对数量,输出结果图中会用红点表示 process = 8 # 线程 evalue = 1e-5 # blast输出的evalue过滤 score = 100 # blast输出的score过滤 grading = 50,25,10 # 为red,blue,gray三种颜色的点指定不同的分数 mg = 25,25 # 检测共线性区域的最大gap值,即共线性区块内含的最大空缺基因数量。 pvalue = 1 # 显著性,评估共线性blocks的紧密程度和独特程度的参数,取值范围是0-1,更好的共线性范围是0-0.2。 repeat_number = 10 # 允许去除超过部分种群的同源基因数量 positon = order savefile = out.collinearity # 保存共线性结果的文件名
-
-运行wgdi -icl input.conf
-
+5. 3s的优势
+3s的计算基于极大似然法,极大似然法的优势在于计算量随着样本数是线性增加的,而比如贝叶斯,MCMC算法则是指数增加。
+使用的segment/locus数量越多,检验功效(指有基因流存在情况下检出率)越好,所以适合检验基因组这种大数据。
+假阳性很低(<5%可接受)
+基因流的方向和强度都可以被估计。
-4万基因的数据量,这一步耗时20分钟。
-
-结果 结果out.collinearity中记录着共线性区域。
+6. 3s模型假设和数据准备 6.1. 3s模型假设和数据选择
+使用中性位点避免重组的影响。
+3s假设segment之间是自由重组的,segment内部是不存在重组的。所以建议在基因组上取样的序列不要离得太近(建议50kb,至少大于10kb),序列长度不要太长(50bp-1kb)。
+使用的segment/locus数量越多,检验功效(指有基因流存在情况下检出率)越好,所以适合检验基因组这种大数据。
-# Alignment起始的行记录着共线性区块的信息,包括得分(score),显著性(pvalue),基因对数(N),strand(plus/minus)。
-3.2.3. 计算KaKs WGDI的ks模块计算共线性区块的基因对间的ka和ks。
-
-建立配置文件wgdi -ks ? >>input.conf
+6.2. 常用的数据准备方式
+适用于组装好的基因组数据
-在已有配置文件input.conf的基础上添加[ks]配置参数。
+
+将基因组切分为1kb的片段
+每隔50kb取1kb的片段
+将含有基因和基因上下游10kb的片段去除(基因通常被认为是非中性的)
+
-修改配置参数
-[ks] cds_file = input.cds.fa # 基因组(一个或多个)的cds序列 pep_file = input.pep.fa # 基因组(一个或多个)的氨基酸序列;可选参数,如果不设置,将用biopython模块翻译cds文件获得。 align_software = muscle # 选择多序列比对软件:{muscle,mafft} pairs_file = out.collinearity # tab分隔的共线性基因对。上一步共线性分析的结果文件,也支持MCScanX的共线性分析结果文件。 ks_file = out.ks # 保存ks结果的文件名
-
-运行wgdi -ks input.conf
-
+适用于获取的别人的partition数据
-WGDI会用muscle根据氨基酸序列进行联配,然后用pal2pal.pl基于cds序列将氨基酸联配转为密码子联配,最后用paml中的yn00和ng86两种方法计算ka和ks。
-4万基因的数据量,这一步耗时40分钟。
+去除间隔<10kb的partition
+删除序列长度<50bp或者>1000bp的partition
-
-结果
+
+适用于微生物等基因组非常小的样品
-out.ks结果有6列,对应的是每个基因的ka和ks。
+有许多微生物样品的基因组很小,能取的片段数量有限,影响分析结果。
+可以通过非独立重抽样增加片段数量。
+每个物种测序多个个体,共同作为一个数据源,以增加片段数量。比如ABC三个物种都测四个个体,A1B1C1,A2B2C2,A3B3C3,A4B4C4。
-$ head -2 out.ks id1 id2 ka_NG86 ks_NG86 ka_YN00 ks_YN00 vvi161s1g00311 vvi161s1g00312 0.2986 1.2027 0.3047 1.3864
+7. 3s软件使用 7.1. 3s软件安装 wget http://abacus.gene.ucl.ac.uk/software/3s.v3.1.tgz # 下载软件,只有6.74MB tar -zxf 3s.v3.1.tgz #解压缩和解包 cd 3s.v3.1 #进入文件夹 gcc -O3 -o 3s 3s.c tools.c lfun3s.c -lm #编译
-3.2.4. 整合共线性区块信息 WGDI的bi模块可以整合共线性区块和ks信息成一个可读性更强的csv文件。
-
-建立配置文件wgdi -bi ? >>input.conf
+7.2. 输入文件
+三个样本的碱基序列文件
-在已有配置文件input.conf的基础上添加[blockinfo]配置参数。
+
+phylip格式
+比对好的(aligned)
+
-修改配置参数
+3s.ctl:参数文件基本使用默认即可,不需要变动。
-[blockinfo] blast = input.blastp.txt gff1 = input.gff gff2 = input.gff lens1 = input.len lens2 = input.len collinearity = out.collinearity # 共线性区域结果文件 score = 100 evalue = 1e-5 repeat_number = 20 position = order ks = out.ks # ks结果文件 ks_col = ks_NG86 # 声明使用ks结果文件的列名 savefile = block_info.csv
+seed = -1 #随机数种子,-1使用时间种子 outfile = path/to/out #存储运行结果的路径 seqfile = sample_align.phylip #比对好的phylip格式的序列 Imapfile = mapfile.txt #map文件,即下面准备的输入文件;如果没有map文件,默认出现的前3个物种为物种1,2,3。 ratefile = ChenLi3s.Rate.txt # 这行作者建议删除,因为使用的JC69模型,无法改变不同碱基的替换率。 nloci = 1000 # 基因位点的数量。如果小于实际位点数,只计算前1000个;如果大于实际位点数,则报错。 npoints = 16 # 做数值积分的格点数,越大精度越高,但速度慢很多。用8,16,32;作者建议16,或者尝试32。 getSE = 0 # 通常设置为0,不算方差;如果设置成1,计算方差,运算速度大幅下降,但总体上来说都很快。算不算都行。 Small_Diff = 0.5e-9 #最大似然估计的时候,似然值到多小就停止计算,建议0.5e-9,在0.5e-8到1e-9范围内调整。 simmodel = 0 #0代表不用对称模型(symmetric models),1代表使用对称模型。对称模型是指所有群体大小参数都一样,一般不用。 models = 0 2 3 #计算的模型,3代表introgression模型。
-运行wgdi -bi input.conf
+mapfile
+
+
+用于指定三个物种分别是1,2,3的文本文件。
+每行两列,空格隔开。第一列物种名,第二列1,2,3。保存mapfile.txt
+
+
+
+7.3. 3s软件运行 运行命令3s 3s.ctl
即可
+7.4. 运行结果
+结果示例
+***Model 0 (M0)*** lnL = -342929.817009 MLEs theta4 theta5 tau0 tau1 theta1 theta2 theta3 0.002213 0.000337 0.000866 0.000431 0.001156 0.003993 0.000502 ***Model 2*** lnL = -342888.249022 2DlnL = +83.135973 MLEs theta4 theta5 tau0 tau1 theta1 theta2 theta3 M12 0.002248 0.000076 0.000853 0.000759 0.000987 0.001408 0.000500 0.934564
-结果
+结果的解释
-结果文件block_info.csv共11列:
-id:共线性结果的id
-chr1,start1,end1:点图左边的基因组共线性区块的位置范围
-chr2,start2,end2:点图上边的基因组共线性区块的位置范围
-pvalue:共线性结果评估,一般认为<0.01更合理
-length:共线性区块长度
-ks_median:共线性区块上所有基因对ks的中位数,用于评估ks分布
-ks_average:共线性区块上所有基因对ks的平均值
-homo1-n:multiple参数为n,则有n列,表示一个基因有n个最佳匹配时的取值,对应点阵图中的红点
-block1,block2:共线性区块上基因order的位置
-ks:共线性区块上基因对的ks值
-density1,density2:共线性区块的基因分布密集程度,值越大越密集
-class1,class2:在alignment模块中用到,对应两个block分组。默认值是0,表示两个block是同一组。这两列需要根据覆盖率、染色体核型等多个方面进行确定。
+Model 0是没有基因流的情况下估计得到的参数,theta是θ,tau是τ。
+Model 2是存在基因流的情况下估计得到的参数,M12代表的是从物种1到物种2的基因流,强度是0.934564,代表平均每一代有0.934564个个体从物种1迁移到物种2,是很强的基因流。
-3.3. 根据ks分布拟合单次WGD事件
-背景知识 在Lynch和Conery在2000年发表在Science的论文中,他们证明了小规模基因复制的Ks分布是L型,而在L型分布背景上叠加的峰则是来自于演化历史中某个突然的大规模复制事件。 L型分布(呈指数分布, exponential distribution)的峰可能是近期的串联复制引起,随着时间推移基因丢失,形成一个向下的坡。正态分布(normal distribution)的峰则是由全基因组复制引起。
+7.5. 结果有效性 7.5.1. 如何保证收敛
+同一数据,运行多次保证结果一致,且2dlnL>0。当多次结果不一致时,可以考虑调小small_diff,不行再调大。
+遇到收敛困难时,可以先在M0(即无基因流的模式)下分析,把M0的MLE作为其他模型的初值。
+如果估计值触碰到上下界且明显不合理,需多次分析;可以尝试通过修改in.3s文件将初值设置在更合理的地方。
+将不可能出现迁移的方向迁移率设置为0,减少参数个数。
-这就意味着我们可以根据ks频率分布图的正态分布峰来判断物种历史上发生过的全基因组复制事件,并通过ks值拟合峰值获得WGD事件发生的时间。
-
-根据ks分布拟合单次WGD事件的峰
+7.5.2. 如何选择正确模型
+如估计的树接近星状树,需调整物种树再次分析。这个调整物种树就是调整mapfile.txt文件,使得不同物种成为外类群。如果调整成任意物种树都是星状树,则可以作为辐射进化(即τ0,τ1时间很短)的证据。
+如果迁移率Mij 触碰下界可将该迁移率固定为0后重新分析,如两次分析-lnL相差在1.92内,则认为参数少的模型更加准确。
+多次分析后找出最优模型
+8. reference 这篇笔记主要是参考“朱天琪老师在中国科学院微生物研究所真菌学国家重点实验室主办的2020种群遗传学与基因组学高级培训班(第二期)和2022组学驱动的进化生态高级培训班的讲座和PPT”。
+
-通过kspeaks(-kp)模块过滤blockinfo文件,根据ks峰值分布设置ks_area过滤参数,同时可以调整homo参数看看效果,得到单独一个WGD事件形成的共线性区块和相应的ks值。
-接着用PeaksFit(-pf)模块对值的峰进行拟合得到模型参数。
-最后用KsFigures(-kf)将拟合结果绘制到一张图上。
-想看单个WGD事件的ks点阵图还可以把blockks的blockinfo参数换成kspeaks(-kp)模块过滤后得到的ks_median.distri.csv,跑一遍绘制ks点阵图(-bk)模块获取过滤后的ks点阵图。
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-因为用WGDI对ks频率分布图的峰进行拟合时,一次只能拟合一个峰。当发现两次或多次WGD事件后,需要两次或多次重复以上分析过程,分别获取WGD的ks拟合图。
-3.4. ks拟合和可视化 3.4.1. ks可视化——过滤并绘制ks点阵图 第一步绘制的点阵图里包含基因组上检测到的所有同源基因对(所以点特别多),bk模块绘制的ks点阵图的点只包含确认了共线性的基因对,用ks值作为点的颜色信息,可以根据ks点阵图的共线性区域的颜色来区分不同时期的多倍化事件。
-
-建立配置文件wgdi -bk ? >>input.conf
+ ]]>
+
+ bioinfo
+ gene flow
+
+
+ gene flow
+ hybridization
+ introgressive
+ 3s
+ SIM3s
+
+
+
+ 使用Rldeogram的ideogram函数画两物种的同线性图
+ /2022/08/03/bioinfo_synteny_plot_Rldeogram/
+
+
+1. 使用Rldeogram的ideogram函数画两物种的共线性图 1.1. 输入文件
+karyotype.txt
-在已有配置文件input.conf的基础上添加[blockks]配置参数。
+
+Chr: 染色体号
+Start: 起始
+End: 终止
+fill: 染色体填充色
+species:物种名
+size: 物种名字体大小
+color: 物种名字体颜色
+
+文件示例:
+Chr Start End fill species size color 1 1 23037639 FF8C00 Grape 12 252525 2 1 18779884 FF8C00 Grape 12 252525 3 1 17934068 FF8C00 Grape 12 252525 4 1 17349521 FF8C00 Grape 12 252525 1 1 22042719 4682B4 Populus 12 252525 2 1 19858802 4682B4 Populus 12 252525 3 1 19278319 4682B4 Populus 12 252525
+
-修改配置参数
-[blockks] lens1 = input.len lens2 = input.len genome1_name = sample genome2_name = sample blockinfo = block_info.csv # bi模块整合结果 pvalue = 0.2 # 共线性区块的显著性,对应blockinfo的pvalue列 tandem = true # 是否过滤串联基因形成的共线性区(在点阵图上对角线附近) tandem_length = 200 # 如果tandem=true,那么评估tandem的标准为两个区块的物理距离 markersize = 1 area = 0,2 # 输出结果中ks的取值范围 block_length = 5 # 一个共线性区块的最小基因对数量,对应blockinfo的length列 figsize = 8,8 savefig = ks.dotplot.pdf
-
-运行wgdi -bk input.conf
-
-结果 结果保存在ks.dotplot.pdf文件中。
-
+synteny.txt
-结果解释:
-图中每个点都是共线性区块的基因对,点的颜色是ks值。
-可以用共线性区块的ks中位数来初步判断复制发生的时间,所以图中颜色相近的共线性区块看作同时发生的复制,当图中大致观察到两种颜色的点和线时,表示对应的两次全基因组复制事件。
-
-3.4.2. ks可视化——过滤并绘制ks频率分布图 通过计算共线性区块的基因对ks值,可以获得基因对复制发生的时间,如果有全基因组复制(WGD)发生,那么现有物种的基因组会留下许多ks相近的基因对,通过ks频率分布图可以看到峰,由此判断WGD的发生次数和发生时间。
-
-建立配置文件wgdi -kp ? >>input.conf
-
-在已有配置文件input.conf的基础上添加[kspeaks]配置参数。
-
-修改配置参数
-[kspeaks] blockinfo = block_info.csv pvalue = 0.2 # 共线性区块的显著性,对应blockinfo的pvalue列 tandem = true # 是否过滤串联重复基因形成的共线性区(在点阵图上对角线附近) block_length = 5 # 共线性区块的基因对的数目 ks_area = 0,10 # 对应blockinfo的ks列,0-10表示只保留ks在0-10的基因对。 multiple = 1 # 选择homo中的哪列用于后续过滤,一般选homo1 homo = -1,1 # 根据homo的共线性区块中基因对的总体得分(取值范围-1,1,值越大表示最佳匹配的基因对越多,也就是越近期的WGD事件得到的基因对)对共线性区块进行过滤,只取得分在-1-1之间的共线性区块,即不根据homo过滤。 fontsize = 9 area = 0,3 figsize = 10,6.18 savefig = ks_median.distri.pdf # ks频率分布图结果 savefile = ks_median.distri.csv # 对block_info.csv的过滤后结果,与block_info.csv格式一致
-
-运行wgdi -kp input.conf
-
-
-根据配置参数过滤blockinfo文件的低质量数据,再绘制频率分布图。
-
-结果 结果保存在ks_median.distri.pdf(ks峰图)和ks_median.distri.csv(输入文件block_info.csv过滤后结果,与block_info.csv格式一致)。
-
-从峰图的峰的数量可以估计WGD的数量。
-
-说明 因为用WGDI对ks频率分布图的峰进行拟合时,一次只能拟合一个峰。当发现两次或多次WGD事件后,需要两次或多次重复以上分析过程,分别获取WGD的ks拟合图。
-
-所以也可以先不过滤绘制ks频率分布图,初步查看ks的分布情况;再根据每次WGD事件的分布设置ks_area,multiple,homo三个参数来分离单次WGD事件的数据,再进行过滤-拟合-作图。
-三个参数的设置:
-
-ks_area:根据单次WGD的ks分布范围设置,过滤出单次WGD的数据。
-multiple:选择不同的homo,一般没有特殊需求,选择最优的,即1。
-homo:设置不同的homo范围,观察做出的图中峰的变化来确定homo范围是否合理。
-
-3.4.3. 高斯拟合ks频率分布图的峰——pf模块
-建立配置文件wgdi -pf ? >>peak.conf
-
-在已有配置文件input.conf的基础上添加[kspeaks]配置参数。
-
-修改配置参数
-[peaksfit] blockinfo = ks.distri.csv mode = median bins_number = 200 ks_area = 0,10 fontsize = 9 area = 0,3 figsize = 10,6.18 savefig = ks.peaksfit.pdf
-
-运行wgdi -pf peak.conf
-
-结果
-
-
-
-拟合图ks.peaksfit.pdf
-参数:包括一个R-square和3个拟合参数the gaussian fitting curve parameters
-拟合参数用于后续ksfigure模块作图。
+Species_1:物种1染色体号
+Start_1,End_1:物种1染色体区域位置
+Species_2:物种2染色体号
+Start_2,End_2:物种2染色体区域位置
-R-square: 0.9804748699350867 The gaussian fitting curve parameters are : 5.02360835744403 | 0.8319599832352784 | 0.10382203381206191
+文件示例:
+Species_1 Start_1 End_1 Species_2 Start_2 End_2 fill 1 12226377 12267836 1 5900307 5827251 cccccc 1 5635667 5667377 2 4459512 4393226 cccccc 1 7916366 7945659 3 8618518 8486865 cccccc 2 8214553 8242202 1 5964233 6027199 cccccc 3 2330522 2356593 1 6224069 6138821 cccccc 3 10861038 10886821 2 8099058 8011502 cccccc 4 9487312 9540261 3 7657579 7701112 cccccc
-其中0.83是峰值,5.02是幅值,0.10是标准差。
-3.4.4. 拟合结果作图——kf模块
-建立配置文件 在已有配置文件input.conf的基础上添加[ksfigure]配置参数。wgdi -kf ? >>input.conf
-
-创建all_ks.csv文件
-
-
-
-all_ks.csv文件内容 第一行为标题行,之后行为数据行。 共有4+3n列(n是peak数量,即WGD的次数),逗号分隔,第一列是样本信息,第2-3列对应线条属性(color,linewidth,linestyle),后面列都是拟合参数(the gaussian fitting curve parameters拟合参数,每个peak有3个拟合参数,n个peaks有3n个,依次列出。 标题行要包含所有列(可为空);数据行根据各自的峰数量可能有不同列数(比如一个峰的7列,两个峰的10列)。
-
-all_ks.csv文件示例 两个样本,三次比对(sample1_sample1,sample2_sample2,sample1_sample2),两个峰的all_ks.csv文件示例:
-,color,linewidth,linestyle,,,,,, sample1_sample1,green,1,--,5.02360835744403,0.8319599832352784,0.10382203381206191,2.084853812322066,1.8332872127128195,0.2506813629824027 sample2_sample2,red,1,--,5.02360835744403,0.8319599832352784,0.10382203381206191,2.084853812322066,1.8332872127128195,0.2506813629824027 sample1_sample2,yellow,1,-,3.00367275,1.288717936,0.177816426
-
-
-修改配置参数
-[ksfigure] ksfit = all_ks.csv # 拟合参数文件 labelfontsize = 15 legendfontsize = 15 xlabel = Synonymous nucleotide substitution (Ks) ylabel = Density title = none area = 0,4 figsize = 10,6.18 savefig = all_ks.pdf #保存的拟合图
-
-运行wgdi -kf input.conf
-
-
-得到all_ks.pdf拟合图
-4. references
-WGDI’s documentation:https://WGDI.readthedocs.io/en/latest/
-WGDI’s github:https://github.com/SunPengChuan/wgdi
-xuzhougeng’s WGDI上:https://www.jianshu.com/p/a50548e81ac0
-xuzhougeng’s WGDI中:https://www.jianshu.com/p/0e4a2807468d
-xuzhougeng’s WGDI下:https://www.jianshu.com/p/28a4c3045919
-xuzhougeng’s WGDI blockinfo blog:https://www.jianshu.com/p/e97fdcf5d06f
+1.2. 运行 install.packages( 'RIdeogram' ) library( 'RIdeogram' ) ka <- read.table( "karyotype.txt" , sep= "\t" , header = TRUE , stringsAsFactors = F ) sy <- read.table( "synteny.txt" , sep= "\t" , header = TRUE , stringsAsFactors = F ) ideogram( karyotype = ka, synteny = sy) convertSVG( "chromosome.svg" , device = "pdf" , dpi= 1600 )
+
+1.3. 结果 结果如下图:
+
+
+Figure 1. Rldeogram绘制的同线性图
+2. references
+https://www.jianshu.com/p/07ae1fe18071
@@ -8199,14 +7710,15 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
bioinfo
synteny
+ plot
- biosoft
- WGD
- Ks
+ R package
+ R
+ plot
synteny
- colinearity
- WGDI
+ Rldeogram
+ ideogram
@@ -8530,325 +8042,52 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- hexo建站,github.io发布,多终端同步
- /2018/06/05/blog_hexo+github/
-
+ 结构变异分析
+ /2022/10/09/bioinfo_variation_SV_intro/
+
-
-markdown 是一种适用撰写文本的语法和文件格式,后缀是.md
-hexo 是把写的markdown文件生成blog网站的工具,hexo是不仅是博客引擎驱动,还是一个快速、简洁高效的博客框架,可生成静态网页。
-git 是目前世界上最先进的分布式版本控制系统,用于对开发程序或者其他需要长期追踪版本变更的项目/文件的版本控制。
-github 提供网络站点进行blog的展示和备份
-
-github pages是github网站的一个功能,专门用于管理用户自行编写的静态网页,提供静态网页存储空间,许多人把它用于搭建独立博客。
-github pages需要相应的博客引擎驱动,主流的是jekyllrb 和hexo 。
-部署和发布blog有很多方法。这里介绍的是markdown撰写博客,hexo建立博客网站,通过git管理博客网站,发布博客网站到github平台和多终端同步的操作。
-部署本地blog的写作环境(git+hexo),并用github.io网站发布blog
-
-git和github的配置 新终端搭建博客撰写环境都需要配置
-hexo的安装和配置 多终端同步和单终端有一点差别,建议一开始就配置多终端同步并备份到githbu网站,一步到位,避免博客在单终端丢失。
-撰写与发布blog
-github两个分支实现多终端同步
-日常blog撰写和备份操作
-
-1. git和github的配置 notes:username和useremail替换成自己的github用户名和邮箱。
+1. 变异(variation) 不同生物间或者同一种生物不同个体间,染色体上同一位置对应的序列的碱基或者结构不同,或者同一序列在染色体上的位置不同,这种生物间遗传物质的不同被称为变异(variation)。变异是至少两个个体的遗传物质比较的结果。
+1.1. 变异的类型 基因组上的变异有不同的类型,包括单核苷酸多态性(Single Nucleotide Polymorphisms,SNP),插入缺失(Insertion and Deletion, Indel),和结构变异(structural variation,SV)。
-下载安装git
-
-注册github网站
- 注册github网站,并创建一个名为username.github.io的仓库
- 这个特殊的名称直接关联了gitpages,gitpages服务器会自动把上传到这个仓库的文档进行部署发布,并可以通过分配的域名https://username.github.io/实现博客的访问。
-
-git配置和生成SSH key密钥对
- git配置:打开git bash(任意位置右键选择git bash here)
- 运行git config --global user.name username
和git config --global user.email useremail
- cd ~进入用户主目录,运行ssh-keygen -t rsa -C useremail@example.com
,一路回车,完成后会在用户主目录(C/Users/you/)下生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,即SSH key密钥对,id_rsa是私钥,需要保密,id_rsa.pub是公钥,可分享。
-
-github添加终端的公钥
- 打开网页,登录github,打开settings->SSH and GPG keys,点击new SSH key,填上任意title,在key文本框粘贴公钥,即id_rsa.pub文件的内容,添加。
-
-验证与github的添加
- 在git bash下运行ssh -T git@github.com
。 输出You’ve successfully suthenicated.则代表github账户成功授权你当前使用的终端,本机可连接上github了。
-
+单核苷酸多态性(SNP)
-2. hexo的安装和配置
-下载安装node.js
- 使用git bash或者cmd终端检查node的安装,node -v
和npm -v
出现版本号即node和npm 安装成功
-
-安装hexo
-npm install hexo-cli -g
命令安装hexo-cli(hexo的cli命令行模块)
-
-初始化目录hexo init
选定位置通过git bash进入,创建hexo文件夹并进入hexo,hexo init命令初始化hexo文件夹。 即生成一系列建站需要的文件:
-
-_config.yml:站点配置文件
-package.json:说明使用哪些包,npm install参考这个文件安装
-node_modules目录:安装的模块,用npm install会重新生成
-package-lock.json:用npm install会重新生成
-scaffolds目录:文章模板
-source目录:blogmarkdown源文件
-theme目录:网站主题
-.gitignore:记录提交时忽略的文件,即以下文件
-.deploy_git目录:hexo d命令时会重新生成
-db.json
-
-
-安装组件npm install
,npm install hexo-server --save
,npm install hexo-deployer-git
- npm install
安装依赖的组件,会更新node_modules目录
- npm install hexo-server --save
安装hexo-server以使用服务器
- npm install hexo-deployer-git
安装hexo-deployer-git,实现通过hexo -g
部署hexo网站到github端
-
-配置博客布署deploy参数
-修改hexo下的站点配置文件_config.yml中deploy参数。 repository修改成github.io库的网址,branch填master分支。
- deploy: type: git repository: git@github.com:username/username.github.io.git branch: master
-
-hexo其他配置
- 在创建的博客网站文件夹下的_config.yml
文件中进行网站的大部分配置。参考hexo配置
-更换主题【optional】
- hexo网站https://hexo.io/themes/有许多主题可选,比如常被使用的NexT主题 在Hexo主题页面ctrl+F并输入next查找到NexT主题,然后点击进入到NexT主题的github页面,该页面存储了NexT主题的源码,复制next主题的github仓库位置,并在hexo/themes位置下运行命令git clone https://github.com/theme-next/hexo-theme-next.git next
克隆next主题
- 然后修改hexo下的站点配置文件_config.yml中的主题行为theme: next
-
-网站其他配置【optional】
- 更改站点配置文件_config.yml中其他参数,例如
- # Site title: username's blog #网站标题 subtitle: '' #网站副标题 description: '' #网站描述(主要用于SEO) keywords: author: username #作者 language: en #网站使用语言 timezone: Asia/Shanghai #网站时区,要在时区列表中选取,Hexo默认使用您电脑的时区
+指单个核苷酸的碱基的变化,比如A变成了G,或者C变成了T。
-
+
+插入删除(Indel)
-3. 撰写与发布blog
-撰写blog
-blog文件存放在hexo/source/_posts下,markdown(.md)格式文件,在这个位置新建和编辑markdown文档,这就是写文章的地方。
-使用命令hexo new "newpostname"
可以在hexo/source/_posts下新建一个newpostname.md的文件,打开这个文件即可写作。
-
-发布blog
- 使用git bash进入博客建站所在位置hexo目录下,使用hexo clean & hexo g -d
合并三条命令实现发布blog,或者一步一步实现
-hexo clean
【optional】 INFO Validating config INFO Deleted database. INFO Deleted public folder. 清除缓存文件(db.json)和已生成的静态文件(public目录)
-
-hexo generate
=hexo g
生成静态页面,静态网页会根据source>_posts目录下所有markdown文件编译成静态网页(html),并生成public目录存储生成的静态文件。
-
-hexo serve
=hexo s
生成静态文件后,可以使用hexo serve
命令启动本地服务器来预览博客网站。
-
-hexo deploy
=hexo d
部署public到github的master分支(部署位置:站点配置文件_config.yml的deploy参数设置的github账号和分支名),即部署到gitpages。
- 部署之后,可以在githube的page项目中查看到变化。我的是https://github.com/yanzhongsino/yanzhongsino.github.io 。很快也可以在https://yanzhongsino.github.io/ 线上看到生成的博客。
-
+指基因组上某个位置发生的较短的线性序列的插入(Insertion)或者删除(Deletion)。插入缺失是两者比较的结果,对一方是插入的,对另一方来说就是删除,所以通常合称为Indel。
+通常约定插入或缺失长度在50bp以下的被称为Indel,大部分情况下不超过10bp。
-
+
+结构变异(SV)
-每次修改blog或新增blog内容后,可用hexo clean & g -d快速部署到github端master分支,从而实现github.io网站博客的更新。
-4. github两个分支实现多终端同步【推荐配置】 在进行hexo的安装和配置后,可以通过命令hexo clean & hexo g -d
发布博客网站到github.io网站,但需要备份博客源文件和多终端协作时,便有一些问题。
-单终端配置hexo的问题:
- hexo建站部署文件框架为:blog原始md文件存放在hexo建站位置的/source/_posts下,发布blog的命令hexo clean & hexo g -d
会生成/public并把它部署到github端的master分支,但在source/_posts下的原始md文件和hexo建站部署文件只在当前电脑存放。
-
-多终端同步的意义:
- 把博客md源文件和hexo部署文件备份到github,实现多端共享,共享md源文件可以避免单终端md博客文件丢失,共享hexo部署文件可以在不同电脑上写blog,并部署到github终端,保持一致。
-
-多终端同步实现原理:
- 在github上新建hexo分支,hexo分支用于同步博客md源文件和hexo配置文件(即同步整个hexo目录),master分支用于发布博客到github.io网站(即同步public目录)。两个分支相互独立,永远不要合并。
-
-多终端同步实现具体操作:
- github网站新建hexo分支,并把hexo分支设为默认分支,git clone
克隆hexo分支到本地终端,把克隆的目录下的.git文件夹移动到hexo配置好的建站目录hexo下。 用三条命令git add .
,git commit -m "submit"
,git push origin hexo
同步.git文件夹所在目录到github端hexo分支,这样操作之后克隆github端hexo分支便包含了hexo部署文件和md源文件,从而实现多端共享,github端的master分支只用于发布blog(同步生成的public目录)。
-
+指长片段的序列变化或位置变化,包括长片段的插入删除(Big Indel),染色体倒位(Inversion),易位(Translocation),串联重复(Tandem repeat),拷贝数变异(copy number variation, CNV)等。
-4.1. 多终端同步配置 多终端同步配置具体步骤如下:
+1.2. 结构变异(structural variation,SV) 1.2.1. 结构变异的定义 结构变异(structural variation,SV)是指基因组上长片段的序列变化和位置关系变化。 过去通常定义为长度大于1000bp的插入删除和倒位,但随着测序的发展,现在的定义更广泛。
+1.2.2. 结构变异的类型 目前的结构变异通常包括长度大于50bp的长片段序列插入删除(Big Indel),长度大于1000bp的染色体倒位(Inversion),长度大于1000bp的染色体内部或染色体间的序列易位(Translocation),拷贝数变异(copy number variation, CNV),串联重复(Tandem repeat)以及形式更为复杂的嵌合性变异等。
+有些标准还包括简单重复序列(SSR),散在的重复(Interspersed duplications)和其他重复序列。
+
+
+图1. 结构变异的类型
图片来源: paper:Genome structural variation discovery and genotyping
+2. 检测结构变异的方法 检测结构变异的方法主要有四种,包括:
-安装node.js
-
-在github网页新建hexo分支并设为default默认分支
-
-克隆hexo分支到本地
- 在git bash下进入想创建存储blog文件的位置,运行git clone git@github.com:username/username.github.io.git
,在当前目录克隆github的github.io仓库的默认分支(应为hexo)。
- 克隆的目录中的.git文件夹是github端hexo分支的版本库Repositor,.git文件夹所在目录(目前是username.github.io)对应github的hexo分支(把.git移动到哪hexo分支就定位到哪)。
-
-移动.git目录
- .git目录是通过git命令与github端hexo分支同步的关键文件。
+Read-pair (RP):通过对双端测序reads的距离(即插入序列长度的分布)或位置关系(即双端reads的正反链情况)的异常值分析来检测结构变异。
+Split-read (SR):通过对双端测序reads中一条reads能比对上,另一条不能比对上的情况进行分析来检测结构变异。
+Read-depth (RD):利用read的mapping深度来检测基因组拷贝数变异(Copy number variantion,简称CNV)的方法。
+Assembly (AS):通过三代测序和de novo assembly来检测大长度和复杂结构的变异。
+
+下图总结了四种方法可以检测的结构变异的类型。
+
+
+图2. 结构变异的检测方法
图片来源: paper:Genome structural variation discovery and genotyping
+3. 检测结构变异的软件 检测结构变异的软件有很多,个人用过的两个贴在下面:
-git bash下进入github.io后缀文件夹
-进入git clone生成的github.io后缀目录,除.git目录外的文件可以不用保留,.git目录移动到hexo安装和建站的目录下。
-
-
-同步本地hexo部署文件和blog源文件到github端的hexo分支
-在hexo部署目录下通过git三步命令同步hexo部署目录到github端的hexo分支。
-以后有修改新增blog或更改配置都用这三步同步hexo分支。三条命令执行前建议通过hexo clean
清除缓存和public目录,以免备份不需要的文件。
-
-git add .
- 添加所有工作区(即本地github.io文件夹)的修改到暂存区(即.git里的stage/index文件)
-
-git commit -m “commit notes”
- 提交暂存区的所有更改到本地的默认分支(此时为hexo)。
-
-git push/git push origin hexo
- 提交本地分支到github端的hexo分支,origin指本地默认分支(即.git文件夹所在目录),github端hexo是默认分支,所以可以省略origin hexo,直接用git push便会同步本地github.io仓库到github端的默认分支(即hexo)。
- 从而实现github端hexo分支备份了本地hexo部署目录,包括目录下的source文件夹的blog源文件。
-
-
-
-blog撰写与发布
-blog撰写与发布单终端和多终端是一样的操作。 撰写在source/_posts下进行,推荐使用markdown语法撰写博客;发布使用hexo clean & hexo g -d
命令。
-
-
-4.2. 配置后新终端使用同步功能 按照以上进行多终端同步配置后,在新的终端或者本地文件丢失后,可以通过以下步骤快速搭建博客撰写环境并同步博客数据。
-
-git和github的安装配置同上
-
-安装node.js
-
-克隆hexo分支到本地
- 在git bash下进入想创建存储blog文件的位置,运行git clone git@github.com:username/username.github.io.git
,在当前目录克隆github的github.io仓库的默认分支(应为hexo)。
-
-安装组件
-通过git bash进入本地github.io文件夹下依次执行 npm install hexo-cli -g
命令安装hexo-cli(hexo的cli命令行模块),npm install
命令安装依赖的模块,npm install hexo-server --save
安装hexo-server以使用服务器,npm install hexo-deployer-git
命令安装部署模块hexo-deployer-git(注意不要 hexo init)。
-
-进行日常blog撰写和备份
-
-
-5. 日常blog撰写和备份操作
-blog同步 养成习惯,每次开始撰写blog前都通过git bash进入工作区,进行git pull
命令把github端的hexo分支的更新(更新可能是其他终端上提交的)同步到本地,实现多终端的内容完全同步。
-但如果本地有未提交的更新,则千万不要用git pull
,否则会覆盖本地更新;直接进入下一步;直到使用git add .
,git commit -m "submit"
,git push origin hexo
提交备份本地更新到github端的hexo分支后才可以使用git pull
(一般是在其他终端,把github的hexo分支更新拉到其他终端设备使用)。
-
-blog撰写 使用命令hexo new "newpostname"
可以在hexo/source/_posts下新建一个newpostname.md的文件,打开这个文件即可写作。
- 在本地source/_posts下添加和修改md文档实现blog的日常撰写和修改。
-
-blog备份 只要blog有更改或者新增,或者配置文件有修改,即工作区(即本地的hexo目录或github.io目录)有文件修改,则建议对文件进行备份到GitHub端的hexo分支。
-用三条命令git add .
,git commit -m "submit"
,git push origin hexo
备份工作区,包括md博客源文件和hexo部署到github端的hexo分支。三条命令执行前建议通过hexo clean
清除缓存和public目录,以免备份不需要的文件。
-
-blog生成和预览 通过hexo g
生成博客网站静态文件后,可以用hexo serve
=hexo s
命令启动本地服务器来在网址http://localhost:4000
预览博客网站。没问题再进行博客发布。
-
-blog发布 可根据自身需求决定是否发布blog到github.io网站,一般写的blog完整程度比较高时可以发布。使用hexo clean & hexo g -d
命令,根据source/_posts下的博客源文件生成public目录(网站html并同步到github端的master分支,即发布blog到github.io网站。
-
-
-总结一下,在配置好写作环境后的任意一台终端的日常工作流应该是:
-
-git pull
同步远程github库的更新
-hexo new "newblog"
在source/_posts/下添加md格式的blog,或者修改已有的blog
-git add .
,git commit -m "commit notes"
,git push
把修改备份到github端
-下次写作重复以上三个步骤
-用hexo g
-hexo s
来预览博客
-直至blog完善成熟后,用命令hexo clean & hexo g -d
生成网站并部署到github.io
-
-6. next主题同步和更新 7. Issue&Solution 7.0.1. Issue 1:建站日记写好后,在另一个终端通过git clone,修改后部署发现githubio没有显示,检查后发现由于next主题也是通过git clone获取的,git不能直接管理两个git项目(有.git文件夹的被识别为一个git项目)中嵌套的其他git项目,即git add .
,git commit -m "commit notes"
,git push
命令对hexo项目下的next项目无效,themes/next主题没有被同步到github端hexo分支。
-Solution A 把next主题的git项目改为普通文件进行同步 删除themes/next目录(删除前备份next目录到其他位置),然后git add .
,git commit -m "delete theme next"
,git push
命令同步到github端的hexo分支。 把备份的next目录移回themes下,并把next目录下的.git目录删除,然后后git add .
,git commit -m "commit notes"
,git push
命令同步到github端的hexo分支。此时next目录不作为git项目被同步到github的hexo端,而是普通文件。 优点是操作简单,缺点是next主题的更新较为麻烦。
-
-Solution B fork+subtree同步next主题 删除themes/next目录(删除前备份next目录下修改过的文件,比如主题配置文件_config.yml),然后git add .
,git commit -m "delete theme next"
,git push
命令同步到github端的hexo分支。
- fork主题项目,访问next 主题,点击右上角fork,表示把next这个git项目完整的复制一份到自己的github下,你的github账号下会有一个hexo-theme-next的新仓库。
- notes:注意fork的next版本与hexo版本相匹配,next V8与hexo v5,否则githubpages为空白(过来人踩过的坑~~)
- git remote add -f next git@github.com:yanzhongsino/hexo-theme-next.git
#添加远程仓库hexo-theme-next到本地,仓库名设置为next,远程仓库网址粘贴你的github账号下fork的hexo-theme-next的网址。git remote
显示所有添加的远程仓库,此时便能看见next。
- git subtree add --prefix=themes/next next master --squash
#添加subtree,把本地next仓库作为子仓库添加到本地themes/next目录下,分支为master,–squash的意思是把subtree的改动合并成一次commit提交。
- 在本地替换themes/next目录下的主题配置文件_config.yml,把删除前修改好的放进themes/next目录,用git add .
,git commit -m "add theme next"
,git push
命令同步本地的next目录到github端的hexo分支,实现next主题目录与githubio项目一起同步。此时,github端fork的hexo-theme-next项目也成为github端github.io项目的子项目。
-
-
-7.0.2. Isssue 2:当next主题发生更新时,由于next主题的配置文件_config.yml不一致,使用git pull拉取需要解决冲突问题,或者手动替换配置文件。
-Solution A 把next主题的配置文件_config.yml合并到站点配置文件_config.yml 把next主题的配置文件_config.yml的内容复制到站点配置文件_config.yml,每行都缩进两个空格(在VScode里选中内容,ctrl+]即可缩进),然后在内容前一行添加theme_config:
标题行。有任何主题配置都在博客配置文件中进行。
-
-Solution B 使用_config.next.yml进行主题配置和同步【需要>hexo5.0】 next官方指导doc
- 在本地的github.io的工作目录下,创建一个_config.next.yml的文件,把需要更改的主题设置从next/_config.yml复制到_config.next.yml并进行更改,用_config.next.yml进行主题配置和同步。
- 当next主题在配置文件/themes/next/_config.yml增加新的特性时,可随时复制新特性的内容到这个文件_config.next.yml中,实现主题的配置和同步。
- 将本地的修改推送给子项目(github端fork的hexo-theme-next项目)git subtree push --prefix=themes/next next master
,对github端fork的hexo-theme-next项目进行pull、push操作需要使用git subtree
命令。
- 平常使用同步同前面介绍的一致。git add .
,git commit -m "commit notes"
,git push
命令同步hexo项目和blog源文件到github端的hexo分支,hexo clean & hexo g -d
命令部署网站(生成public)并发布到githubio网站(同步到github端的master分支)。 当next主题项目下文件更改时,增加了git subtree push --prefix=themes/next next master
推送本地更改到子项目(github端fork的hexo-theme-next项目)的操作。
-
-Solution C 使用source/_data/next.yml进行主题配置和同步 使用source/_data/next.yml进行主题配置和同步的方案在next v8版本被告知不支持【20201122】
- 为了避免这种不便,next开发者提供了两种解决方案 。
- 把主题配置修改的任务转移到新建的位置:复制一份主题配置文件/themes/next/_config.yml到新建的位置/source/_data/next.yml,并且维持/themes/next/_config.yml的默认值,在/source/_data/next.yml中修改主题配置。当next主题在配置文件/themes/next/_config.yml增加新的特性时,可随时复制新特性的内容到这个新的文件/source/_data/next.yml,这样更新主题时便不需额外处理冲突或者手动替换配置文件了。
-
-next主题更新【还未验证】 当next的源项目更新后,希望自己的网站和hexo部署同步更新的操作。 通过git bash进入本地next主题子项目,更新子项目:git fetch next master
,git pull https://github.com/example/hexo-theme-next.git
命令拉取next项目源更新的仓库到本地。 然后git add .
,git commit -m "commit notes"
,git push
命令推送本地更改到主项目,git subtree push --prefix=themes/next next master
推送本地更改到子项目。
-
-
-7.0.3. Issue 3:hexo deploy时报错Authentication failed 报错信息如下
-fatal: 发送请求时出错。 fatal: 基础连接已经关闭: 连接被意外关闭。 yLogon failed, use ctrl+c to cancel basic credential prompt. remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/yanzhongsino/yanzhongsino.github.io.git/' FATAL { err: Error: Spawn failed at ChildProcess.<anonymous> (D:\yanzhongsino.github.io\node_modules\hexo-util\lib\spawn.js:51:21) at ChildProcess.emit (events.js:315:20) at ChildProcess.cp.emit (D:\yanzhongsino.github.io\node_modules\cross-spawn\lib\enoent.js:34:29) at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12) { code: 128 } } Something's wrong. Maybe you can find the solution here: %s https://hexo.io/docs/troubleshooting.html
-
-是因为github的认证信息过期了,用以下两条命令可以解决这个问题。 git config –global –unset credential.helper git config credential.helper store
-7.0.4. Issue 4:hexo deploy报错unable to access 20210518 报错信息如下
-On branch master nothing to commit, working tree clean fatal: unable to access 'https://github.com/yanzhongsino/yanzhongsino.github.io.git/': OpenSSL SSL_read: Connection was reset, errno 10054 FATAL { err: Error: Spawn failed at ChildProcess.<anonymous> (D:\yanzhongsino.github.io\node_modules\hexo-util\lib\spawn.js:51:21) at ChildProcess.emit (events.js:315:20) at ChildProcess.cp.emit (D:\yanzhongsino.github.io\node_modules\cross-spawn\lib\enoent.js:34:29) at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12) { code: 128 } } Something's wrong. Maybe you can find the solution here: %s https://hexo.io/docs/troubleshooting.html
-
-
-Solution 可能是git的协议问题,修改hexo下的站点配置文件_config.yml中deploy参数,地址如果是http协议的修改成ssh协议的。 把deploy的type修改成git,repository若是https://github.com/yanzhongsino/yanzhongsino.github.io.git
格式修改成git@github.com:yanzhongsino/yanzhongsino.github.io.git
格式,如下。
-
-deploy: type: git repository: git@github.com:yanzhongsino/yanzhongsino.github.io.git branch: master
-
-也可能是网络之类的问题,就隔一段时间试试hexo deploy
。
-报错kex_exchange_identification: Connection closed by remote host
-问题 运行git的博客同步命令,报错kex_exchange_identification: Connection closed by remote host。
-
-$ ssh -T git@github.com kex_exchange_identification: Connection closed by remote host Connection closed by 20.205.243.166 port 22
-
-
-方案 运行VPN的全局模式会导致这个报错,取消全局模式即可。
-
-小记
-学习hexo+githubpages建站已是两年前(2018.06)的事,那时初学前端,好多新知识需要记录,就先建好站用来发布。结果转行前端从入门到放弃只不过两三月,便把博客搁置了。
-前几天拾起来,建站知识已忘得精光,原来应该是配置好了hexo的多端同步,但由于两年的荒废,遗忘导致我把hexo和master分支合并了,博客的原始文件有没备份,所以一切从头开始。
-学了几天,博客搭建初步捡回来了。可不能再忘,这次笔记记得很精细,下次如果需要看看笔记应该可以捡回来。
-——2020.11.18 Yan Zhong in Guangzhou
-next主题的同步稍微有点麻烦,在理解git的各种命令的含义的基础上理解各种操作实现了什么目的会更有帮助。 目前版本号 hexo 5.2.0, next 8.0.2。
-——2020.11.22 Yan Zhong in Guangzhou
-添加了攥写blog时插入图片或背景音乐教程的小节,并添加了BGM
-——2021.03.25 Yan Zhong in Guangzhou 发现disqus突然给github pages每篇博客后面插入了广告,所以取消了评论系统disqus。 ——2024.11.13 Yan Zhong in Guangzhou
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- blog
-
-
- blog
- hexo
- github
- tutorial
- sync
- build website
- deploy website
-
-
-
- 结构变异分析
- /2022/10/09/bioinfo_variation_SV_intro/
-
-
-1. 变异(variation) 不同生物间或者同一种生物不同个体间,染色体上同一位置对应的序列的碱基或者结构不同,或者同一序列在染色体上的位置不同,这种生物间遗传物质的不同被称为变异(variation)。变异是至少两个个体的遗传物质比较的结果。
-1.1. 变异的类型 基因组上的变异有不同的类型,包括单核苷酸多态性(Single Nucleotide Polymorphisms,SNP),插入缺失(Insertion and Deletion, Indel),和结构变异(structural variation,SV)。
-
-单核苷酸多态性(SNP)
-
-
-指单个核苷酸的碱基的变化,比如A变成了G,或者C变成了T。
-
-
-插入删除(Indel)
-
-
-指基因组上某个位置发生的较短的线性序列的插入(Insertion)或者删除(Deletion)。插入缺失是两者比较的结果,对一方是插入的,对另一方来说就是删除,所以通常合称为Indel。
-通常约定插入或缺失长度在50bp以下的被称为Indel,大部分情况下不超过10bp。
-
-
-结构变异(SV)
-
-
-指长片段的序列变化或位置变化,包括长片段的插入删除(Big Indel),染色体倒位(Inversion),易位(Translocation),串联重复(Tandem repeat),拷贝数变异(copy number variation, CNV)等。
-
-1.2. 结构变异(structural variation,SV) 1.2.1. 结构变异的定义 结构变异(structural variation,SV)是指基因组上长片段的序列变化和位置关系变化。 过去通常定义为长度大于1000bp的插入删除和倒位,但随着测序的发展,现在的定义更广泛。
-1.2.2. 结构变异的类型 目前的结构变异通常包括长度大于50bp的长片段序列插入删除(Big Indel),长度大于1000bp的染色体倒位(Inversion),长度大于1000bp的染色体内部或染色体间的序列易位(Translocation),拷贝数变异(copy number variation, CNV),串联重复(Tandem repeat)以及形式更为复杂的嵌合性变异等。
-有些标准还包括简单重复序列(SSR),散在的重复(Interspersed duplications)和其他重复序列。
-
-
-图1. 结构变异的类型
图片来源: paper:Genome structural variation discovery and genotyping
-2. 检测结构变异的方法 检测结构变异的方法主要有四种,包括:
-
-Read-pair (RP):通过对双端测序reads的距离(即插入序列长度的分布)或位置关系(即双端reads的正反链情况)的异常值分析来检测结构变异。
-Split-read (SR):通过对双端测序reads中一条reads能比对上,另一条不能比对上的情况进行分析来检测结构变异。
-Read-depth (RD):利用read的mapping深度来检测基因组拷贝数变异(Copy number variantion,简称CNV)的方法。
-Assembly (AS):通过三代测序和de novo assembly来检测大长度和复杂结构的变异。
-
-下图总结了四种方法可以检测的结构变异的类型。
-
-
-图2. 结构变异的检测方法
图片来源: paper:Genome structural variation discovery and genotyping
-3. 检测结构变异的软件 检测结构变异的软件有很多,个人用过的两个贴在下面:
-
4. references
https://en.wikipedia.org/wiki/Structural_variation
@@ -8886,64 +8125,120 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 使用Rldeogram的ideogram函数画两物种的同线性图
- /2022/08/03/bioinfo_synteny_plot_Rldeogram/
-
+ 使用pixy计算群体的pi,dxy,fst
+ /2023/03/13/bioinfo_population.genetics_pixy/
+
-1. 使用Rldeogram的ideogram函数画两物种的共线性图 1.1. 输入文件
-karyotype.txt
+1. 用pixy计算群体的pi,dxy,fst pixy可以基于多组学的vcf格式文件来计算群体的pi,dxy,fst值。
+1.1. 安装pixy conda install --yes -c conda-forge pixy conda install --yes -c bioconda htslib pixy --help
+
+1.2. 准备vcf文件 pixy需要的vcf文件与只包含snp的vcf文件不同,是同时包含变异位点(variant sites)和非变异位点(invariant sites)的全位点(all sites)文件。
+
+获取all-sites的vcf文件
-
-Chr: 染色体号
-Start: 起始
-End: 终止
-fill: 染色体填充色
-species:物种名
-size: 物种名字体大小
-color: 物种名字体颜色
-
-文件示例:
-Chr Start End fill species size color 1 1 23037639 FF8C00 Grape 12 252525 2 1 18779884 FF8C00 Grape 12 252525 3 1 17934068 FF8C00 Grape 12 252525 4 1 17349521 FF8C00 Grape 12 252525 1 1 22042719 4682B4 Populus 12 252525 2 1 19858802 4682B4 Populus 12 252525 3 1 19278319 4682B4 Populus 12 252525
+gatk --java-options "-Xmx32g" HaplotypeCaller -R ref.fa -I input.bam -O output.g.vcf -ERC GVCF # 生成单个样本gvcf文件 gatk --java-options "-Xmx32g" GenomicsDBImport -V output1.g.vcf -V output2.g.vcf ... --genomicsdb-workspace-path <allsamples_genomicsdb> for chr in $(cat chr.list);do gatk --java-options "-Xmx32g" GenotypeGVCFs -R ref.fa -V samples.g.vcf -L ${chr} -all-sites -O ${chr}_allsites.vcf.gz;done # joint-calling这里一定要加参数-all-sites(把non-variant位点也保存到vcf文件中,后面才能进行pixy的分析)。必须使用-L指定染色体,否则有报错风险。耗时步骤。 ls *_allsites.vcf.gz >vcf.list # 把生成的染色体的vcf文件名保存到vcf.list gatk MergeVcfs -I vcf.list -O samples_allsites.vcf.gz # 合并所有染色体vcf文件到一个vcf文件,耗时步骤
-synteny.txt
+分别获取invariant和variant位点,过滤后,再合并
+
+vcftools --gzvcf samples_allsites.vcf.gz --max-maf 0 --minQ 30 --max-missing 0.9 --min-meanDP 10 --max-meanDP 43 --remove filter.indv --recode --stdout | bgzip -c > samples_invariant_filtered.vcf.gz & # 提取invariant位点并过滤,同时生成out.log名称的log文件 vcftools --gzvcf samples_allsites.vcf.gz --mac 1 --min-alleles 2 --max-alleles 2 --minQ 30 --max-missing 0.9 --min-meanDP 10 --max-meanDP 43 --remove filter.indv --recode --stdout | bgzip -c > samples_variant_filtered.vcf.gz & # 提取variant位点并过滤,同时也生成out.log名称的log文件,最好与上一步骤分开在两个文件夹运行 tabix samples_invariant_filtered.vcf.gz tabix samples_variant_filtered.vcf.gz bcftools concat --allow-overlaps samples_variant.vcf.gz samples_invariant.vcf.gz -O z -o samples_allsites_filtered.vcf.gz # 合并invariant和variant位点到一个文件
+
+1.3. pixy计算dxy,pi和fst
+popfile.txt群体文件
-Species_1:物种1染色体号
-Start_1,End_1:物种1染色体区域位置
-Species_2:物种2染色体号
-Start_2,End_2:物种2染色体区域位置
+popfile.txt文件包含样本个体分组信息,两列内容,tab分隔。第一列样本ID,第二列分组名称(常用物种作为分组依据)。
-文件示例:
-Species_1 Start_1 End_1 Species_2 Start_2 End_2 fill 1 12226377 12267836 1 5900307 5827251 cccccc 1 5635667 5667377 2 4459512 4393226 cccccc 1 7916366 7945659 3 8618518 8486865 cccccc 2 8214553 8242202 1 5964233 6027199 cccccc 3 2330522 2356593 1 6224069 6138821 cccccc 3 10861038 10886821 2 8099058 8011502 cccccc 4 9487312 9540261 3 7657579 7701112 cccccc
-
-1.2. 运行 install.packages( 'RIdeogram' ) library( 'RIdeogram' ) ka <- read.table( "karyotype.txt" , sep= "\t" , header = TRUE , stringsAsFactors = F ) sy <- read.table( "synteny.txt" , sep= "\t" , header = TRUE , stringsAsFactors = F ) ideogram( karyotype = ka, synteny = sy) convertSVG( "chromosome.svg" , device = "pdf" , dpi= 1600 )
+ERS223827 BFS ERS223759 BFS ERS223750 BFS ERS223967 AFS ERS223970 AFS ERS223924 AFS ERS224300 AFS ERS224168 KES ERS224314 KES
-1.3. 结果 结果如下图:
-
+
+运行
+
+bgzip samples_allsites_filtered.vcf tabix samples_allsites_filtered.vcf.gz nohup pixy --stats pi fst dxy --vcf sample_allsites_filtered.vcf.gz --populations popfile.txt --window_size 10000 --n_cores 16 &
-Figure 1. Rldeogram绘制的同线性图
-2. references
-https://www.jianshu.com/p/07ae1fe18071
+1.4. pixy的结果 根据–stats的设定,生成三个统计量的结果文件。
+
+pixy_pi.txt:居群内的核苷酸多样性(nucleotide diversity (pi))
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+pop:popfile.txt群体文件中群体ID
+chromosome:染色体或contig的ID
+window_pos_1:基因组window的起始位置
+window_pos_2:基因组window的终止位置
+avg_pi:window的位点的平均核苷酸多样性。更具体地说,pixy 计算window中所有位点的每个位点的加权平均核苷酸多样性,其中权重由每个位点的基因分型样本数决定。
+no_sites:window中至少具有一种有效基因型的位点总数。此统计信息被提供给用户,不会直接用于任何计算。
+count_diffs:window中所有基因型之间成对差异的原始数量。这是计算 avg_pi 的分子。
+count_comparisons:window中所有基因型之间非缺失成对比较的原始数量(即比较两种基因型且均有效的情况)。这是计算 avg_pi 的分母。
+count_missing:window中所有基因型之间缺失配对比较的原始数量(即比较两种基因型且至少缺失一种的情况)。
- ]]>
-
- bioinfo
- synteny
- plot
-
+pop chromosome window_pos_1 window_pos_2 avg_pi no_sites count_diffs count_comparisons count_missing BFS HiC_scaffold_1 1 10000 0.0 6 0 6 0 AFS HiC_scaffold_1 1 10000 0.0 6 0 6 0 ... ...
+
+
+pixy_dxy.txt:居群间的核苷酸差异(nucleotide divergence (dxy))
+
+
+pop1:popfile.txt群体文件中群体ID,比较的第一个居群
+pop2:popfile.txt群体文件中群体ID,比较的第二个居群
+chromosome:染色体或contig的ID
+window_pos_1:基因组window的起始位置
+window_pos_2:基因组window的终止位置
+avg_dxy:window的平均每个位点的核苷酸差异
+no_sites:window中两个群体中至少具有一种有效基因型的位点总数。此统计信息提供给用户,不会直接用于任何计算。
+count_diffs:所有基因型之间的成对交叉种群差异的原始数量。这是计算 avg_dxy 的分子。
+count_comparisons:window中所有基因型之间非缺失成对交叉种群比较的原始数量(即比较两种基因型且均有效的情况)。这是计算 avg_dxy 的分母。
+count_missing:window中所有基因型之间缺失的成对跨种群比较的原始数量(即两个基因型被比较而至少有一个缺失的情况)。这个统计数字提供给用户,不直接用于任何计算。
+
+pop1 pop2 chromosome window_pos_1 window_pos_2 avg_dxy no_sites count_diffs count_comparisons count_missing BFS AFS HiC_scaffold_1 1 10000 0.0 6 24 0 CFS DES HiC_scaffold_1 1 10000 0.0 6 24 0
+
+
+pixy_fst.txt:Weir and Cockerham’s FST
+
+
+pop1:popfile.txt群体文件中群体ID,比较的第一个居群
+pop2:popfile.txt群体文件中群体ID,比较的第二个居群
+chromosome:染色体或contig的ID
+window_pos_1:基因组window的起始位置
+window_pos_2:基因组window的终止位置
+avg_wc_fst:window的平均每个SNP(不是每个位点)的 Weir and Cockerham’s FST
+no_snps:window内变异位点(SNPs)的总数
+
+pop1 pop2 chromosome window_pos_1 window_pos_2 avg_wc_fst no_snps BFS AFS HiC_scaffold_1 30001 40000 NA 67 CFS DES HiC_scaffold_1 30001 40000 0.0 67
+
+结果的后续处理
+计算平均值的注意事项
+
+值得注意的是,如果想用pixy的结果继续计算更大的window或者整个基因组的平均值不能直接用window的pi/dxy值来计算。
+正确的计算方法是使用原始计数重新计算differences/comparisons ratios,公式如下:
+$$(window 1 count_diffs + window 2 count_diffs + … + window n count_diffs) / (window 1 comparisons + window 2 comparisons + … + window n comparisons)$$
+
+计算整个基因组的pi值
+
+cat pixy_pi.txt |cut -f1,2 |sort|uniq >pops.list cat pops.list | while read line do a=$(echo $line | awk '{print $1}'); b=$(echo $line | awk '{print $2}'); cat pixy_dxy.txt |awk '$1 == "'$a'" && $2 == "'$b'" {suma+=$8;sumb+=$9} END {print "'$a'", "'$b'", suma, sumb, suma/sumb}' >> dxy_average.txt done
+
+
+计算整个基因组的dxy平均值
+
+cat pixy_dxy.txt |cut -f1 |sort|uniq >pop.list cat pop.list | while read line do a=$(echo $line | awk '{print $1}'); cat pixy_pi.txt |awk '$1 == "'$a'" {suma+=$7;sumb+=$8} END {print "'$a'", suma, sumb, suma/sumb}' >> pi_average.txt done
+
+结果可视化 2. references
+pixy manual:https://pixy.readthedocs.io/en/latest/index.html
+pixy github:https://github.com/ksamuk/pixy
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bioinfo
+ population genetics
+
- R package
- R
- plot
- synteny
- Rldeogram
- ideogram
+ pixy
+ pi
+ dxy
+ fst
@@ -9138,99 +8433,6 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
website maintenance
-
- 同源性(homology)相关概念
- /2021/06/23/concept_homology/
-
-
-
-
-Figure 1. homologs示意图
from bitesizebio website
-1. 同源性(homology)定义 homology 在生物学上被翻译成“同源性”,是指在不同生物类群中,由于共同的祖先,在一对结构或基因间表现出来的相似性。在基因序列(DNA,RNA or Protein)上体现出的相似性被称作序列同源性(sequence homology),具有序列同源性的基因被称做同源基因(homolog=homologous gene),常用于进化生物学的研究。
-2. 同源基因(homolog)分类 按不同成因分为两类(也有把homolog分为ortholog,paralog和xenolog三类的):
-
-直系同源基因(ortholog):物种形成(speciation)导致,一个共同祖先的基因由于物种形成分离到不同物种间;orthologs通常(不是绝对)保留相同的功能。
-旁系同源基因(paralog):重复(duplication)导致,一个物种的基因组内由于基因复制产生的同源性;paralogs通常具有不同的功能,或者成为假基因(pseudogene);不同物种间不是由于物种形成导致的同源基因也被称为paralogs。在旁系同源基因中,起源于一次全基因组重复(whole-genome duplication, WGD)的那些被称为ohnolog,由Ken Wolfe在2000年第一次给出定义。
-
-
-
-Figure 2. ohnologs示意图
from wikipedia: sequence homology
-3. 扩展概念
-直系同源基因:单数形式ortholog=orthologous gene;复数形式orthologs=orthologous genes。
-直系同源(orthology):一个名词,代表直系同源基因的直系同源属性;相应地,有旁系同源(paralogy)。
-直系同源群(orthogroup):在一群物种中,起源于这群物种的最近共同祖先(last common ancestor, LCA)的一个基因的一组基因,是这群物种中具有直系同源性的基因家族(gene family)的合集。
-
-按照逻辑,应该有一套完整的单词:
-
-
-
-*log 特指基因
-*logy 属性
-*logous 形容词
-*group
-
-
-
-ortholog
-orthology
-orthologous
-orthogroup
-
-
-paralog
-paralogy
-paralogous
-paragroup
-
-
-homolog
-homology
-homologous
-homogroup
-
-
-但我查了下,paragroup,homogroup这两个词是不存在的。 按照orthogrop的定义,个人觉得用homogroup代替orthogroup好像更好,因为直系同源群内包括orthologs和paralogs,即包括所有homologs。
-4. 相关概念
-
-Figure 3. analog示意图
from wikipedia: sequence homology
-
-异同源基因(xenolog):水平基因转移(horizontal/lateral gene transfer)导致,来源于寄生,腐生,共生或病毒侵染等途径转移产生的异同源基因;一般具有相似功能,但如果新环境差异巨大,功能可能出现分化。xenolog一词最早在1970年由Walter Fitch创造。由于异同源基因不是来自共同祖先,而是拥有独立起源。
-
-analog(不知道咋翻译,同功基因?):在不同物种中,不相关的基因有着相似的功能,但是独立的进化起源。 按照定义,xenolog应该是一种analog。
-
-基因家族(gene family):是指在一个物种中,起源于一个基因的复制,通常具有相似生化功能的一套基因。
-
-
-reference
-
-wiki:homology:https://en.wikipedia.org/wiki/Homology_(biology)
-wiki:sequence homology:https://en.wikipedia.org/wiki/Sequence_homology#Homoeology
-Paper:Orthologs, Paralogs, and Evolutionary Genomics:https://www.annualreviews.org/doi/abs/10.1146/annurev.genet.39.073003.114725
-Paper:analog和xenolog的由来和定义:https://academic.oup.com/sysbio/article-abstract/19/2/99/1655771?redirectedFrom=fulltext
-Paper:ohnolog的由来和定义:https://www.nature.com/articles/ng0500_3
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bio
- concept
-
-
- gene family
- orthology
- concept
- homolog
- ortholog
- paralog
- xenolog
- analog
- orthogroup
-
-
博客撰写的语法和技巧
/2022/04/15/blog_markdown_grammer/
@@ -9444,48 +8646,141 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 单系(monophyly)、并系(paraphyly)和复系(polyphyly)及相关定义
- /2021/09/20/concept_monophyly.paraphyly.polyphyly/
-
+ 同源性(homology)相关概念
+ /2021/06/23/concept_homology/
+
-
+
-Figure 1. 单系-并系-复系示意图
from wikipedia: monophyly
-1. 分类
-分类 分类 就是根据共有属性,将对象群进行分门别类。对象的属性有多少种(一般是无穷多种),就可以有多少种分类方法/分类依据。
-分类在生物学领域的应用 分类在生物学领域的应用 是依据生物的特征将生物进行分门别类整理,而生物学的分类的目的是为了准确描述生物间的亲缘关系。
-分支分类学(cladistics) 也叫支序分类学,是指一种用分支图(系统进化关系树) 来对生物进行分类和描述进化关系的分类学。
-
-2. 单系-monophyly
-定义
-
+Figure 1. homologs示意图
from bitesizebio website
+1. 同源性(homology)定义 homology 在生物学上被翻译成“同源性”,是指在不同生物类群中,由于共同的祖先,在一对结构或基因间表现出来的相似性。在基因序列(DNA,RNA or Protein)上体现出的相似性被称作序列同源性(sequence homology),具有序列同源性的基因被称做同源基因(homolog=homologous gene),常用于进化生物学的研究。
+2. 同源基因(homolog)分类 按不同成因分为两类(也有把homolog分为ortholog,paralog和xenolog三类的):
-单系(monophyly)是指一组仅由共同祖先种群及其所有直系后代组成的分类群。
-通过共有衍征被归类到一起的类群。
-一个等效的术语是holophyly。
+直系同源基因(ortholog):物种形成(speciation)导致,一个共同祖先的基因由于物种形成分离到不同物种间;orthologs通常(不是绝对)保留相同的功能。
+旁系同源基因(paralog):重复(duplication)导致,一个物种的基因组内由于基因复制产生的同源性;paralogs通常具有不同的功能,或者成为假基因(pseudogene);不同物种间不是由于物种形成导致的同源基因也被称为paralogs。在旁系同源基因中,起源于一次全基因组重复(whole-genome duplication, WGD)的那些被称为ohnolog,由Ken Wolfe在2000年第一次给出定义。
-
-例子 单系类群的例子有哺乳动物,鸟类。
-单系的意义 单系群是真正意义完整的分类群,是生物学上分类追求的结果。
-
-3. 并系-paraphyly
-定义
-
-
-并系群是由一个共同祖先和所有后代减去一个或多个单系群组成。
-通过共有祖征被归类到一起的类群。
-并系群是不完整的单系群,导致不完整的原因是部分单系群的祖征丢失。
-并系群大多是由于传统形态分类年代的认知偏差产生的具有共同形态特征的非自然类群,随着分子生物学的发展纠正了许多原来认为的单系类群为并系类群。
+
+
+Figure 2. ohnologs示意图
from wikipedia: sequence homology
+3. 扩展概念
+直系同源基因:单数形式ortholog=orthologous gene;复数形式orthologs=orthologous genes。
+直系同源(orthology):一个名词,代表直系同源基因的直系同源属性;相应地,有旁系同源(paralogy)。
+直系同源群(orthogroup):在一群物种中,起源于这群物种的最近共同祖先(last common ancestor, LCA)的一个基因的一组基因,是这群物种中具有直系同源性的基因家族(gene family)的合集。
-
-例子 并系类群的例子有苔藓植物,蕨类植物,爬行动物,鱼类,原核生物。
-分类学上的处理
-
+按照逻辑,应该有一套完整的单词:
+
+
+
+*log 特指基因
+*logy 属性
+*logous 形容词
+*group
+
+
+
+ortholog
+orthology
+orthologous
+orthogroup
+
+
+paralog
+paralogy
+paralogous
+paragroup
+
+
+homolog
+homology
+homologous
+homogroup
+
+
+但我查了下,paragroup,homogroup这两个词是不存在的。 按照orthogrop的定义,个人觉得用homogroup代替orthogroup好像更好,因为直系同源群内包括orthologs和paralogs,即包括所有homologs。
+4. 相关概念
+
+Figure 3. analog示意图
from wikipedia: sequence homology
-分类学上对并系类群一般做合并处理。
-例如传统概念的夹竹桃科(Apocynaceae)是个并系,与萝藦科(Asclepiadaceae)之后的广义夹竹桃科则成为一个单系类群。
+异同源基因(xenolog):水平基因转移(horizontal/lateral gene transfer)导致,来源于寄生,腐生,共生或病毒侵染等途径转移产生的异同源基因;一般具有相似功能,但如果新环境差异巨大,功能可能出现分化。xenolog一词最早在1970年由Walter Fitch创造。由于异同源基因不是来自共同祖先,而是拥有独立起源。
+
+analog(不知道咋翻译,同功基因?):在不同物种中,不相关的基因有着相似的功能,但是独立的进化起源。 按照定义,xenolog应该是一种analog。
+
+基因家族(gene family):是指在一个物种中,起源于一个基因的复制,通常具有相似生化功能的一套基因。
+
-4. 多系/复系-polyphyly
+reference
+
+wiki:homology:https://en.wikipedia.org/wiki/Homology_(biology)
+wiki:sequence homology:https://en.wikipedia.org/wiki/Sequence_homology#Homoeology
+Paper:Orthologs, Paralogs, and Evolutionary Genomics:https://www.annualreviews.org/doi/abs/10.1146/annurev.genet.39.073003.114725
+Paper:analog和xenolog的由来和定义:https://academic.oup.com/sysbio/article-abstract/19/2/99/1655771?redirectedFrom=fulltext
+Paper:ohnolog的由来和定义:https://www.nature.com/articles/ng0500_3
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bio
+ concept
+
+
+ gene family
+ orthology
+ concept
+ homolog
+ ortholog
+ paralog
+ xenolog
+ analog
+ orthogroup
+
+
+
+ 单系(monophyly)、并系(paraphyly)和复系(polyphyly)及相关定义
+ /2021/09/20/concept_monophyly.paraphyly.polyphyly/
+
+
+
+
+Figure 1. 单系-并系-复系示意图
from wikipedia: monophyly
+1. 分类
+分类 分类 就是根据共有属性,将对象群进行分门别类。对象的属性有多少种(一般是无穷多种),就可以有多少种分类方法/分类依据。
+分类在生物学领域的应用 分类在生物学领域的应用 是依据生物的特征将生物进行分门别类整理,而生物学的分类的目的是为了准确描述生物间的亲缘关系。
+分支分类学(cladistics) 也叫支序分类学,是指一种用分支图(系统进化关系树) 来对生物进行分类和描述进化关系的分类学。
+
+2. 单系-monophyly
+定义
+
+
+单系(monophyly)是指一组仅由共同祖先种群及其所有直系后代组成的分类群。
+通过共有衍征被归类到一起的类群。
+一个等效的术语是holophyly。
+
+
+例子 单系类群的例子有哺乳动物,鸟类。
+单系的意义 单系群是真正意义完整的分类群,是生物学上分类追求的结果。
+
+3. 并系-paraphyly
+定义
+
+
+并系群是由一个共同祖先和所有后代减去一个或多个单系群组成。
+通过共有祖征被归类到一起的类群。
+并系群是不完整的单系群,导致不完整的原因是部分单系群的祖征丢失。
+并系群大多是由于传统形态分类年代的认知偏差产生的具有共同形态特征的非自然类群,随着分子生物学的发展纠正了许多原来认为的单系类群为并系类群。
+
+
+例子 并系类群的例子有苔藓植物,蕨类植物,爬行动物,鱼类,原核生物。
+分类学上的处理
+
+
+分类学上对并系类群一般做合并处理。
+例如传统概念的夹竹桃科(Apocynaceae)是个并系,与萝藦科(Asclepiadaceae)之后的广义夹竹桃科则成为一个单系类群。
+
+4. 多系/复系-polyphyly
定义
@@ -9540,482 +8835,328 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 用HyPhy分析自然选择:(一)介绍HyPhy
- /2023/10/20/evolution_selection_HyPhy_intro/
-
+ 分析基因组共线性、计算Ks和鉴定WGD —— WGDI
+ /2021/09/11/bioinfo_synteny_WGDI/
+
-1. HyPhy的简介 HyPhy的全称是Hypothesis Testing using Phylogenies,是一款近些年受到广泛使用和关注的一款用于选择压力分析的软件。
-相较经典的选择分析软件PAML的codeML,HyPhy操作更简单一点,并且支持多线程运行,并使用了更新的模型,模型数量也更多。尤其是HyPhy的BUSTED模型,官方说比PAML的分支-位点模型(branch-site models)更强大和准确。
-2. HyPhy的版本 HyPhy官网是https://www.hyphy.org/,有很多版本可以使用,包括:
-
-网页版(datamonkey):https://www.datamonkey.org/,在网页(https://www.datamonkey.org/relax)中上传序列比对文件进行分析。最简单。
-命令行版本
-
+1. WGDI介绍 WGDI (Whole-Genome Duplication Integrated analysis)是python写的命令行工具,用于多倍化和跨物种基因组比对的综合分析,包括鉴定基因组内共线性区块,Ks计算,全基因组复制事件(WGD, whole genome duplication)的数量和时间的鉴定。
+WGDI主要的三个功能是:
-
-本地运行图形界面版本(GUI):与网页版(datamonkey)操作类似。
-在Galaxy服务器上也可以使用HyPhy的许多方法:galaxy.hyphy.org
-MEGA软件包正在整合HyPhy进界面,已可使用HyPhy部分功能
-还可以通过Python,R和其他程序语言编译HyPhy,并作为可访问的库使用。
-
-3. HyPhy的分析库和常用检测 HyPhy的标准分析库共约有100种不同的方法,最常用于测试以下四种进化过程的假说:
+2. WGDI安装 WGDI的依赖:PAML,MAFFT,MUSCLE,PAL2NAL,IQTREE。
+安装有三种方法:
-检测选择信号
-评估进化率
-比较不同的进化模型
-将自定义模型拟合到比对序列
+condaconda create -c bioconda -c conda-forge -n wgdi wgdi
建议新建一个环境
+pippip install wgdi
+githubgit clone https://github.com/SunPengChuan/wgdi.git cd wgdi python setup.py install
-4. HyPhy的模型 Hyphy的各种模型,基本上都可以分为不指定foreground和指定foreground运行的两种方式,前者对应的是检测pervasive (across the whole phylogeny) positive or purifying selection,即整个系统发育中的普遍的正选择/纯化选择,而后者对应的是检测episodic (at a subset of branches) positive or purifying selection,即检测一部分branches的独立正选择/纯化选择。
-HyPhy的模型和匹配的选择分析:
-4.1. 检测Pervasive selection的位点模型 检测个别位点是否受到普遍(整个系统发育树)的正选择或负选择,可选用以下模块:
+3. WGDI进行共线性分析 3.1. 初始输入文件 3.1.1. 输入文件 WGDI需要三个输入文件,分别是基因的位置信息文件sample.gff,染色体长度信息文件sample.len和BLAST的输出文件sample.blast.txt,要求格式如下:
-FEL(Fixed Effects Likelihood,固定效应似然法)
+input.gff
-适用于中小型数据集。
-使用最大似然(ML)方法来推断每个位点上的非同义(dN)和同义(dS)替换率,用于给定的编码比对和相应的系统发育。
-该方法假设在整个系统发育过程中,每个位点的选择压力是恒定的。
+一共七列,以tab分隔,分别为chr(chromosome number),geneid(gene name),start,end,direction(strand+/-),order(order of each chromosome,starting from 1, 每个chr内部从1开始的顺序),original(original id and not read,旧的id,不会读入)。
+和典型的GFF格式不一样
-SLAC(Single-Likelihood Ancestor Counting,单似然祖先计数法)
+input.len
-是一种近似方法,准确度与 FEL 相似,但适用于较大的数据集。不过,SLAC 不适合高度分歧的序列。
-对于给定的编码比对和相应的系统发育使用最大似然(ML)和计数方法的结合来推断每个位点上的非同义(dN)和同义(dS)替换率。
-像FEL一样,该方法假设在整个系统发育过程中,每个位点的选择压力是恒定的。
+一共三列,以tab分隔,染色体长度信息和染色体上的基因个数,chr(chromosome number), chr_length(染色体长度bp), chr_gene_number(注释到单个染色体的基因数量)。
+后面分析作图,比如点图,图中显示的染色体顺序是依据这个文件的顺序来决定的。所以可以通过修改这个文件的染色体顺序来修改图的显示。
+LG01 35874591 5368 LG02 29224816 3939 LG03 27760256 3620
+
-FUBAR(Fast, Unconstrained Bayesian AppRoximation,快速无约束贝叶斯估计法)
+sample.blast.txt
-适用于中型到大型数据集,与 FEL 相比,FUBAR 在检测位点的普遍选择方面具有效。FUBAR 是推断pervasive selection的首选方法。
-使用贝叶斯方法来推断给定编码比对和相应系统发育的每个位点上的非同义(dN)和同义(dS)替换率。该方法假设在整个系统发育过程中,每个位点的选择压力是恒定的。4.2. 检测episodic selection的位点模型 检测个别位点是否受到偶发性(在分支的子集)的正选择或负选择,可选用以下模块:
+蛋白质序列的自我比对,BLAST的-outfmt 6输出格式的文件sample.blast.txt
+3.1.2. 用开发者脚本准备input.gff和input.len 开发者准备的三个脚本来对原始的sample.gff进行处理,对基因名称进行排序和重命名,生成新基因名称,以及输入文件input.gff,input.len,和用来准备sample.blast.txt的input.pep.fa。
+脚本地址:https://github.com/SunPengChuan/wgdi-example/tree/main/genome/Aquilegia_coerulea/Aquilegia_coerulea
-MEME(Mixed Effects Model of Evolution,进化混合效应模型)
+01.getgff.py
-采用混合效应最大似然方法来检验个别位点是否受到episodic positive或多样化选择的影响的假设。换句话说,MEME的目的是检测在一定比例的分支下正选择下进化的位点。
-对于每个位点,MEME推测两种ω值,以及在给定的分支下,以此ω进化的概率。为了推断ω,MEME会推断α(dS) 和两个不同的β(dN),β−和β+。在空模型和备择模型中,MEME强制β−≤α。因此β+是空模型和备择模型不同的关键:在空模型中,β+被限制为≤α,但在备择模型中不受限制。最终,当β+>α时,位点被推断为正选择,并使用似然比检验显示显著。
-需要注意的是,MEME 不接受先验分支规范(v2.3-dev 及更高版本将引入此功能)。
-MEME 是检测单个位点正选择的首选方法。4.3. 检测蛋白序列比对的正选择/定向选择的位点模型
+功能:从传统的gff3格式的注释文件sample.gff中提取中间文件temp.gff
+用法:python 01.getgff.py sample.gff temp.gff
+temp.gff格式如下:
-
-FADE(FUBAR Aproach to Directional Evolution)
-
+LG01 DR000002 884947 886421 + LG01 DR000003 886634 890799 -
+
-FADE是一种基于FUBAR引入的贝叶斯框架(Bayesian framework)的方法,用来测试蛋白质比对中的位点是否受定向选择的影响。
-具体地说,FADE将系统地测试,对于比对中的每个位点,与背景分支相比,一组指定的前景分支是否显示对特定氨基酸的替代偏向。
-该偏差参数的高值表明该位点对特定氨基酸的取代作用大大超过预期。使用贝叶斯因子(BF)评估FADE的统计显著性,其中BF>=100提供了强有力的证据,表明该位点正在定向选择下进化。
-重要的是,与HyPhy中的大多数方法不同,FADE不使用可逆的马尔可夫模型,因为它的目标是检测定向选择。因此,FADE分析需要一个有根的系统发育。在使用FADE进行分析之前,可以使用基于浏览器的交互工具Phylotree.js(http://phylotree.hyphy.org/)来帮助建立树的根。 4.4. 检测独立分支的episodic selection(branch-site model,at a subset of sites) 检测个别分支是否受到偶发性(在部分位点)的正选择或负选择,可选用以下模块:
+01.getgff.py脚本:
-
-aBSREL(adaptive Branch-Site Random Effects Likelihood,自适应分支位点随机效应似然法)
+import sysimport pandas as pddata = pd.read_csv(sys.argv[1 ], sep="\t" , header=None ,skiprows=3 ) data = data[data[2 ] == 'mRNA' ] data = data.loc[:, [0 , 8 , 3 , 4 , 6 ]] data[8 ] = data[8 ].str .split(':|=|;' ,expand=True )[1 ] data[0 ] = data[0 ].str .replace('Chr_0?' ,'' ) data.to_csv(sys.argv[2 ], sep="\t" , header=None , index=False )
+
+
+02.gff_lens.py
-aBSREL是常见的“Branch-Site”模型的改进版。aBSREL 既可以先验地指定分支(即指定foreground branches)来检验选择,也可以探索性地检验每个世系的选择。(p-value将自动进行BH校正)
-aBSREL 是检测各个分支正选择的首选方法。
-需要注意一点的是,aBSREL是多次独立对指定的每一支进行检验的,也就是说,你指定了许多的branches,实质上和多次指定不同一个branch来多次运行,效果是一样的,而并非将这些branches视为一个整体去做检测4.5. 检测一个基因是否在某一分支或一组分支上的任何位点经历了正选择 检测一个基因是否在特定分支或部分分支的任何位点经历了正选择?
+功能:从temp.gff中生成两个输入文件:input.gff和input.len
+用法:python 02.gff_lens.py temp.gff input.gff input.len
+这个脚本还对基因名称做了整理和重命名。先对temp.gff进行排序,再按照物种标识符(md)+染色体名称(LG01)+基因名称(g00001)进行重命名,input.gff的第二列是新名称,第七列是旧名称。
+修改物种标识符(md)可以通过修改脚本的md来实现。
-
-BUSTED(Branch-Site Unrestricted Statistical Test for Episodic Diversification,分支位点无限制统计检验)
-
+LG01 mdLG01g00001 23987 27163 + 1 DR032173 LG01 mdLG01g00002 30894 32329 - 2 DR032172
+
-通过在预先指定的系统树上测试一个基因是否在至少一个分支的至少一个位点上经历了正选择,BUSTED提供了一个全基因(非位点特异性)正选择的测试。当运行BUSTED时,用户可以指定一组前景支来测试正选择(其余分支被指定为“背景”),或者用户可以测试整个系统发生的正选择。在后一种情况下,整个树被有效地视为前景,正选择的检验考虑整个系统发育。
-这种方法对于相对较小的数据集(少于10个分类单元)特别有用,在这些数据集中,其他方法可能没有足够的功效来检测选择。
-这种方法不适用于确定受正向选择影响的特定位点。
-对于每个系统发育分区(前景和背景分支位点),BUSTED拟合了一个具有三个速率类的密码子模型,约束为ω1≤ω2≤1≤ω3。与其他方法一样,BUSTED同时估计每个分区属于每个ω类的位点的比例。这种模型作为选择检验中的替代模型,被称为无约束模型。然后,BUSTED通过比较这个模型与前景分支上ω3=1(即不允许正选择)的空模型的拟合度来测试正选择。这个零模型也被称为约束模型。如果零假设被拒绝,那么就有证据表明,至少有一个位点在前景枝上至少有一部分时间经历了正选择。重要的是,一个显著的结果并不意味着该基因是在整个前景的正选择下进化的。4.6. 检测选择压力的放松/加强 全基因组的选择压力是否随着分支的某个子集而放松或加强?
+02.gff_lens.py脚本:
-
-RELAX
+import sysimport pandas as pddata = pd.read_csv(sys.argv[1 ], sep="\t" , header=None ) new = data[1 ].str .split('.' ).str data['id' ] = new[0 ].values data['cha' ] = data[3 ]-data[2 ] for name, group in data.groupby(['id' ]): if len (group) == 1 : continue ind = group.sort_values(by='cha' , ascending=False ).index[1 :].values data.drop(index=ind, inplace=True ) data['order' ] = '' data['newname' ] = '' data[2 ] = data[2 ].astype('int' ) print (data.head())for name, group in data.groupby([0 ]): number = len (group) group = group.sort_values(by=[2 ]) data.loc[group.index, 'order' ] = list (range (1 , len (group)+1 )) data.loc[group.index, 'newname' ] = list ( ['md' +str (name)+'g' +str (i).zfill(5 ) for i in range (1 , len (group)+1 )]) data['order' ] = data['order' ].astype('int' ) data = data[[0 , 'newname' , 2 , 3 , 4 , 'order' , 1 ]] print (data.head())data = data.sort_values(by=[0 , 'order' ]) data.to_csv(sys.argv[2 ], sep="\t" , index=False , header=None ) lens = data.groupby(0 ).max ()[[3 , 'order' ]] lens.to_csv(sys.argv[3 ], sep="\t" , header=None )
+
+
+03.seq_newname.py
-RELAX检测选择压力与一组指定的 “测试 (TEST)”分支的放松(如净化选择变得不那么严格)或加强(如净化选择变得更强)。这种方法不适用于检测正选择。
-RELAX是一种假设检验框架,它检测自然选择的强度是否沿着一组指定的测试分支被放松或加强。因此,RELAX不是明确检测正选择的合适方法。相反,RELAX在识别特定基因上自然选择严格程度的趋势和/或变化方面最有用。
-RELAX需要一组指定的 “测试 “分支与第二组 “参考 “分支进行比较(注意,不必分配所有的分支,但测试集和参考集各需要一个分支)。RELAX首先对整个系统发育过程拟合一个具有三个ω类的密码子模型(空模型)。然后,RELAX通过引入作为选择强度参数的参数k(其中k≥0)作为推断ω值的指数:ωk来测试放松/强化选择。具体来说,RELAX固定推断的ω值(都是ωk<1,2,3>),并对测试分支推断出一个将比率修改为ωk<1,2,3>的k值(替代模型)。然后,RELAX进行似然比检验,比较替代模型和空模型。
-K>1表示选择强度加强,K<1表示选择压力放松。
+功能:根据input.gff的第二列新名称和第七列旧名称,来把旧名称的sample.pep.fa改成新名称input.pep.fa
+用法:python 03.seq_newname.py input.gff sample.pep.fa input.pep.fa
,cds序列也一样修改 python 03.seq_newname.py input.gff sample.cds.fa input.cds.fa
+脚本最后一行print(n)
打印一共修改了多少次,可以用来判断是否修改完全。
-4.7. 模型的选择
-基本选择
+import sysimport pandas as pdfrom Bio import SeqIOdata = pd.read_csv(sys.argv[1 ], sep="\t" , header=None , index_col=6 ) id_dict = data[1 ].to_dict() print (data.head())seqs = [] n = 0 for seq_record in SeqIO.parse(sys.argv[2 ], "fasta" ): if seq_record.id in id_dict: seq_record.id = id_dict[seq_record.id ] n += 1 else : continue seqs.append(seq_record) SeqIO.write(seqs, sys.argv[3 ], "fasta" ) print (n)
+
+generate_conf.py脚本准备input.gff和input.len
+脚本generate_conf.py
-如果检测类似paml中的M8位点模型,最好用FUBAR,如果是小数据,则用FEL,大数据并且分歧度不是很高用SLAC。
-如果检测某个前景支当中正选择位点,最好用MEME。
-如果检测单独的某个branch是否存在正选择,最好用aBSREL。
-如果检测一系列的branches的正选择,即检验你的这个基因,在指定的branches的任意一个位点是否在某段时间经历过正选择,则用BUSTED,BUSTED是不适合检测单独位点的正选择的。
-如果检测选择压力的放松/加强,用RELAX。
-如果用蛋白序列来检测氨基酸位点正选择/定向选择,用FADE。
+使用脚本generate_conf.py:https://github.com/xuzhougeng/myscripts/blob/master/comparative/generate_conf.py 从基因组genome.fa和注释文件sample.gff3中获取input.gff和input.len文件。
+
+命令是python generate_conf.py -p input genome.fa sample.gff3
。
+
-模型选择的其他考虑因素
+可能的错误
-几乎所有模型(还有一些没常用的模型没有提到)都可以分为指定前景和不指定前景的模式运行,但根据分析目的不同,会有最优选择。
-当然也可以把某种模型都跑一遍,比如各种位点模型都走个流程。
-还也可以结合paml的模型比较,例如,对于检测Pervasive selection的位点模型,你可以结合paml的M8、M2a来分析。对于检测episodic selection的branch-site,你可以结合paml的branch-site modelA和BUSTED/aBSREL来比较分析。
+如果存在contig没被注释到基因,generate_conf.py会报错:
-5. 标准命令行版本HyPhy的使用 5.1. 安装 conda install -c bioconda hyphy
-5.2. 输入文件 HyPhy的各个模型的输入文件都是下面两个:
-
-samples.aln:fasta或phylip格式的序列比对文件
-tree.nw:newick格式的树文件
-
+Traceback (most recent call last): File "generate_conf.py", line 117, in <module> chrom=chrom,lens=lens,count=gene_count[chrom]), file=len_file) KeyError: 'contig030'
+
-有些模块的分析可以指定前景支/测试支(Foreground/TEST),其余支是参考支(reference,默认,无需标记)。
-标记方法:前景支/测试支(类比codeml的branch model的前景支)的分支名和支长(如果存在)之间标注{foreground}。
-另外,HyPhy官网的phylotree工具(http://phylotree.hyphy.org/)可以在线对系统树进行标注。
-Pig支做前景支的标记实例:
+并在contig030的地方停止继续写入input.len,input.gff不受影响。
-((((Pig{FG}:0.147969,Cow:0.213430):0.085099,Horse:0.165787,Cat:0.264806):0.058611,((RhMonkey:0.002015,Baboon:0.003108):0.022733,(Human:0.004349,Chimp:0.000799):0.011873):0.101856):0.340802,Rat:0.050958,Mouse:0.097950);
-
-5.3. 运行 HyPhy各个模型的运行都类似,修改busted为其他模型即可:
-nohup HYPHYMPI busted --alignment aln.fas --tree tree.nw --test FG --output busted.json > busted.log 2>&1 &
-5.4. 参数
-–alignment:比对好的codon文件,可以是fas格式,也可以是phylip格式。
-–tree:newick格式的树文件,如有test支标记在树文件里(标记方法见输入文件)
-–branches或–test:指定树文件中标记的分支为前景支,RELAX模块用–test指定,其他模块用–branches指定。
-–output:指定输出json文件名称,默认是输入比对文件加json后缀,如aln.fas.json。
-屏幕输出的是markdown格式,建议保存为relax.log文件
-
-5.5. 多线程实现
-方法一(新版本hyphy可以自动根据需求采用多线程,所以线程也可以不设置。)
+
+可以用下面的脚本get_len.sh获取input.len
+# samtools faidx genome.fa cat genome.fa.fai |cut -f1,2 >chrom.len # cat sample.gff3 |awk '$3 == "gene" {print $1}' >chrom.tem contig=$(head -1 chrom.tem |sed "s/[0-9]//g") c_number=$(tail -1 chrom.tem|sed "s/[A-Za-z]//g") for i in $(seq -w 1 $c_number); do echo -e $contig$i"\t"$(grep "$contig$i" chrom.tem |wc -l);done >chrom.count # join chrom.len chrom.count|sed "s/ /\t/g" >input.len # rm chrom.tem chrom.len chrom.count
+
+准备sample.blastp.txt 用蛋白序列建库,blastp进行蛋白序列的自我比对,获取-outfmt 6格式的输出文件sample.blastp.txt。 如果用开发者脚本准备的输入文件,则这里需要用重命名的input.pep.fa代替sample.pep.fa。 命令如下:
-hyphy slac --alignment alignment.fasta --tree tree.newick --output slac.json
+makeblastdb -in sample.pep.fa -dbtype prot
+blastp -num_threads 32 -db sample.pep.fasta -query sample.pep.fa -outfmt 6 -evalue 1e-5 -num_alignments 20 -out sample.blastp.txt &
+3.2. 共线性分析 WGDI的分析的参数都是在配置文件中进行设置,所以分析都需要先创建配置文件,然后修改配置文件,最后运行程序。 每个配置项中都有gff1,gff2;lens1,lens2;blast这五个参数,是相同的。
+3.2.1. 绘制共线性点阵图 WGDI的d模块绘制基因组内的共线性点阵图,初略估计是否有基因复制区域。 共线性点阵图是把两个基因组(做WGD分析则是把一个基因组的两份复制)分别作为横纵坐标,把检测到的同源匹配基因在相应位置做点标记;点数量多且相邻时,会有点组成的线出现,线代表比较长的共线性区块,代表着历史上的复制事件。
+
+创建配置文件input.confwgdi -d ? >input.conf
+
+创建input.conf配置文件,里面包含[dotplot]配置参数。
-方法二(需要openmp支持)HYPHYMPI slac --alignment alignment.fasta --tree tree.newick CPU=interger
-方法三mpiexec --oversubscribe -n 10(线程数) HYPHYMPI absrel --alignment alignment.fasta --tree tree.newick --branches Foreground
+修改配置文件
-5.6. 结果文件
-busted.json:json格式,可以在网站http://vision.hyphy.org 上传这个结果文件进行可视化,直观展示。结果中site的数量代表的是密码子的数量,是碱基数量的1/3。
-busted.log:markdown格式,直接查看方便。
-
-5.7. 结果展示
-json格式的结果具体的介绍可以参考https://www.hyphy.org/resources/json-fields.pdf。
-结果的可视化可以在网站 http://vision.hyphy.org/ 上上传json格式文件,然后交互式的展示结果。
-
-6. reference
-HyPhy官网:https://www.hyphy.org/
-HyPhy的github:https://github.com/veg/hyphy-analyses/tree/master
-介绍HyPhy的博客:https://www.jianshu.com/p/2e8f7f7d545a
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+input.conf配置文件的信息
+[dotplot] blast = blast file # sample.blastp.txt文件 gff1 = gff1 file # 比对项1的input.gff文件 gff2 = gff2 file # 比对项2的input.gff文件,如果是自我比对,则gff1和gff2一样 lens1 = lens1 file # 比对项1的input.len文件 lens2 = lens2 file # 比对项2的input.len文件,如果是自我比对,则lens1和lens2一样 genome1_name = Genome1 name # 比对项1的基因组名称 genome2_name = Genome2 name # 比对项2的基因组名称,如果是自我比对,与genome1_name一致 multiple = 1 # 最好的同源基因对数量,输出结果图中会用红点表示。可以先画图,再来修改这个值。 score = 100 # blast输出的score过滤 evalue = 1e-5 # blast输出的evalue过滤 repeat_number = 10 # 显示的一个基因对应的同源基因的数量 position = order # 从order,start,end中选 blast_reverse = false ancestor_left = ancestor file or none # 点阵图左侧物种的祖先染色体区域,一般设置成none就好 ancestor_top = ancestor file or none # 点阵图顶侧物种的祖先染色体区域,一般设置成none就好 markersize = 0.5 # 点的尺寸 figsize = 10,10 # 图的尺寸 savefig = savefile(.png, .pdf, .svg) # 保存的图片结果名称和格式
+
+input.conf配置文件示例
+[dotplot] blast = sample.blastp.txt gff1 = input.gff gff2 = input.gff lens1 = input.len lens2 = input.len genome1_name = sample genome2_name = sample multiple = 1 score = 100 evalue = 1e-5 repeat_number = 10 position = order blast_reverse = false ancestor_left = none ancestor_top = none markersize = 0.5 figsize = 10,10 savefig = out_dotplot.png
- ]]>
-
- bio
- evolution
- selection
-
-
- biosoft
- bioinfo
- selection
- HyPhy
- FEL
- SLAC
- FUBAR
- MEME
- FADE
- aBSREL
- BUSTED
- RELAX
- PAML
- codeML
-
-
-
- 一文说清K<sub>A</sub>K<sub>S</sub>、d<sub>N</sub>d<sub>S</sub>、D<sub>n</sub>D<sub>s</sub>,以及omega(ω)
- /2023/10/09/evolution_selection_dNdS_intro/
-
-
-1. 背景
-木村资生(Masahiko Kimura)为代表的群体遗传学家划时代地提出了中性漂变理论,在分子进化领域得到了越来越多的证据。简单来说,就是在当时掌握的基因序列中,同义突变远多于非同义突变。为了更好地研究中性理论和自然选择在基因进化上所起的作用,非同义突变和同义突变的定量化研究显得十分迫切。
-在这一领域,三位来自九州大学的学者率先进行了有益的尝试和探索。接下来,两组来自美国德州大学奥斯汀分校(University of Texas, Houston)的科学家做出了重要的贡献。其中一组包括台湾著名学者李文雄(Wen-Hsiung Li)和吴仲义(Chung-I Wu)描述的KA KS ,另一组是根井正利(Masatoshi Nei)和五条堀孝(Gojobori Takashi)描述的dN dS 。
-在这些工作的基础上,发展出使用omega(ω)=dN /dS (KA /KS )进行选择压检验的方法。
-
-2. 概念
-替换(substitution)
+
+运行wgdi -d input.conf
+
+结果 结果保存在out_dotplot.pdf的图中。
+
+结果解释:
-进化过程中基因组上一个位点从一个碱基突变成另一个碱基的过程,与点突变的含义相近。
-在这篇博客中,特指基因编码序列的替换,可能造成或不造成氨基酸产物的变化。
+图中有三种颜色,红色表示genome2的基因在genome1中的最优同源匹配,次优的四个基因是蓝色,其余的是灰色。
+WGDI会过滤掉自身与自身的比对结果,所以图中对角线出现的片段不是自身比对结果,而是串联基因(tandem)形成的共线性区块。
+如果基因组存在加倍事件,则基因组不同区域的同源基因的排布顺序会比较一致,在图上就能观察到多个点排列组成的“线”。
+3.2.2. 获取共线性区块 WGDI的icl(Improved version of ColinearScan)模块用于获取共线性区块的具体位置信息。与MCScanX软件功能一致。
+
+建立配置文件wgdi -icl ? >>input.conf
+
+在已有配置文件input.conf的基础上添加[collinearity]配置参数。
-同义替换(synonymous substitution)
+修改配置参数
+[collinearity] gff1 = gff1 file # 比对项1的input.gff文件 gff2 = gff2 file # 比对项2的input.gff文件,如果是自我比对,则gff1和gff2一样 lens1 = lens1 file # 比对项1的input.len文件 lens2 = lens2 file # 比对项2的input.len文件,如果是自我比对,则lens1和lens2一样 blast = blast file # sample.blastp.txt文件 blast_reverse = false multiple = 1 # 最好的同源基因对数量,输出结果图中会用红点表示 process = 8 # 线程 evalue = 1e-5 # blast输出的evalue过滤 score = 100 # blast输出的score过滤 grading = 50,25,10 # 为red,blue,gray三种颜色的点指定不同的分数 mg = 25,25 # 检测共线性区域的最大gap值,即共线性区块内含的最大空缺基因数量。 pvalue = 1 # 显著性,评估共线性blocks的紧密程度和独特程度的参数,取值范围是0-1,更好的共线性范围是0-0.2。 repeat_number = 10 # 允许去除超过部分种群的同源基因数量 positon = order savefile = out.collinearity # 保存共线性结果的文件名
+
+运行wgdi -icl input.conf
+
-
-基因编码序列中一个位点的替换,没有造成氨基酸产物的变化,这种替换被称为同义替换。
-
-
-非同义替换(non-synonymous substitution)
+4万基因的数据量,这一步耗时20分钟。
+
+结果 结果out.collinearity中记录着共线性区域。
+
+# Alignment起始的行记录着共线性区块的信息,包括得分(score),显著性(pvalue),基因对数(N),strand(plus/minus)。
+3.2.3. 计算KaKs WGDI的ks模块计算共线性区块的基因对间的ka和ks。
+
+建立配置文件wgdi -ks ? >>input.conf
+
+在已有配置文件input.conf的基础上添加[ks]配置参数。
+
+修改配置参数
+[ks] cds_file = input.cds.fa # 基因组(一个或多个)的cds序列 pep_file = input.pep.fa # 基因组(一个或多个)的氨基酸序列;可选参数,如果不设置,将用biopython模块翻译cds文件获得。 align_software = muscle # 选择多序列比对软件:{muscle,mafft} pairs_file = out.collinearity # tab分隔的共线性基因对。上一步共线性分析的结果文件,也支持MCScanX的共线性分析结果文件。 ks_file = out.ks # 保存ks结果的文件名
+
+运行wgdi -ks input.conf
+
-基因编码序列中一个位点的替换,造成氨基酸产物的变化,这种替换被称为非同义替换。
+WGDI会用muscle根据氨基酸序列进行联配,然后用pal2pal.pl基于cds序列将氨基酸联配转为密码子联配,最后用paml中的yn00和ng86两种方法计算ka和ks。
+4万基因的数据量,这一步耗时40分钟。
-同义替换率(synonymous substitutions rate, dS 或KS )
+结果
-定义:每同义位点的同义碱基替代数 (the number of synonymous substitutions per synonymous site),用dS 或KS 表示。
-通常是通过对两条蛋白编码序列进行比较,用发生同义突变的位点数目比上可能发生同义突变的所有位点总数,比值用来估计同义替换率。
+out.ks结果有6列,对应的是每个基因的ka和ks。
-
-非同义替换率(non-synonymous substitutions rate, dN 或KA )
+$ head -2 out.ks id1 id2 ka_NG86 ks_NG86 ka_YN00 ks_YN00 vvi161s1g00311 vvi161s1g00312 0.2986 1.2027 0.3047 1.3864
+
+3.2.4. 整合共线性区块信息 WGDI的bi模块可以整合共线性区块和ks信息成一个可读性更强的csv文件。
+
+建立配置文件wgdi -bi ? >>input.conf
-
-定义:每非同义位点的非同义碱基替代数 (the number of non-synonymous substitutions per non-synonymous site),用dN 或KA 表示。
-通常是通过对两条蛋白编码序列进行比较,用发生非同义突变的位点数目比上可能发生非同义突变的所有位点总数,比值用来估计非同义替换率。
-
-
-omega(ω) 值(dN /dS 或KA /KS 比值的估计)
+在已有配置文件input.conf的基础上添加[blockinfo]配置参数。
+
+修改配置参数
-
-同义替换率与非同义替换率的比值,能够反映基因的选择压力。
-通常是通过对两条基因编码序列进行比较,用计算得到的同义替换率比上非同义替换率,得到dN /dS 或KA /KS 的估值ω 值。
-
-
-同义替换数(Ds )
+[blockinfo] blast = input.blastp.txt gff1 = input.gff gff2 = input.gff lens1 = input.len lens2 = input.len collinearity = out.collinearity # 共线性区域结果文件 score = 100 evalue = 1e-5 repeat_number = 20 position = order ks = out.ks # ks结果文件 ks_col = ks_NG86 # 声明使用ks结果文件的列名 savefile = block_info.csv
+
+
+运行wgdi -bi input.conf
+
+结果
+
+结果文件block_info.csv共11列:
-与dS 不同,代表的是发生了同义替换的碱基数目。
+id:共线性结果的id
+chr1,start1,end1:点图左边的基因组共线性区块的位置范围
+chr2,start2,end2:点图上边的基因组共线性区块的位置范围
+pvalue:共线性结果评估,一般认为<0.01更合理
+length:共线性区块长度
+ks_median:共线性区块上所有基因对ks的中位数,用于评估ks分布
+ks_average:共线性区块上所有基因对ks的平均值
+homo1-n:multiple参数为n,则有n列,表示一个基因有n个最佳匹配时的取值,对应点阵图中的红点
+block1,block2:共线性区块上基因order的位置
+ks:共线性区块上基因对的ks值
+density1,density2:共线性区块的基因分布密集程度,值越大越密集
+class1,class2:在alignment模块中用到,对应两个block分组。默认值是0,表示两个block是同一组。这两列需要根据覆盖率、染色体核型等多个方面进行确定。
-
-非同义替换数(Dn )
+3.3. 根据ks分布拟合单次WGD事件
+背景知识 在Lynch和Conery在2000年发表在Science的论文中,他们证明了小规模基因复制的Ks分布是L型,而在L型分布背景上叠加的峰则是来自于演化历史中某个突然的大规模复制事件。 L型分布(呈指数分布, exponential distribution)的峰可能是近期的串联复制引起,随着时间推移基因丢失,形成一个向下的坡。正态分布(normal distribution)的峰则是由全基因组复制引起。
-
-与dN 不同,代表的是发生了非同义替换的碱基数目。
-
-3. KA 和KS 、dN 和dS ,以及Dn 和Ds 之间的区别
-dN 和dS 与KA 和KS 含义是一样的,可相互替代使用
+这就意味着我们可以根据ks频率分布图的正态分布峰来判断物种历史上发生过的全基因组复制事件,并通过ks值拟合峰值获得WGD事件发生的时间。
+
+根据ks分布拟合单次WGD事件的峰
-KA 和KS 与dN 和dS 是两组科学家对每个位点的非同义和同义替换数目的不同的描述:李文雄和吴仲义使用的是KA 和KS ,而根井正利和五条堀孝则将同样的概念命名为dN 和dS 。
+通过kspeaks(-kp)模块过滤blockinfo文件,根据ks峰值分布设置ks_area过滤参数,同时可以调整homo参数看看效果,得到单独一个WGD事件形成的共线性区块和相应的ks值。
+接着用PeaksFit(-pf)模块对值的峰进行拟合得到模型参数。
+最后用KsFigures(-kf)将拟合结果绘制到一张图上。
+想看单个WGD事件的ks点阵图还可以把blockks的blockinfo参数换成kspeaks(-kp)模块过滤后得到的ks_median.distri.csv,跑一遍绘制ks点阵图(-bk)模块获取过滤后的ks点阵图。
+因为用WGDI对ks频率分布图的峰进行拟合时,一次只能拟合一个峰。当发现两次或多次WGD事件后,需要两次或多次重复以上分析过程,分别获取WGD的ks拟合图。
+3.4. ks拟合和可视化 3.4.1. ks可视化——过滤并绘制ks点阵图 第一步绘制的点阵图里包含基因组上检测到的所有同源基因对(所以点特别多),bk模块绘制的ks点阵图的点只包含确认了共线性的基因对,用ks值作为点的颜色信息,可以根据ks点阵图的共线性区域的颜色来区分不同时期的多倍化事件。
+
+建立配置文件wgdi -bk ? >>input.conf
+
+在已有配置文件input.conf的基础上添加[blockks]配置参数。
-dN 和dS (KA 和KS )与Dn 和Ds 是不同的
+修改配置参数
+[blockks] lens1 = input.len lens2 = input.len genome1_name = sample genome2_name = sample blockinfo = block_info.csv # bi模块整合结果 pvalue = 0.2 # 共线性区块的显著性,对应blockinfo的pvalue列 tandem = true # 是否过滤串联基因形成的共线性区(在点阵图上对角线附近) tandem_length = 200 # 如果tandem=true,那么评估tandem的标准为两个区块的物理距离 markersize = 1 area = 0,2 # 输出结果中ks的取值范围 block_length = 5 # 一个共线性区块的最小基因对数量,对应blockinfo的length列 figsize = 8,8 savefig = ks.dotplot.pdf
+
+运行wgdi -bk input.conf
+
+结果 结果保存在ks.dotplot.pdf文件中。
+
+结果解释:
-Dn 和Ds 是替换数量的估计,分别代表非同义替换位点和同义替换位点的数目,即计算dN 和dS 的分子。
-dN 和dS (KA 和KS )则是替换率的估计,分别代表非同义替换率和同义替换率。
+图中每个点都是共线性区块的基因对,点的颜色是ks值。
+可以用共线性区块的ks中位数来初步判断复制发生的时间,所以图中颜色相近的共线性区块看作同时发生的复制,当图中大致观察到两种颜色的点和线时,表示对应的两次全基因组复制事件。
-4. 计算KA 和KS (dN 和dS )的算法模型
-目前计算KA 和KS (dN 和dS )通常是使用两条或多条现存类群的基因编码序列,并可以结合系统发育树来共同推断进化过程中发生的碱基替换情况。
-计算KA 和KS 的算法有非常多,可分为三类:**近似法(Approximate methods)、 最大似然法(Maximum-likelihood methods)和 计数法(Counting methods)**。
-在使用软件进行具体计算时,常用的包括最大似然法的代表模型YN(Yang and Nielsen,2000),NG(Nei 1986)等。
-然而,除非要比较的序列关系很远(在这种情况下,最大似然法占优势),否则所使用的算法类别对所获得的结果影响很小。只要有足够的数据,三种方法都会得出相同的结果。更重要的是所选方法中隐含的假设。
+3.4.2. ks可视化——过滤并绘制ks频率分布图 通过计算共线性区块的基因对ks值,可以获得基因对复制发生的时间,如果有全基因组复制(WGD)发生,那么现有物种的基因组会留下许多ks相近的基因对,通过ks频率分布图可以看到峰,由此判断WGD的发生次数和发生时间。
+
+建立配置文件wgdi -kp ? >>input.conf
-4.1. 近似法(Approximate methods)
-近似法的三个基本步骤
+在已有配置文件input.conf的基础上添加[kspeaks]配置参数。
+
+修改配置参数
+[kspeaks] blockinfo = block_info.csv pvalue = 0.2 # 共线性区块的显著性,对应blockinfo的pvalue列 tandem = true # 是否过滤串联重复基因形成的共线性区(在点阵图上对角线附近) block_length = 5 # 共线性区块的基因对的数目 ks_area = 0,10 # 对应blockinfo的ks列,0-10表示只保留ks在0-10的基因对。 multiple = 1 # 选择homo中的哪列用于后续过滤,一般选homo1 homo = -1,1 # 根据homo的共线性区块中基因对的总体得分(取值范围-1,1,值越大表示最佳匹配的基因对越多,也就是越近期的WGD事件得到的基因对)对共线性区块进行过滤,只取得分在-1-1之间的共线性区块,即不根据homo过滤。 fontsize = 9 area = 0,3 figsize = 10,6.18 savefig = ks_median.distri.pdf # ks频率分布图结果 savefile = ks_median.distri.csv # 对block_info.csv的过滤后结果,与block_info.csv格式一致
+
+运行wgdi -kp input.conf
+
+
+根据配置参数过滤blockinfo文件的低质量数据,再绘制频率分布图。
+
+结果 结果保存在ks_median.distri.pdf(ks峰图)和ks_median.distri.csv(输入文件block_info.csv过滤后结果,与block_info.csv格式一致)。
+
+从峰图的峰的数量可以估计WGD的数量。
+
+说明 因为用WGDI对ks频率分布图的峰进行拟合时,一次只能拟合一个峰。当发现两次或多次WGD事件后,需要两次或多次重复以上分析过程,分别获取WGD的ks拟合图。
+所以也可以先不过滤绘制ks频率分布图,初步查看ks的分布情况;再根据每次WGD事件的分布设置ks_area,multiple,homo三个参数来分离单次WGD事件的数据,再进行过滤-拟合-作图。
+三个参数的设置:
-计算两个序列中同义和非同义位点的数量,或通过序列长度乘以每类替换的比例来估算这一数量;
-计算同义和非同义替换的数量;
-纠正多次替换(multiple substitutions)的情况。
+ks_area:根据单次WGD的ks分布范围设置,过滤出单次WGD的数据。
+multiple:选择不同的homo,一般没有特殊需求,选择最优的,即1。
+homo:设置不同的homo范围,观察做出的图中峰的变化来确定homo范围是否合理。
+3.4.3. 高斯拟合ks频率分布图的峰——pf模块
+建立配置文件wgdi -pf ? >>peak.conf
+
+在已有配置文件input.conf的基础上添加[kspeaks]配置参数。
-近似法的特点
+修改配置参数
+[peaksfit] blockinfo = ks.distri.csv mode = median bins_number = 200 ks_area = 0,10 fontsize = 9 area = 0,3 figsize = 10,6.18 savefig = ks.peaksfit.pdf
+
+运行wgdi -pf peak.conf
+
+结果
+
-三个基本步骤,尤其是后两步,需要做出简单的假设,才能计算;
-由于最后考虑(第三步),不可能精确确定多次替换的数量。
+拟合图ks.peaksfit.pdf
+参数:包括一个R-square和3个拟合参数the gaussian fitting curve parameters
+拟合参数用于后续ksfigure模块作图。
-4.2. 最大似然法(Maximum-likelihood methods)
-最大似然法特点
+R-square: 0.9804748699350867 The gaussian fitting curve parameters are : 5.02360835744403 | 0.8319599832352784 | 0.10382203381206191
+
+其中0.83是峰值,5.02是幅值,0.10是标准差。
+3.4.4. 拟合结果作图——kf模块
+建立配置文件 在已有配置文件input.conf的基础上添加[ksfigure]配置参数。wgdi -kf ? >>input.conf
+
+创建all_ks.csv文件
+
-最大似然法利用概率论同时完成近似法的所有三个步骤。
-它通过推导出产生输入数据的最可能值来估算关键参数,包括序列之间的分歧度(divergence)和转换/颠换比率(transition/transversion ratio)。
-
-4.3. 计数法(Counting methods)
-为了量化替换的数量,我们可以重建祖先序列并记录推断出的位点变化(直接对现存物种序列差异进行计数可能会低估);
-将位点的替换率拟合到预先确定的类别中(贝叶斯方法;对于小数据集效果不佳);为每个密码子生成单独的替换率(计算成本高)。
-
-5. dN 和dS (KA 和KS )和 omega(ω) 的计算过程 由于算法的多样性,计算过程也有多种多样。以根井正利所著的经典书目《分子进化与系统发育》中的进化路径法(Evolutionary Pathway Methods)为例,对KA 和KS (dN 和dS )的计算过程加以简单介绍。
-5.1. 命名变量 同义替换率 dS 或KS = 同义替换数 Ds / 同义替换位点总数 Ts 非同义替换率 dN 或KA = 非同义替换数 Dn / 非同义替换位点总数 Tn
-5.2. 以TTT(Phe)转变为GTA(Val)为例
-先考虑TTT的序列替换的所有可能:
-
-
-查看密码子表可知,TTT的前两个位点的任意变化,都将导致氨基酸的变化,而第三个位点的突变,有2/3的可能性会导致氨基酸变化(只有TTT变为TTC都是编码苯丙氨酸Phe)。
-所以,对于TTT,非同义替换位点总数 Tn = 2 + 2/3 = 8/3,而同义替换位点总数 Ts = 0 + 1/3 = 1/3。
-
-
-再比较TTT到GTA变化的简约路径,共有两条:
-
-
-TTT(Phe)-GTT(Val)-GTA(Val)
-TTT(Phe)-TTA(Leu)-GTA(Val)
-
-
-假设以上两条路径概率相等,那么非同义替换数 Dn = (1+2)/2 = 1.5,同义替换数 Ds = (1+0)/2 = 0.5。
-于是,非同义替换率 dN = 非同义替换数 Dn / 非同义替换位点总数 Tn = 1.5/(8/3) = 0.56,同义替换率 dS = 同义替换数 Ds / 同义替换位点总数 Ts = = 0.5/(1/3) = 1.5。
-最后 omega(ω) = dN /dS = 0.56/1.5 = 0.37。
-
-5.3. 实际计算 以上是使用其中一种算法计算 omega(ω) 的过程,实际的计算过程常常借助开发的整合了相应算法的程序,比如PAML的codeML,KaKs_Calculator等,在这些程序中计算 omega(ω) 是通过对dN /dS 的估计进行计算的。
-6. omega(ω) (dN /dS 或KA /KS 的估值) 用于检测选择压
-omega(ω) 的含义
-
-
-omega(ω) = dN /dS (KA /KS )
-
-
-omega(ω) 可用于推断作用于蛋白质编码基因的自然选择的方向和程度
-
-
-当 ω > 1 时,意味着正选择 (positive selection);
-当 0 < ω < 1 意味着负选择 (negative selection,也叫净化选择或纯化选择 purifying selection);
-当 ω = 1 则表示中性进化(neutral selection),即不受选择。
-
-
-背景知识
-
-
-通常,由于未改变编码氨基酸,大多数同义突变都是中性的,即没有受到正选择或者负选择;由于改变了编码氨基酸,大多数非同义突变受到负选择,没有保留下来。
-所以,在现存类群中,观察到的同义突变数量比非同义突变数量会高得多,通常dN < dS 。计算现存类群间 ω 时,结果通常在0.05-0.40之间,只有很少数的基因(e.g. MHC)发现 ω > 1。
-
-
-可能的误差
-
-
-在基因的不同位点或进化的不同时期,正选择和负选择的组合可能会相互抵消。
-由此产生的平均值可能会掩盖其中一种选择的存在,并降低另一种选择的似然程度。
-
-
-统计分析
-
-
-有必要进行统计分析,以确定 ω 的结果是否与 1 有显著差异,或是否由于数据集有限而出现任何明显差异。
-近似法的适当统计检验包括用正态近似值对 dN - dS 进行近似,并确定 0 是否位于近似值的中心区域。
-可以使用更复杂的似然法来分析最大似然分析的结果,通过进行卡方检验来区分空模型(Ka/Ks = 1)和观测结果。
-
-
-omega(ω) 结果解读
-
-
-由于绝大多数基因 ω < 1,代表受到正选择的基因(ω > 1)是很少见的。
-结合系统发育树,通常可以分析 ω 在进化树上的变化,如果树上的 ω 都小于1,但某一支比其他所有支的 ω 都要小,这也说明这一支受到的负选择在放松。
-
-7. reference
-wiki-Ka/Ks ratio: https://en.wikipedia.org/wiki/Ka/Ks_ratio
-KaKs和dNdS的区别和算法:https://ibook.antpedia.com/x/147335.html
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bio
- evolution
- selection
-
-
- bio
- selection
- d<sub>N</sub>
- d<sub>S</sub>
- d<sub>N</sub>d<sub>S</sub>
- d<sub>N</sub>/d<sub>S</sub>
- K<sub>A</sub>
- K<sub>S</sub>
- K<sub>A</sub>K<sub>S</sub>
- K<sub>A</sub>/K<sub>S</sub>
- D<sub>n</sub>
- D<sub>s</sub>
- omega(ω)
- omega
- ω
- positive selection
- negative selection
- purifying selection
- neutral selection
-
-
-
- 祖先状态重建:用PAML的baseML重建祖先序列
- /2023/11/03/evolution_ancestral.state.reconstruction_paml.baseml/
-
-
-
-1. 重建祖先序列
-根据现存物种的状态(性状/序列),以及系统发育关系,可以推断祖先节点物种的状态(性状/序列),即祖先状态重建。
-这篇博客介绍使用PAML的baseML程序根据系统发育关系从现存物种的序列重建祖先序列的用法。
-
-2. 用PAML的baseML程序重建祖先序列 2.1. 准备输入文件 输入的序列比对文件和树文件的格式可以参考https://github.com/abacus-gene/paml-tutorial/tree/main/positive-selection/00_data 中的 Mx_aln.phy Mx_root.tree,Mx_unroot.tre 文件。
-
-序列比对文件 (cds_aln.phy)
-
-
-phylip格式
-比对好的编码序列 (cds) 文件,碱基数量是3的倍数(codon模式比对)
-建议删除gaps和难以align的区域,但要按密码子删除(删除和保留都是3的倍数个碱基)
-
-
-树文件 (tree.newick)
-
-
-newick格式,并在首行前加上一行,包括两个数字,一个是物种/样本数量,一个是树的数量(一般是1),空格隔开。
-只需要拓扑结构,删除枝长、支持率等信息。
+all_ks.csv文件内容 第一行为标题行,之后行为数据行。 共有4+3n列(n是peak数量,即WGD的次数),逗号分隔,第一列是样本信息,第2-3列对应线条属性(color,linewidth,linestyle),后面列都是拟合参数(the gaussian fitting curve parameters拟合参数,每个peak有3个拟合参数,n个peaks有3n个,依次列出。 标题行要包含所有列(可为空);数据行根据各自的峰数量可能有不同列数(比如一个峰的7列,两个峰的10列)。
+
+all_ks.csv文件示例 两个样本,三次比对(sample1_sample1,sample2_sample2,sample1_sample2),两个峰的all_ks.csv文件示例:
+,color,linewidth,linestyle,,,,,, sample1_sample1,green,1,--,5.02360835744403,0.8319599832352784,0.10382203381206191,2.084853812322066,1.8332872127128195,0.2506813629824027 sample2_sample2,red,1,--,5.02360835744403,0.8319599832352784,0.10382203381206191,2.084853812322066,1.8332872127128195,0.2506813629824027 sample1_sample2,yellow,1,-,3.00367275,1.288717936,0.177816426
-配置文件 (baseml.ctl)
-
-
-baseml.ctl 的例子在安装的程序包paml/examples/下有,可以复制到分析目录下,修改后使用
-基础的配置参数如下,后续分析可基于这套参数修改:
-
-seqfile = aln.phy * sequence data file name treefile = tree.newick * tree structure file name outfile = out.txt * main result file noisy = 3 * 0,1,2,3: how much rubbish on the screen 控制屏幕输出的信息量 verbose = 0 * 1: detailed output, 0: concise output * 控制输出文件中的信息量 runmode = 0 * 0: user tree; 1: semi-automatic; 2: automatic * 3: StepwiseAddition; (4,5):PerturbationNNI model = 6 * 0:JC69, 1:K80, 2:F81, 3:F84, 4:HKY85, 5:T92, 6:TN93, 7:REV, 8:UNREST, 9:REVu; 10:UNRESTu 指定核酸替代模型。模型0,1,…,8分别表示模型JC69, K80, F81, F84, HKY85, T92, TN93, REV (也称为 GTR), 和 UNREST。注释参看Yang(1994 JME 39:105-111)。两个模型可以分别运行。model = 9是REV模型的特例,而model = 10是无限制模型的特例。当model = 9或10时,同一行里包含的主要是指定模型的额外信息。中括号中的数字是自由参数比值的数字。例如,REV应该是5而UNREST应该是11。接在这些数字后面的是圆括号中的数字。输出文件中的比值参数将按照这里的顺序摆列。括号中没有提到的比值为1。当model = 9时,你只能指定TC或CT,但不能同时指定。当model = 10时,TC和CT是不同的。 Mgene = 0 * 0:rates, 1:separate; 2:diff pi, 3:diff kapa, 4:all diff ndata = 1 * number of data sets * 基因或比对的数量 clock = 0 * 0:no clock, 1:clock; 2:local clock; 3:CombinedAnalysis fix_kappa = 0 * 0: estimate kappa; 1: fix kappa at value below kappa = 2.5 * initial or fixed kappa fix_alpha = 1 * 0: estimate alpha; 1: fix alpha at value below alpha = 0. * initial or fixed alpha, 0:infinity (constant rate) Malpha = 0 * 1: different alpha¡¯s for genes, 0: one alpha ncatG = 5 * # of categories in the dG, AdG, or nparK models of rates fix_rho = 1 * 0: estimate rho; 1: fix rho at value below rho = 0. * initial or fixed rho, 0:no correlation nparK = 0 * rate-class models. 1:rK, 2:rK&fK, 3:rK&MK(1/K), 4:rK&MK nhomo = 0 * 0 & 1: homogeneous, 2: kappa for branches, 3: N1, 4: N2。 nhomo仅针对baseml,并涉及同一替代模型中的频率参数。nhomo = 1适合一个均匀模型,但是通过最大似然迭代估算频率参数(πT,πC和πA;πG在频率总和为1中不是一个自由参数。)。这适用于F81,F84,HKY85,T92(这种情况下πGC是一个参数),TN93,或REV模型。通常(nhomo = 0)这些通过观察到的频率的平均值来估算。在两种情况下(nhomo = 0 和 1),你需要为碱基频率计算三个(或对T92计算一个)自由参数。 nhomo = 2 适用K80,F84和HKY85模型对树中的每个分枝估算一个转换/颠换比率(k)。 选项 nhomo = 3,4,和5仅用于F84,HKY85 或 T92。 getSE = 0 * 0: don¡¯t want them, 1: want S.E.s of estimates RateAncestor = 1 * (0,1,2): rates (alpha>0) or ancestral states,默认是0,不重构祖先状态,1是重构祖先序列。 Small_Diff = 1e-6 cleandata = 0 * remove sites with ambiguity data (1:yes, 0:no)? 歧义数据和比对间隙的位点要保留(0)或删除(1),建议自行删除歧义和gaps数据,并在这里选保留(0)。 * icode = 0 * (RateAncestor=1 for coding genes, ¡°GC¡± in data) * fix_blength = 0 * 0: ignore, -1: random, 1: initial, 2: fixed。设置程序处理输入树文件中枝长数据的方法:0,忽略输入树文件中的枝长信息;-1,使用一个随机起始进行进行计算;1,以输入的枝长信息作为初始值进行ML迭代分析,此时需要注意输入的枝长信息是碱基替换率,而不是碱基替换数;2,不需要使用ML迭代计算枝长,直接使用输入的枝长信息,需要注意,若枝长信息和序列信息不吻合可能导致程序崩溃;3,让ML计算出的枝长和输入的枝长呈正比。 method = 0 * 0: simultaneous; 1: one branch at a time
-
-2.2. 执行
-2.3. 结果文件 推断的祖先序列在结果文件rst中,与提供的比对好的现存物种序列长度一致,可免比对,直接提取使用。
-2.3.1. out.txt
-主要结果文件,默认名称是mlc。
-内容包括每条序列的A/T/C/G的频率,一致性位点数量,成对遗传距离矩阵,Pairwise deletion matrix,带枝长的树,树节点和枝的编号,以及kappa值。2.3.2. rst:包含三块内容 Marginal reconstruction和Joint reconstruction是两种祖先序列重构的算法。如果对所有分类单元的合集都感兴趣,用joint;如果对特定分类单元的祖先感兴趣,用marginal。
-
-
-运行的参数以及树的信息
-
-
-给系统发育树的每个node进行编号的信息,以及每个branch是哪两个node连接而成;
-
-
-Marginal reconstruction of ancestral sequences的结果
-
-
-Prob of best state at each node, listed by site. 分位点记录的每个node的序列和频率,以及重建的祖先序列的概率;
-Summary of changes along branches. 分branch记录突变的位点;
-List of extant and reconstructed sequences(现存node和祖先node的序列);
-Overall accuracy of the 91 ancestral sequences
-Counts of changes at sites. 分位点记录突变的计数;
-
-
-Joint reconstruction of ancestral sequences的结果
-
-
-Reconstruction (prob.), listed by pattern
-List of extant and reconstructed sequences(现存node和祖先node的序列);2.3.3. 其他文件 另外还有一些其他结果文件,暂时还未用到。
-
-
-rst1
-lnf
-rub
+修改配置参数
+[ksfigure] ksfit = all_ks.csv # 拟合参数文件 labelfontsize = 15 legendfontsize = 15 xlabel = Synonymous nucleotide substitution (Ks) ylabel = Density title = none area = 0,4 figsize = 10,6.18 savefig = all_ks.pdf #保存的拟合图
+
+运行wgdi -kf input.conf
+
-3. reference
-PAML User Guide:https://github.com/abacus-gene/paml/blob/master/doc/pamlDOC.pdf
-PAML 中文用户手册:https://blog.sciencenet.cn/blog-3433349-1241310.html
-PAML开发者网站:http://abacus.gene.ucl.ac.uk/software/#phylogenetic-analysis-by-maximum-likelihood-paml
-paml软件进行祖先酶序列重建极简教程视频:https://www.bilibili.com/video/BV1AX4y1K7H4/
+得到all_ks.pdf拟合图
+4. references
+WGDI’s documentation:https://WGDI.readthedocs.io/en/latest/
+WGDI’s github:https://github.com/SunPengChuan/wgdi
+xuzhougeng’s WGDI上:https://www.jianshu.com/p/a50548e81ac0
+xuzhougeng’s WGDI中:https://www.jianshu.com/p/0e4a2807468d
+xuzhougeng’s WGDI下:https://www.jianshu.com/p/28a4c3045919
+xuzhougeng’s WGDI blockinfo blog:https://www.jianshu.com/p/e97fdcf5d06f
@@ -10024,16 +9165,16 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
- bio
- evolution
- ancestral state reconstruction
+ bioinfo
+ synteny
biosoft
- bioinfo
- PAML
- baseML
- 祖先状态重建
+ Ks
+ WGD
+ synteny
+ colinearity
+ WGDI
@@ -10046,46 +9187,62 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
HyPhy的全称是Hypothesis Testing using Phylogenies,是一款近些年受到广泛使用和关注的一款用于选择压力分析的软件。
相较经典的选择分析软件PAML的codeML,HyPhy操作更简单一点,并且支持多线程运行,并使用了更新的模型,模型数量也更多。
-2. HyPhy的RELAX模型
+2. HyPhy的RELAX模型 RELAX
HyPhy的RELAX模型是用来检测系统发育树上的指定分支是否经历了负选择的放松或加强的模型。
-RELAX检测选择压力与一组指定的 “测试 (TEST)”分支的放松(负选择变得不那么严格)或加强(负选择变得更强)。这种方法不适用于检测正选择。
-RELAX是一种假设检验框架,它检测自然选择的强度是否沿着一组指定的测试分支被放松或加强。因此,RELAX不是明确检测正选择的合适方法。相反,RELAX在识别特定基因上自然选择严格程度的趋势和/或变化方面最有用。
-RELAX需要一组指定的 “测试 “分支与第二组 “参考 “分支进行比较(注意,不必分配所有的分支,但测试集和参考集各需要一个分支)。RELAX首先对整个系统发育过程拟合一个具有三个ω类的密码子模型(空模型)。然后,RELAX通过引入作为选择强度参数的参数k(其中k≥0)作为推断ω值的指数:ωk来测试放松/强化选择。具体来说,RELAX固定推断的ω值(都是ωk<1,2,3>),并对测试分支推断出一个将比率修改为ωk<1,2,3>的k值(替代模型)。然后,RELAX进行似然比检验,比较替代模型和空模型。
-
+RELAX检测选择压力与一组指定的 “前景(foreground)/测试 (TEST)”分支的放松(正选择和负选择都变弱)或加强(正选择和负选择都变强)。RELAX方法不适用于检测正选择。RELAX原理
+RELAX对放松选择的检验原理是基于放松选择对小于 1 的 ω 值(代表纯化选择)和大于 1 的 ω 值(代表正向选择)的不同影响。 当放松选择时,小于 1 的 ω 值会向 1 增大,而大于 1 的 ω 值会向 1 减小; ω 值的分布会向 1 集中。相反,当选择压力增强时, ω 值的分布会更加分散。
+在分支位点模型 中(不同分支不同的位点有不同的 ω 值),放松选择的这种趋势可能有两种的影响: (1)推断出的选择类别的 ω 值可能趋向于 1,和/或 (2)属于不同类别的位点比例可能发生变化,从而使更多的位点被分配到 ω 值更接近于 1 的类别。这与PAML检测放松选择不同,PAML使用分支模型 。
+
+
+
+Figure 1. 强化选择和放松选择的模型效应。强化选择使所有类别的 ω 远离中性(ω = 1),而放松选择使所有类别的 ω 向中性(ω = 1)靠拢。净化选择下的位点用蓝色表示,正选择下的位点用红色表示。 图源:RELAX paper
+
+RELAX需要一组指定的 “前景/测试”分支与第二组 “背景/参考”分支进行比较。RELAX首先对整个系统发育过程拟合一个具有三类 ω 的密码子模型(空模型)。然后,RELAX通过引入作为选择强度参数的参数 k(其中k ≥ 0)作为推断 ω 值的指数:ωk来测试放松/强化选择。具体来说,RELAX固定推断的ω值(都是ωk <1,2,3>),并对测试分支推断出一个将比率调整为ωk<1,2,3>的k值(替代模型)。然后,RELAX进行似然比检验(LRT),比较替代模型和空模型来检测结果的显著性。
+
3. HyPhy的RELAX模型检测选择放松或加强 3.1. 安装HyPhy conda install -c bioconda hyphy
3.2. 输入文件
samples.aln:fasta或phylip格式的序列比对文件
tree.nw:newick格式的树文件
-RELAX模块的分析需要指定前景支/测试支(TEST),其余支是参考支(reference,默认,无需标记)。
-标记方法:测试支(类比codeml的branch model的前景支)的分支名和支长(如果存在)之间标注{foreground}。
-另外,HyPhy官网的phylotree工具(http://phylotree.hyphy.org/)可以在线对系统树进行标注。
-Pig支做前景支的标记实例:
+RELAX模块的分析需要指定前景支(foreground)/测试支(TEST),其余支是参考支(reference,默认,无需标记)。
+标记方法:前景支(类比codeml的branch model的前景支)的分支名和支长(如果存在)之间标注{FG};如果要标记某一支及其包含的所有支,则需要标注多个{FG}。
+可以用 HyPhy官网的phylotree在线工具(http://phylotree.hyphy.org/)对系统树进行标注。
+A支做前景支的标记实例:((((A{FG}:0.14,B:0.15):0.23,C:0.69):0.47,D:0.26):0.11,E:0.20);
。
+A+B+C所在的所有支做前景支的标记实例:((((A{FG}:0.14,B{FG}:0.15){FG}:0.23,C{FG}:0.69){FG}:0.47,D:0.26):0.11,E:0.20);
-((((Pig{FG}:0.147969,Cow:0.213430):0.085099,Horse:0.165787,Cat:0.264806):0.058611,((RhMonkey:0.002015,Baboon:0.003108):0.022733,(Human:0.004349,Chimp:0.000799):0.011873):0.101856):0.340802,Rat:0.050958,Mouse:0.097950);
-
3.3. 运行 nohup HYPHYMPI relax --alignment aln.fas --tree tree.nw --test FG --output relax.json > relax.log 2>&1 &
3.4. 参数
–alignment:比对好的codon文件,可以是fas格式,也可以是phylip格式。
–tree:newick格式的树文件,如有test支标记在树文件里(标记方法见输入文件)
–test:RELAX模块指定树文件中标记的分支为测试支
–output:指定输出json文件名称,默认是输入比对文件加json后缀,aln.fas.json
-屏幕输出的是markdown格式,建议保存为relax.log文件
+–rates 3: ω 值(dN/dS)的类别,可设置2-10类 ω 值,默认是3类。数字越大,运行越耗时。
+屏幕输出的是markdown格式,建议保存为relax.log文件。
3.5. 结果文件
relax.json:json格式,可以在网站http://vision.hyphy.org/RELAX 上传这个结果文件进行可视化,直观展示。结果中site的数量代表的是密码子的数量,是碱基数量的1/3。
-relax.log:markdown格式,直接查看方便。
+relax.log:屏幕输出的markdown格式,直接查看方便。
3.6. 结果展示
-json格式的结果具体的介绍可以参考https://www.hyphy.org/resources/json-fields.pdf。
-结果的可视化可以在网站 http://vision.hyphy.org/ 上上传json格式文件,然后交互式的展示结果。
+结果解释
-结果中会根据K值显示放松(relaxation)或加强(intensification),并根据p值标注是否显著(significant)
-K>1表示选择强度加强,K<1表示选择压力放松。
+主要看K值 和LRT检验的P值 。
+K>1表示选择强度加强(intensification),K<1表示选择放松(relaxation)。
+P值小于0.001表示结果显著(significant),否则不显著。
+
+
+结果可视化可以在网站 http://vision.hyphy.org/ 上上传json格式文件,然后交互式的展示结果。
+
+
-ps:有些物种,不能简单的根据ω值或K值判断选择的放松或加强,还要进一步看dN和dS来判断。
+
+也可以在relax.log文件中搜索K值:Relaxation/intensification parameter (K) = 1.05 和LRT检验的P值:Likelihood ratio test p = 0.4564 。
+
+ps:有些物种,不能简单的根据ω值或K值判断选择的放松或加强,有时ω值或K值的结果不一致,还要进一步看dN和dS来判断。
4. reference
HyPhy官网:https://www.hyphy.org/
HyPhy的github:https://github.com/veg/hyphy-analyses/tree/master
@@ -10105,133 +9262,174 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
biosoft
bioinfo
- selection
HyPhy
RELAX
+ selection
- 用PAML的codeML进行选择分析:(二)分支模型
- /2023/10/10/evolution_selection_paml.codeml_branch.model/
-
+ 用HyPhy分析自然选择:(一)介绍HyPhy
+ /2023/10/20/evolution_selection_HyPhy_intro/
+
-1. 背景知识
-dN dS (KA KS ),以及 omega(ω) 的定义,以及 ω 用于检测选择压可以参考博客一文说清KA KS 、dN dS 、Dn Ds ,以及ω :https://yanzhongsino.github.io/2023/10/09/evolution_selection_dNdS_intro
-选择分析的概况、PAML的安装和选择分析的常用模型可以参考博客用PAML的codeML进行选择分析:(一)概况简介 :https://yanzhongsino.github.io/2023/10/10/evolution_selection_paml_intro
-
-2. 分支模型 (branch model) 选择分析的目的
-绝大多数情况下 ω < 1,因此选择分析通常是为了检测到较少见的正选择 (ω > 1)
-结合系统发育树,分析 ω 在进化树上的变化。两种结果都是有意义的:
+1. HyPhy的简介 HyPhy的全称是Hypothesis Testing using Phylogenies,是一款近些年受到广泛使用和关注的一款用于选择压力分析的软件。
+相较经典的选择分析软件PAML的codeML,HyPhy操作更简单一点,并且支持多线程运行,并使用了更新的模型,模型数量也更多。尤其是HyPhy的BUSTED模型,官方说比PAML的分支-位点模型(branch-site models)更强大和准确。
+2. HyPhy的版本 HyPhy官网是https://www.hyphy.org/,有很多版本可以使用,包括:
+
+网页版(datamonkey):https://www.datamonkey.org/,在网页(https://www.datamonkey.org/relax)中上传序列比对文件进行分析。最简单。
+命令行版本
-3. 使用PAML的codeML中的分支模型 (branch model) 来检测分支的选择方向和强度 3.1. 假设
-零假设 (null hypothesis):所有分支都有相同的 ω 值
-备择假设 (alternative hypothesis):一些分支具有与背景分支不同的 ω 值
-
-3.2. 准备输入文件 输入的序列比对文件和树文件的格式可以参考https://github.com/abacus-gene/paml-tutorial/tree/main/positive-selection/00_data 中的 Mx_aln.phy Mx_root.tree,Mx_unroot.tre。
+
+本地运行图形界面版本(GUI):与网页版(datamonkey)操作类似。
+在Galaxy服务器上也可以使用HyPhy的许多方法:galaxy.hyphy.org
+MEGA软件包正在整合HyPhy进界面,已可使用HyPhy部分功能
+还可以通过Python,R和其他程序语言编译HyPhy,并作为可访问的库使用。
+
+3. HyPhy的分析库和常用检测 HyPhy的标准分析库共约有100种不同的方法,最常用于测试以下四种进化过程的假说:
-序列比对文件 (cds_aln.phy)
+检测选择信号
+评估进化率
+比较不同的进化模型
+将自定义模型拟合到比对序列
+
+4. HyPhy的模型 Hyphy的各种模型,基本上都可以分为不指定foreground和指定foreground运行的两种方式,前者对应的是检测pervasive (across the whole phylogeny) positive or purifying selection,即整个系统发育中的普遍的正选择/纯化选择,而后者对应的是检测episodic (at a subset of branches) positive or purifying selection,即检测一部分branches的独立正选择/纯化选择。
+HyPhy的模型和匹配的选择分析:
+4.1. 检测Pervasive selection的位点模型 检测个别位点是否受到普遍(整个系统发育树)的正选择或负选择,可选用以下模块:
+
+FEL(Fixed Effects Likelihood,固定效应似然法)
-phylip格式,加上样品数量和序列长度两个数字组成的首行。
-比对好的编码序列 (cds) 文件,碱基数量是3的倍数(codon模式比对)
-建议删除gaps和难以align的区域,但要按密码子删除(删除和保留都是3的倍数个碱基)
+适用于中小型数据集。
+使用最大似然(ML)方法来推断每个位点上的非同义(dN)和同义(dS)替换率,用于给定的编码比对和相应的系统发育。
+该方法假设在整个系统发育过程中,每个位点的选择压力是恒定的。
-树文件 (tree.newick)
+SLAC(Single-Likelihood Ancestor Counting,单似然祖先计数法)
-newick格式,并在首行前加上一行,包括两个数字,第一个是物种/样本数量,第二个是树的数量(一般是1),空格隔开。
-只需要拓扑结构,删除枝长、支持率等信息。
+是一种近似方法,准确度与 FEL 相似,但适用于较大的数据集。不过,SLAC 不适合高度分歧的序列。
+对于给定的编码比对和相应的系统发育使用最大似然(ML)和计数方法的结合来推断每个位点上的非同义(dN)和同义(dS)替换率。
+像FEL一样,该方法假设在整个系统发育过程中,每个位点的选择压力是恒定的。
-配置文件 (codeml.ctl)
+FUBAR(Fast, Unconstrained Bayesian AppRoximation,快速无约束贝叶斯估计法)
-codeml.ctl 的例子在安装的程序包paml/examples/下有,可以复制到分析目录下,修改后使用
-基础的配置参数如下,后续分析可基于这套参数修改:
+适用于中型到大型数据集,与 FEL 相比,FUBAR 在检测位点的普遍选择方面具有效。FUBAR 是推断pervasive selection的首选方法。
+使用贝叶斯方法来推断给定编码比对和相应系统发育的每个位点上的非同义(dN)和同义(dS)替换率。该方法假设在整个系统发育过程中,每个位点的选择压力是恒定的。4.2. 检测episodic selection的位点模型 检测个别位点是否受到偶发性(在分支的子集)的正选择或负选择,可选用以下模块:
- seqfile = cds_aln.phy treefile = tree.newick outfile = out.txt noisy = 9 verbose = 1 runmode = 0 seqtype = 1 CodonFreq = 2 ndata = 1 clock = 0 aaDist = 0 aaRatefile = ../dat/jones.dat model = 2 NSsites = 0 icode = 0 Mgene = 0 fix_kappa = 0 kappa = 2 fix_omega = 0 omega = .4 fix_alpha = 1 alpha = 0. Malpha = 0 ncatG = 8 getSE = 0 RateAncestor = 1 Small_Diff = .5e-6 cleandata = 0
-
-
-配置参数的含义和选择
-
- seqfile = cds_aln.phy * sequence data filename treefile = tree.newick * tree structure file name outfile = out.txt * main result file name noisy = 9 * 0,1,2,3,9: how much rubbish on the screen;控制屏幕输出的信息量 verbose = 1 * 0: concise; 1: detailed, 2: too much;控制输出文件中的信息量 runmode = 0 * 0: user tree; 1: semi-automatic; 2: automatic * 3: StepwiseAddition; (4,5):PerturbationNNI; -2: pairwise ; 代表使用用户提供的树拓扑(0),或者codeML根据序列自行计算(2) seqtype = 2 * 1:codons; 2:AAs; 3:codons-->AAs ;输入序列数据类型 CodonFreq = 2 * 0:1/61 each, 1:F1X4, 2:F3X4, 3:codon table;密码子频率(CodonFreq)可以相等(0:每个1/61)或者不同,以解释密码子使用偏差。默认是2:F3X4,会根据序列决定密码子频率。FmutSel模型(CodonFreq = 7)为通用遗传密码的每个密码子分配了60(= 61-1)个密码子适应度参数(Yang and Nielsen 2008)。FmutSel0模型(CodonFreq = 6)是FmutSel的特例,它对同义密码子赋予相同的适应度值,因此只使用19(= 20-1)个氨基酸适应度参数。该模型假设氨基酸频率由蛋白质的功能需求决定,但同义密码子的相对频率仅由突变偏倚参数决定。 ndata = 1 * 基因或比对的数量 clock = 0 * 0:no clock, 1:clock; 2:local clock; 3:CombinedAnalysis;指定分子钟,不假设分子钟(0),严格分子钟(1),本地分子钟(2),和联合分析(3)。这里选0不假设分子钟,则需要使用无根树(大部分情况是这样)。 aaDist = 0 * 0:equal, +:geometric; -:linear, 1-6:G1974,Miyata,c,p,v,a aaRatefile = ../dat/jones.dat * only used for aa seqs with model=empirical(_F) * dayhoff.dat, jones.dat, wag.dat, mtmam.dat, or your own model = 2 * 根据进行的分析和假设来选择 * models for codons: * 0:one, 1:b, 2:2 or more dN/dS ratios for branches * models for AAs or codon-translated AAs: * 0:poisson, 1:proportional, 2:Empirical, 3:Empirical+F * 6:FromCodon, 7:AAClasses, 8:REVaa_0, 9:REVaa(nr=189) NSsites = 0 * 0:one w;1:neutral;2:selection; 3:discrete;4:freqs; * 5:gamma;6:2gamma;7:beta;8:beta&w;9:betaγ * 10:beta&gamma+1; 11:beta&normal>1; 12:0&2normal>1; * 13:3normal>0 icode = 0 * 0:universal code; 1:mammalian mt; 2-10:see below ; 编码方式 Mgene = 0 * codon: 0:rates, 1:separate; 2:diff pi, 3:diff kapa, 4:all diff * AA: 0:rates, 1:separate fix_kappa = 0 * 1: kappa fixed, 0: kappa to be estimated ;0代表从给的序列推断kappa,kappa是转换/颠换的比率。 kappa = 2 * initial or fixed kappa fix_omega = 0 * 1: omega or omega_1 fixed, 0: estimate ;0代表计算omega omega = .4 * initial or fixed omega, for codons or codon-based AAs ;当fix_omega = 0 ,我们需要计算omega时,这个初始omega值便随意设置都ok。 fix_alpha = 1 * 0: estimate gamma shape parameter; 1: fix it at alpha alpha = 0. * initial or fixed alpha, 0:infinity (constant rate) Malpha = 0 * different alphas for genes ncatG = 8 * # of categories in dG of NSsites models getSE = 0 * 0: don't want them, 1: want S.E.s of estimates RateAncestor = 1 * (0,1,2): rates (alpha>0) or ancestral states (1 or 2) Small_Diff = .5e-6 cleandata = 1 * remove sites with ambiguity data (1:yes, 0:no)? 歧义数据和比对间隙的位点要保留(0)或删除(1),建议自行删除歧义和gaps数据,并在这里选保留(0)。 * fix_blength = 1 * 0: ignore, -1: random, 1: initial, 2: fixed, 3: proportional method = 0 * Optimization method 0: simultaneous; 1: one branch a time * Genetic codes: 0:universal, 1:mammalian mt., 2:yeast mt., 3:mold mt., * 4: invertebrate mt., 5: ciliate nuclear, 6: echinoderm mt., * 7: euplotid mt., 8: alternative yeast nu. 9: ascidian mt., * 10: blepharisma nu. * These codes correspond to transl_table 1 to 11 of GENEBANK.
-
-3.3. 执行codeML
-零假设模型(null model)的运算——one ratio model
+
+MEME(Mixed Effects Model of Evolution,进化混合效应模型)
-在基础的配置参数上修改以下参数,保存为codeml_null.ctl
+采用混合效应最大似然方法来检验个别位点是否受到episodic positive或多样化选择的影响的假设。换句话说,MEME的目的是检测在一定比例的分支下正选择下进化的位点。
+对于每个位点,MEME推测两种ω值,以及在给定的分支下,以此ω进化的概率。为了推断ω,MEME会推断α(dS) 和两个不同的β(dN),β−和β+。在空模型和备择模型中,MEME强制β−≤α。因此β+是空模型和备择模型不同的关键:在空模型中,β+被限制为≤α,但在备择模型中不受限制。最终,当β+>α时,位点被推断为正选择,并使用似然比检验显示显著。
+需要注意的是,MEME 不接受先验分支规范(v2.3-dev 及更高版本将引入此功能)。
+MEME 是检测单个位点正选择的首选方法。4.3. 检测蛋白序列比对的正选择/定向选择的位点模型
- model = 0 * model = 0 代表零假设(即所有分支的 ω 值都一样) NSsites = 0 treefile = tree.newick outfile = out_null.txt
-
+
+FADE(FUBAR Aproach to Directional Evolution)
+
-执行命令codeml codeml_null.ctl
-结果文件out_null.txt,这个模型得到的 ω 值代表整个系统发育树上的平均 ω 值。
+FADE是一种基于FUBAR引入的贝叶斯框架(Bayesian framework)的方法,用来测试蛋白质比对中的位点是否受定向选择的影响。
+具体地说,FADE将系统地测试,对于比对中的每个位点,与背景分支相比,一组指定的前景分支是否显示对特定氨基酸的替代偏向。
+该偏差参数的高值表明该位点对特定氨基酸的取代作用大大超过预期。使用贝叶斯因子(BF)评估FADE的统计显著性,其中BF>=100提供了强有力的证据,表明该位点正在定向选择下进化。
+重要的是,与HyPhy中的大多数方法不同,FADE不使用可逆的马尔可夫模型,因为它的目标是检测定向选择。因此,FADE分析需要一个有根的系统发育。在使用FADE进行分析之前,可以使用基于浏览器的交互工具Phylotree.js(http://phylotree.hyphy.org/)来帮助建立树的根。 4.4. 检测独立分支的episodic selection(branch-site model,at a subset of sites) 检测个别分支是否受到偶发性(在部分位点)的正选择或负选择,可选用以下模块:
-
-备择假设模型(branch model)的运算———two ratio model
+
+aBSREL(adaptive Branch-Site Random Effects Likelihood,自适应分支位点随机效应似然法)
-标记前景分支:在树文件tree.newick的基础上标记前景分支,保存为tree_branch.newick文件。
-标记方法:标记某一支为前景支 (#1),标记某一支及所有子分支都为前景支($1)。如只标记A和B的祖先枝为前景支,则可用((((A,B)$1,C),D),E);
;标记A和B祖先支以及A、B分支都为前景支:((((A,B)$1,C),D),E);
。
-如果需要标记多个前景分支,则分别使用#1,#2,…(或者$1,$2,…)来标记。做过测试,同时标记多个前景支来运算和只标记一个前景支单独运算多次的结果是很接近的。
-在基础的配置参数上修改以下参数,保存为codeml_branch.ctl
+aBSREL是常见的“Branch-Site”模型的改进版。aBSREL 既可以先验地指定分支(即指定foreground branches)来检验选择,也可以探索性地检验每个世系的选择。(p-value将自动进行BH校正)
+aBSREL 是检测各个分支正选择的首选方法。
+需要注意一点的是,aBSREL是多次独立对指定的每一支进行检验的,也就是说,你指定了许多的branches,实质上和多次指定不同一个branch来多次运行,效果是一样的,而并非将这些branches视为一个整体去做检测4.5. 检测一个基因是否在某一分支或一组分支上的任何位点经历了正选择 检测一个基因是否在特定分支或部分分支的任何位点经历了正选择?
- model = 2 * model = 2 代表备择假设(不同分支的 ω 值有2种或以上的类别) NSsites = 0 treefile = tree_branch.newick outfile = out_branch.txt
-
+
+BUSTED(Branch-Site Unrestricted Statistical Test for Episodic Diversification,分支位点无限制统计检验)
+
-执行命令codeml codeml_branch.ctl
,得到结果文件out_branch.txt
+通过在预先指定的系统树上测试一个基因是否在至少一个分支的至少一个位点上经历了正选择,BUSTED提供了一个全基因(非位点特异性)正选择的测试。当运行BUSTED时,用户可以指定一组前景支来测试正选择(其余分支被指定为“背景”),或者用户可以测试整个系统发生的正选择。在后一种情况下,整个树被有效地视为前景,正选择的检验考虑整个系统发育。
+这种方法对于相对较小的数据集(少于10个分类单元)特别有用,在这些数据集中,其他方法可能没有足够的功效来检测选择。
+这种方法不适用于确定受正向选择影响的特定位点。
+对于每个系统发育分区(前景和背景分支位点),BUSTED拟合了一个具有三个速率类的密码子模型,约束为ω1≤ω2≤1≤ω3。与其他方法一样,BUSTED同时估计每个分区属于每个ω类的位点的比例。这种模型作为选择检验中的替代模型,被称为无约束模型。然后,BUSTED通过比较这个模型与前景分支上ω3=1(即不允许正选择)的空模型的拟合度来测试正选择。这个零模型也被称为约束模型。如果零假设被拒绝,那么就有证据表明,至少有一个位点在前景枝上至少有一部分时间经历了正选择。重要的是,一个显著的结果并不意味着该基因是在整个前景的正选择下进化的。4.6. 检测选择压力的放松/加强 全基因组的选择压力是否随着分支的某个子集而放松或加强?
-3.4. 比较结果 3.4.1. 似然率检验 (Likelihood Ratio Test,LRT) 如果零假设被数据支持,那么两种假设的似然值差异不会超过抽样误差。LRT检验的是,两种假设的似然值的比值与1是否有显著差异,或者似然值的自然对数的差值与0是否有显著差异。
-在两次运算的结果文件out_null.txt
和out_branch.txt
中分别寻找LRT的结果lnL值:
-零假设模型的似然值的对数:lnL(ntime:14 np:16): -1296.438022 +0.000000
-备择假设模型的似然值的对数:lnL(ntime:14 np:17): -1292.210434 +0.000000
+RELAX
-np代表参数的数量number of parameters
+RELAX检测选择压力与一组指定的 “测试 (TEST)”分支的放松(如净化选择变得不那么严格)或加强(如净化选择变得更强)。这种方法不适用于检测正选择。
+RELAX是一种假设检验框架,它检测自然选择的强度是否沿着一组指定的测试分支被放松或加强。因此,RELAX不是明确检测正选择的合适方法。相反,RELAX在识别特定基因上自然选择严格程度的趋势和/或变化方面最有用。
+RELAX需要一组指定的 “测试 “分支与第二组 “参考 “分支进行比较(注意,不必分配所有的分支,但测试集和参考集各需要一个分支)。RELAX首先对整个系统发育过程拟合一个具有三个ω类的密码子模型(空模型)。然后,RELAX通过引入作为选择强度参数的参数k(其中k≥0)作为推断ω值的指数:ωk来测试放松/强化选择。具体来说,RELAX固定推断的ω值(都是ωk<1,2,3>),并对测试分支推断出一个将比率修改为ωk<1,2,3>的k值(替代模型)。然后,RELAX进行似然比检验,比较替代模型和空模型。
+K>1表示选择强度加强,K<1表示选择压力放松。
-3.4.2. 用卡方检验(chi^2)计算p值,分析似然值差异的显著性 lnL1-lnL0 满足卡方分布(chi^2):;计算p值
-
-▲LRT= abs (2 × (lnL1 - lnL0)) = abs (2 × (-1292.210434+1296.438022)) = 8.455176
-自由度df = np1 - np0 = 17 - 16 = 1
-卡方分布的显著性p值计算:在linux系统中之间使用命令chi2 1 8.455176
来计算p值
+4.7. 模型的选择
+基本选择
-在屏幕得到结果df = 1 prob = 0.003640060 = 3.640e-03
-p=0.00364, 远小于0.01。可以拒绝零假设,接收备择假设。即前景分支的 ω 值对系统发育树的平均 ω 值来说有显著差异。
-如果p值没有小于0.01,则无法拒绝零假设。
+如果检测类似paml中的M8位点模型,最好用FUBAR,如果是小数据,则用FEL,大数据并且分歧度不是很高用SLAC。
+如果检测某个前景支当中正选择位点,最好用MEME。
+如果检测单独的某个branch是否存在正选择,最好用aBSREL。
+如果检测一系列的branches的正选择,即检验你的这个基因,在指定的branches的任意一个位点是否在某段时间经历过正选择,则用BUSTED,BUSTED是不适合检测单独位点的正选择的。
+如果检测选择压力的放松/加强,用RELAX。
+如果用蛋白序列来检测氨基酸位点正选择/定向选择,用FADE。
-3.4.3. omega(ω) 值 在两次运算的结果文件out_null.txt
和out_branch.txt
中分别寻找omega(ω) 值的结果:
+
+模型选择的其他考虑因素
+
+
+几乎所有模型(还有一些没常用的模型没有提到)都可以分为指定前景和不指定前景的模式运行,但根据分析目的不同,会有最优选择。
+当然也可以把某种模型都跑一遍,比如各种位点模型都走个流程。
+还也可以结合paml的模型比较,例如,对于检测Pervasive selection的位点模型,你可以结合paml的M8、M2a来分析。对于检测episodic selection的branch-site,你可以结合paml的branch-site modelA和BUSTED/aBSREL来比较分析。
+
+5. 标准命令行版本HyPhy的使用 5.1. 安装 conda install -c bioconda hyphy
+5.2. 输入文件 HyPhy的各个模型的输入文件都是下面两个:
-零假设模型的 ω 值:omega (dN/dS) = 0.12795
+samples.aln:fasta或phylip格式的序列比对文件
+tree.nw:newick格式的树文件
-代表零假设下,整个树上的平均 ω 值为0.12795
+有些模块的分析可以指定前景支/测试支(Foreground/TEST),其余支是参考支(reference,默认,无需标记)。
+标记方法:前景支/测试支(类比codeml的branch model的前景支)的分支名和支长(如果存在)之间标注{foreground}。
+另外,HyPhy官网的phylotree工具(http://phylotree.hyphy.org/)可以在线对系统树进行标注。
+Pig支做前景支的标记实例:
-
-备择假设模型的 ω 值:ω (dN/dS) for branches: 0.08179 0.21097
+((((Pig{FG}:0.147969,Cow:0.213430):0.085099,Horse:0.165787,Cat:0.264806):0.058611,((RhMonkey:0.002015,Baboon:0.003108):0.022733,(Human:0.004349,Chimp:0.000799):0.011873):0.101856):0.340802,Rat:0.050958,Mouse:0.097950);
+
+5.3. 运行 HyPhy各个模型的运行都类似,修改busted为其他模型即可:
+nohup HYPHYMPI busted --alignment aln.fas --tree tree.nw --test FG --output busted.json > busted.log 2>&1 &
+5.4. 参数
+–alignment:比对好的codon文件,可以是fas格式,也可以是phylip格式。
+–tree:newick格式的树文件,如有test支标记在树文件里(标记方法见输入文件)
+–branches或–test:指定树文件中标记的分支为前景支,RELAX模块用–test指定,其他模块用–branches指定。
+–output:指定输出json文件名称,默认是输入比对文件加json后缀,如aln.fas.json。
+屏幕输出的是markdown格式,建议保存为relax.log文件
+
+5.5. 多线程实现
+方法一(新版本hyphy可以自动根据需求采用多线程,所以线程也可以不设置。)
-代表备择假设下,背景支的平均 ω 值为 0.08179 ,前景支的平均 ω 值为 0.21097。前景支的 ω 值比背景支大。
+hyphy slac --alignment alignment.fasta --tree tree.newick --output slac.json
-
-由于p值<0.01,接受备择假设,代表前景支的 ω 值比背景支显著地大,且前景支和背景支的 ω 值都<1。所以前景支应该经历了负选择的放松。
-如果这里是前景支的 ω 值比背景支显著地小,且前景支和背景支的 ω 值都<1,那么支持前景支经历了负选择的加强。
+
+方法二(需要openmp支持)HYPHYMPI slac --alignment alignment.fasta --tree tree.newick CPU=interger
+方法三mpiexec --oversubscribe -n 10(线程数) HYPHYMPI absrel --alignment alignment.fasta --tree tree.newick --branches Foreground
-4. reference
-PAML User Guide:https://github.com/abacus-gene/paml/blob/master/doc/pamlDOC.pdf
-PAML 中文用户手册:https://blog.sciencenet.cn/blog-3433349-1241310.html
-PAML开发者网站:http://abacus.gene.ucl.ac.uk/software/#phylogenetic-analysis-by-maximum-likelihood-paml
-陈连福博客-基因正选择分析原理:http://www.chenlianfu.com/?p=3084%E5%92%8Chttp://blog.sciencenet.cn/blog-460481-1163040.html
-视频-使用codeml的分支模型(branch test)检测进化树上某一支的选择压力:https://www.bilibili.com/video/av10469605/?from=search&seid=8859495264060497812&vd_source=86d4997d664e6bb659b1d0f0dcd15267
-wiki-Ka/Ks ratio:https://en.wikipedia.org/wiki/Ka/Ks_ratio
-paml检测正选择的初学者指南:https://wap.sciencenet.cn/blog-3434047-1389140.html?mobile=1
+5.6. 结果文件
+busted.json:json格式,可以在网站http://vision.hyphy.org 上传这个结果文件进行可视化,直观展示。结果中site的数量代表的是密码子的数量,是碱基数量的1/3。
+busted.log:markdown格式,直接查看方便。
+
+5.7. 结果展示
+json格式的结果具体的介绍可以参考https://www.hyphy.org/resources/json-fields.pdf。
+结果的可视化可以在网站 http://vision.hyphy.org/ 上上传json格式文件,然后交互式的展示结果。
+
+6. reference
+HyPhy官网:https://www.hyphy.org/
+HyPhy的github:https://github.com/veg/hyphy-analyses/tree/master
+介绍HyPhy的博客:https://www.jianshu.com/p/2e8f7f7d545a
@@ -10247,340 +9445,413 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
biosoft
bioinfo
+ HyPhy
+ RELAX
+ selection
+ FEL
+ SLAC
+ FUBAR
+ MEME
+ FADE
+ aBSREL
+ BUSTED
PAML
codeML
- d<sub>N</sub>
- d<sub>S</sub>
- d<sub>N</sub>d<sub>S</sub>
- d<sub>N</sub>/d<sub>S</sub>
- K<sub>A</sub>
- K<sub>S</sub>
- K<sub>A</sub>K<sub>S</sub>
- K<sub>A</sub>/K<sub>S</sub>
- omega(ω)
- omega
- ω
- branch model
- Linux中CPU相关概念
- /2022/05/02/linux_basics_cpu/
-
+ 一文说清K<sub>A</sub>K<sub>S</sub>、d<sub>N</sub>d<sub>S</sub>、D<sub>n</sub>D<sub>s</sub>,以及omega(ω)
+ /2023/10/09/evolution_selection_dNdS_intro/
+
-1. CPU相关概念 中央处理单元(central processing unit, CPU)
-在不同的情景中使用的CPU常常代表不同含义,主要区别物理CPU和逻辑CPU。
-
-逻辑CPU(processor数量)
+1. 背景
+木村资生(Masahiko Kimura)为代表的群体遗传学家划时代地提出了中性漂变理论,在分子进化领域得到了越来越多的证据。简单来说,就是在当时掌握的基因序列中,同义突变远多于非同义突变。为了更好地研究中性理论和自然选择在基因进化上所起的作用,非同义突变和同义突变的定量化研究显得十分迫切。
+在这一领域,三位来自九州大学的学者率先进行了有益的尝试和探索。接下来,两组来自美国德州大学奥斯汀分校(University of Texas, Houston)的科学家做出了重要的贡献。其中一组包括台湾著名学者李文雄(Wen-Hsiung Li)和吴仲义(Chung-I Wu)描述的KA KS ,另一组是根井正利(Masatoshi Nei)和五条堀孝(Gojobori Takashi)描述的dN dS 。
+在这些工作的基础上,发展出使用omega(ω)=dN /dS (KA /KS )进行选择压检验的方法。
+
+2. 概念
+替换(substitution)
-由于物理CPU,核心(core),SMT产生的计算能力翻倍,计算机的逻辑CPU的数量(也是常常说的总线程数),符合下面的公式:
+进化过程中基因组上一个位点从一个碱基突变成另一个碱基的过程,与点突变的含义相近。
+在这篇博客中,特指基因编码序列的替换,可能造成或不造成氨基酸产物的变化。
-总的逻辑CPU数(processor数量) = 物理CPU数量(计算机主板的CPU硬件/插槽socket的数量) * 每颗物理CPU的核心数(core) * 每个核心的同时多线程数量/超线程数量
-物理CPU(physical CPU)
+同义替换(synonymous substitution)
-计算机主板上实际插入的CPU硬件个数,也是主板物理CPU插槽(socket)的数量。
-通常只有服务器上才会有多个物理CPU,一般的办公/家用计算机主板上只有一个物理CPU。
+基因编码序列中一个位点的替换,没有造成氨基酸产物的变化,这种替换被称为同义替换。
-核心(core)
+非同义替换(non-synonymous substitution)
-核心是在物理CPU上的硬件。
-单个物理CPU上,可能存在单个/多个核心数量(所谓的单核、双核、四核等)。
+基因编码序列中一个位点的替换,造成氨基酸产物的变化,这种替换被称为非同义替换。
-同时多线程技术(simultaneous multithreading, SMT)
+同义替换率(synonymous substitutions rate, dS 或KS )
-每个核心(core)的同时多线程数量。
-同时多线程技术(simultaneous multithreading, SMT)是实现单个核心(core)同一时刻能够执行多线程数的技术。以充分利用单个核心(core)的计算能力。AMD和其他CPU厂商常用SMT的称呼。
-超线程技术(hyper–threading, HT):Intel的称呼,是SMT的一种具体技术实现。
-在许多情境下,这个技术产生的计算能力又被称为**虚拟核心(virtual core),或者 逻辑处理器(logical processor),或者直接称作 线程(thread)**。
+定义:每同义位点的同义碱基替代数 (the number of synonymous substitutions per synonymous site),用dS 或KS 表示。
+通常是通过对两条蛋白编码序列进行比较,用发生同义突变的位点数目比上可能发生同义突变的所有位点总数,比值用来估计同义替换率。
-2. 查询CPU相关信息
-CPU相关详细信息在文件/proc/cpuinfo
中
+
+非同义替换率(non-synonymous substitutions rate, dN 或KA )
-cat /proc/cpuinfo| grep "processor"| wc -l
#查看逻辑CPU数量,即processor数量
-cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
#查看物理CPU数量
-cat /proc/cpuinfo | grep "cpu cores" | uniq
#查看单个物理CPU的核心(core)的数量
+定义:每非同义位点的非同义碱基替代数 (the number of non-synonymous substitutions per non-synonymous site),用dN 或KA 表示。
+通常是通过对两条蛋白编码序列进行比较,用发生非同义突变的位点数目比上可能发生非同义突变的所有位点总数,比值用来估计非同义替换率。
-
-lscpu
命令会列出CPU相关信息
-
-Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 32 # 逻辑CPU总数,即processor数量 On-line CPU(s) list: 0-31 Thread(s) per core: 2 #每个核心的同时多线程数量 Core(s) per socket: 8 #每个物理CPU的核心数量 Socket(s): 2 #物理CPU数量/插槽数量 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 62 Model name: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz Stepping: 4 CPU MHz: 3287.925 CPU max MHz: 3400.0000 CPU min MHz: 1200.0000 BogoMIPS: 5187.48 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 20480K NUMA node0 CPU(s): 0-7,16-23 NUMA node1 CPU(s): 8-15,24-31 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveoptdtherm ida arat pln pts md_clear flush_l1d
-
-3. references
-wiki:CPU:https://en.wikipedia.org/wiki/Central_processing_unit
-CPU介绍:https://zhuanlan.zhihu.com/p/86855590
+
+omega(ω) 值(dN /dS 或KA /KS 比值的估计)
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+同义替换率与非同义替换率的比值,能够反映基因的选择压力。
+通常是通过对两条基因编码序列进行比较,用计算得到的同义替换率比上非同义替换率,得到dN /dS 或KA /KS 的估值ω 值。
- ]]>
-
- linux
- basics
-
-
- linux
- CPU
- 物理CPU
- 逻辑CPU
- 核心
-
-
-
- linux系统的压缩/解压缩和打包/解包工具
- /2024/06/18/linux_command_compress/
-
-
-一句话总结
-linux系统下最常见的压缩工具是gzip(压缩文件格式gz) ,可用多线程命令pigz 替代。另一个压缩效率更高的常用工具是bgzip2(压缩文件格式bz2) 。其余的compress(压缩文件格式Z),zip(压缩文件格式zip),rar(压缩文件格式rar)都不常用。另外打包工具tar 也常常调用压缩工具进行打包和压缩。
-1. linux系统下的压缩和打包命令快查表
- 压缩和打包命令快查表
-
-
- 文件格式
- 工具
- 压缩/打包命令
- 解压/解包命令
-
-
-
-
- file.gz
- gzip和gunzip
- gzip file
- gzip -d file.gz或gunzip file.gz
-
-
- file.gz
- pigz(多线程的gzip)
- pigz -p 8 file(用8个线程压缩)
- pigz -p 8 -d file.gz(用8个线程解压缩)
-
-
- file.tar
- tar(打包/解包)
- tar cvf file.tar *.jpg (把所有jpg文件打包进tar包,命名为file.tar文件)
- tar xvf file.tar
-
-
- file.tar.gz或file.tgz
- tar(打包/解包的同时压缩/解压缩)
- tar zcvf file.tar.gz *.jpg (把所有jpg文件打包压缩进file.tar.gz文件)
- tar zxvf file.tar.gz
-
-
- file.bz2
- bzip2和bunzip2
- bzip2 file
- bzip2 -d file.bz2或bunzip2 file.bz2
-
-
- file.Z
- compress和uncompress
- compress file
- uncompress file.Z
-
-
- file.zip
- zip和unzip
- zip file.zip *.jpg (把所有jpg文件压缩成一个zip包)
- unzip file.zip
-
-
- file.rar
- rar和unrar (需要下载安装RAR for Linux工具)
- rar a file *.jpg (把所有jpg文件压缩成一个rar包,名为file.rar)
- unrar e file.rar (把file.rar中所有文件解压出来);unrar x file.rar (把file.rar中所有文件解压出来,并按目录层级)
-
-
-
-
-2. linux系统下的压缩工具 2.1. gzip工具(.gz压缩格式)
-gzip
+
+同义替换数(Ds )
-gzip是linux系统自带的压缩工具,生成压缩文件的后缀为gz(linux最常见的压缩格式)。
-gunzip是gzip的硬连接,与gzip命令几乎没有区别,主要用于解压缩gz格式文件。
-pigz是gzip的多线程并行版本,完全兼容gzip,可以直接替代gzip。
-gz格式常用于压缩生物序列文件,如fq,fa文件。绝大多数生物信息学软件都支持直接读取压缩后的fq.gz和fa.gz文件。
+与dS 不同,代表的是发生了同义替换的碱基数目。
-
-基础用法
+
+非同义替换数(Dn )
-gzip file.txt
:压缩file.txt文件。gzip默认生成与原始文件同前缀的压缩后文件file.txt.gz,并删除原始文件file.txt。
-gzip -k file.txt
:压缩file.txt文件。默认生成与原始文件同前缀的压缩后文件file.txt.gz,-k
参数不删除原始文件file.txt。
-gzip -c file.txt > sample.gz
:指定压缩文件名为sample.gz。此命令把file.txt压缩到sample.gz,并保留原始文件file.txt。-c
参数把压缩结果输出到标准输出,并保留原始文件,不会默认生成与原始文件同名压缩文件。
-gzip -d file.txt.gz
:解压缩file.txt.gz文件。此命令会生成解压缩后文件file.txt,并删除原始文件file.txt.gz。
-gzip -r Directory
:压缩Directory目录,使用-r参数递归压缩目录中所有文件。
+与dN 不同,代表的是发生了非同义替换的碱基数目。
-
-进阶用法
+3. KA 和KS 、dN 和dS ,以及Dn 和Ds 之间的区别
+dN 和dS 与KA 和KS 含义是一样的,可相互替代使用
-gzip file1.txt file2.txt file3.txt
:分别压缩多个文件。此命令会生成压缩后文件file1.txt.gz,file2.txt.gz,file3.txt.gz,并删除原始文件file1.txt,file2.txt,file3.txt。
-cat file1.txt file2.txt | gzip > file.gz
或者gzip -c file1.txt file2.txt > file.gz
:gzip用于通道。此命令合并多个文件,并压缩合并后文件。如果gzip后不跟文件或者跟着-
代表文件,则读取标准输入作为压缩对象。
-tar cf - Directory | gzip |ssh user@remotehost "cat > directory.tar.gz"
:结合gzip和ssh进行远程备份
-cat newdata.txt | gzip >> existingdata.gz
:用gzip压缩新的数据并追加到现有压缩文件。
+KA 和KS 与dN 和dS 是两组科学家对每个位点的非同义和同义替换数目的不同的描述:李文雄和吴仲义使用的是KA 和KS ,而根井正利和五条堀孝则将同样的概念命名为dN 和dS 。
-
-参数
+
+dN 和dS (KA 和KS )与Dn 和Ds 是不同的
--c, –stdout:write on standard output, keep original files unchanged. 结果写到标准输出,原始文件保持不变。想要自行指定压缩文件名或者在管道中使用gzip则需要用这个参数。
--d:decompress,解压缩。
--1, -9:压缩级别1到9里面调整,-1压缩快但压缩程度低,-9压缩慢但压缩程度高。默认-6.
--f:force overwrite of output file and compress links. 默认情况下,如果压缩文件已存在,gzip不会覆盖它。-f参数强制覆盖已有压缩文件,进行强制压缩。
--k:keep (don’t delete) input files。默认会删除原始文件,-k参数则保留原始文件。
--r:压缩目录,递归地压缩目录中的所有文件。
--h:give this help。帮助文档。
--t:test compressed file integrity. 测试压缩文件的完整性,而不解压。gzip -t file.txt.gz
,如果输出显示OK,则表示文件完整无损。
--l:list compressed file contents。列出压缩文件的内容,而不解压。
--L:display software license
--n:do not save or restore the original name and timestamp. 压缩文件时不保存原始文件名和时间戳。
--N:save or restore the original name and timestamp
--q:quiet,suppress all warnings
--S:指定压缩文件的后缀。
--v, –verbose:以冗长模式输出,会显示每个文件的文件名和压缩率。
--V, –version:列出软件版本号。
+Dn 和Ds 是替换数量的估计,分别代表非同义替换位点和同义替换位点的数目,即计算dN 和dS 的分子。
+dN 和dS (KA 和KS )则是替换率的估计,分别代表非同义替换率和同义替换率。
-2.2. pigz (Parallel Implementation of GZip) :多线程的gzip
-pigz可以直接替代gzip
+4. 计算KA 和KS (dN 和dS )的算法模型
+目前计算KA 和KS (dN 和dS )通常是使用两条或多条现存类群的基因编码序列,并可以结合系统发育树来共同推断进化过程中发生的碱基替换情况。
+计算KA 和KS 的算法有非常多,可分为三类:**近似法(Approximate methods)、 最大似然法(Maximum-likelihood methods)和 计数法(Counting methods)**。
+在使用软件进行具体计算时,常用的包括最大似然法的代表模型YN(Yang and Nielsen,2000),NG(Nei 1986)等。
+然而,除非要比较的序列关系很远(在这种情况下,最大似然法占优势),否则所使用的算法类别对所获得的结果影响很小。只要有足够的数据,三种方法都会得出相同的结果。更重要的是所选方法中隐含的假设。
+
+4.1. 近似法(Approximate methods)
+近似法的三个基本步骤
-因为gzip只支持单线程运行,所以推荐使用gzip的多线程并行版本pigz,完全兼容gzip。
-pigz支持gzip的所有参数,可以完美替代gzip,使压缩更高效。
-pigz除了支持gzip的参数外,还要自己特有的参数。
+计算两个序列中同义和非同义位点的数量,或通过序列长度乘以每类替换的比例来估算这一数量;
+计算同义和非同义替换的数量;
+纠正多次替换(multiple substitutions)的情况。
-pigz的特有参数
+近似法的特点
--p n:指定使用n个线程,默认8线程。
--0 to -9, -11:压缩级别,除了gzip的1-9,还支持-11的极致压缩。
--b 128K:指定压缩block size,默认是128K。
--i, –independent Compress blocks independently for damage recovery
--I, –iterations n Number of iterations for -11 optimization
--J, –maxsplits n Maximum number of split blocks for -11
--Y –synchronous Force output file write to permanent storage
--K, –zip Compress to PKWare zip (.zip) single entry format
--z, –zlib Compress to zlib (.zz) instead of gzip format
-– All arguments after “–” are treated as files
--O –oneblock Do not split into smaller blocks for -11
+三个基本步骤,尤其是后两步,需要做出简单的假设,才能计算;
+由于最后考虑(第三步),不可能精确确定多次替换的数量。
-
-使用pigz注意事项
+4.2. 最大似然法(Maximum-likelihood methods)
+最大似然法特点
-当使用多线程时,pigz可能会消耗大量的CPU资源,因此在负载较重的系统上使用时需谨慎。
-请确保在使用多线程选项时,您的系统具有足够的处理器核心。
-压缩大文件时,pigz的内存消耗可能会增加。
-确保在脚本中使用时正确处理了pigz的退出状态,以便于捕获任何可能的错误。
+最大似然法利用概率论同时完成近似法的所有三个步骤。
+它通过推导出产生输入数据的最可能值来估算关键参数,包括序列之间的分歧度(divergence)和转换/颠换比率(transition/transversion ratio)。
-2.3. bzip2(.bz2格式)
-bzip2
+4.3. 计数法(Counting methods)
+为了量化替换的数量,我们可以重建祖先序列并记录推断出的位点变化(直接对现存物种序列差异进行计数可能会低估);
+将位点的替换率拟合到预先确定的类别中(贝叶斯方法;对于小数据集效果不佳);为每个密码子生成单独的替换率(计算成本高)。
+
+5. dN 和dS (KA 和KS )和 omega(ω) 的计算过程 由于算法的多样性,计算过程也有多种多样。以根井正利所著的经典书目《分子进化与系统发育》中的进化路径法(Evolutionary Pathway Methods)为例,对KA 和KS (dN 和dS )的计算过程加以简单介绍。
+5.1. 命名变量 同义替换率 dS 或KS = 同义替换数 Ds / 同义替换位点总数 Ts 非同义替换率 dN 或KA = 非同义替换数 Dn / 非同义替换位点总数 Tn
+5.2. 以TTT(Phe)转变为GTA(Val)为例
+先考虑TTT的序列替换的所有可能:
-bzip2是压缩程度更高,但压缩速度更慢的工具,生成的压缩文件后缀为bz2。
+查看密码子表可知,TTT的前两个位点的任意变化,都将导致氨基酸的变化,而第三个位点的突变,有2/3的可能性会导致氨基酸变化(只有TTT变为TTC都是编码苯丙氨酸Phe)。
+所以,对于TTT,非同义替换位点总数 Tn = 2 + 2/3 = 8/3,而同义替换位点总数 Ts = 0 + 1/3 = 1/3。
-参数
+再比较TTT到GTA变化的简约路径,共有两条:
--h –help print this message
--d –decompress force decompression. 解压缩
--z –compress force compression. 强制压缩
--k –keep keep (don’t delete) input files. 保留原始文件
--f –force overwrite existing output files. 覆盖已存在的输出文件
--t –test test compressed file integrity. 测试压缩文件的完整性
--c –stdout output to standard out. 输出结果到标准输出
--q –quiet suppress noncritical error messages
--v –verbose be verbose (a 2nd -v gives more)
--L –license display software version & license
--V –version display software version & license
--s –small use less memory (at most 2500k). 压缩过程使用更小的内存。
--1 .. -9 set block size to 100k .. 900k. 压缩级别1到9里面调整,-1压缩快但压缩程度低,-9压缩慢但压缩程度高。
+TTT(Phe)-GTT(Val)-GTA(Val)
+TTT(Phe)-TTA(Leu)-GTA(Val)
-2.4. compress
-compress
+
+假设以上两条路径概率相等,那么非同义替换数 Dn = (1+2)/2 = 1.5,同义替换数 Ds = (1+0)/2 = 0.5。
+于是,非同义替换率 dN = 非同义替换数 Dn / 非同义替换位点总数 Tn = 1.5/(8/3) = 0.56,同义替换率 dS = 同义替换数 Ds / 同义替换位点总数 Ts = = 0.5/(1/3) = 1.5。
+最后 omega(ω) = dN /dS = 0.56/1.5 = 0.37。
+
+5.3. 实际计算 以上是使用其中一种算法计算 omega(ω) 的过程,实际的计算过程常常借助开发的整合了相应算法的程序,比如PAML的codeML,KaKs_Calculator等,在这些程序中计算 omega(ω) 是通过对dN /dS 的估计进行计算的。
+6. omega(ω) (dN /dS 或KA /KS 的估值) 用于检测选择压
+omega(ω) 的含义
-compress命令生成的压缩文件后缀是Z。
+omega(ω) = dN /dS (KA /KS )
-参数
+omega(ω) 可用于推断作用于蛋白质编码基因的自然选择的方向和程度
--d If given, decompression is done instead. 解压缩。
--c Write output on stdout, don’t remove original.
--b Parameter limits the max number of bits/code. 压缩效率,9-16之间的数值,数值越大,压缩效率越高。默认是16。
--f Forces output file to be generated, even if one already exists, and even if no space is saved by compressing. If -f is not used, the user will be prompted if stdin is a tty, otherwise, the output file will not be overwritten. 强制覆盖已有文件。
--v Write compression statistics. 显示命令执行过程。
--V Output vesion and compile options. 显示命令版本及默认参数。
--r Recursive. If a filename is a directory, descend into it and compress everything in it. 压缩目录时递归压缩。
-
-3. 打包工具:tar 3.1. 压缩和打包的区别
-打包是指将一大堆文件或目录变成一个总的文件。
-压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
-Linux中很多压缩程序(如gzip bzip2命令)只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
-
-3.2. 打包工具:tar(tape archive)
-tar命令可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
+当 ω > 1 时,意味着正选择 (positive selection);
+当 0 < ω < 1 意味着负选择 (negative selection,也叫净化选择或纯化选择 purifying selection);
+当 ω = 1 则表示中性进化(neutral selection),即不受选择。
-3.3. 参数
-常用参数
+
+背景知识
--f:filename(文件名),这个参数后只能接文件名,所以一定要放在最后一个参数。
--c, –create:创建一个新归档(打包)
--x, –extract, –get:从归档中解出文件(解包)
--A, –catenate, –concatenate:追加 tar 文件至归档
--r, –append:追加文件至归档结尾
--u, –update:仅追加比归档中副本更新的文件
--d, –diff, –compare:找出归档和文件系统的差异;–delete:从归档(非磁带!)中删除
--t, –list:列出归档内容;–test-label:测试归档卷标并退出
--k, –keep-old-files:don’t replace existing files when extracting, treat them as errors. 保留原始文件。
--O, –to-stdout:解压文件至标准输出
--C, –directory=DIR:解压文件至目录 DIR
--v, –verbose:详细地列出处理的文件
+通常,由于未改变编码氨基酸,大多数同义突变都是中性的,即没有受到正选择或者负选择;由于改变了编码氨基酸,大多数非同义突变受到负选择,没有保留下来。
+所以,在现存类群中,观察到的同义突变数量比非同义突变数量会高得多,通常dN < dS 。计算现存类群间 ω 时,结果通常在0.05-0.40之间,只有很少数的基因(e.g. MHC)发现 ω > 1。
-
-压缩参数
+
+可能的误差
--a, –auto-compress:使用归档后缀名来决定压缩程序
--I, –use-compress-program=PROG:通过 PROG 过滤(必须是能接受 -d选项的程序)
--z, –gzip, –gunzip, –ungzip:通过 gzip 过滤归档
--Z, –compress, –uncompress:通过 compress 过滤归档
--j, –bzip2:通过 bzip2 过滤归档
--J, –xz:通过 xz 过滤归档
+在基因的不同位点或进化的不同时期,正选择和负选择的组合可能会相互抵消。
+由此产生的平均值可能会掩盖其中一种选择的存在,并降低另一种选择的似然程度。
+
+
+统计分析
+
+
+有必要进行统计分析,以确定 ω 的结果是否与 1 有显著差异,或是否由于数据集有限而出现任何明显差异。
+近似法的适当统计检验包括用正态近似值对 dN - dS 进行近似,并确定 0 是否位于近似值的中心区域。
+可以使用更复杂的似然法来分析最大似然分析的结果,通过进行卡方检验来区分空模型(Ka/Ks = 1)和观测结果。
+
+
+omega(ω) 结果解读
+
+
+由于绝大多数基因 ω < 1,代表受到正选择的基因(ω > 1)是很少见的。
+结合系统发育树,通常可以分析 ω 在进化树上的变化,如果树上的 ω 都小于1,但某一支比其他所有支的 ω 都要小,这也说明这一支受到的负选择在放松。
+
+7. reference
+wiki-Ka/Ks ratio: https://en.wikipedia.org/wiki/Ka/Ks_ratio
+KaKs和dNdS的区别和算法:https://ibook.antpedia.com/x/147335.html
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bio
+ evolution
+ selection
+
+
+ bio
+ selection
+ d<sub>N</sub>
+ d<sub>S</sub>
+ d<sub>N</sub>d<sub>S</sub>
+ d<sub>N</sub>/d<sub>S</sub>
+ K<sub>A</sub>
+ K<sub>S</sub>
+ K<sub>A</sub>K<sub>S</sub>
+ K<sub>A</sub>/K<sub>S</sub>
+ D<sub>n</sub>
+ D<sub>s</sub>
+ omega(ω)
+ omega
+ ω
+ positive selection
+ negative selection
+ purifying selection
+ neutral selection
+
+
+
+ 用PAML的codeML进行选择分析:(二)分支模型
+ /2023/10/10/evolution_selection_paml.codeml_branch.model/
+
+
+1. 背景知识
+dN dS (KA KS ),以及 omega(ω) 的定义,以及 ω 用于检测选择压可以参考博客一文说清KA KS 、dN dS 、Dn Ds ,以及ω :https://yanzhongsino.github.io/2023/10/09/evolution_selection_dNdS_intro
+选择分析的概况、PAML的安装和选择分析的常用模型可以参考博客用PAML的codeML进行选择分析:(一)概况简介 :https://yanzhongsino.github.io/2023/10/10/evolution_selection_paml_intro
+
+2. 分支模型 (branch model) 选择分析的目的
+绝大多数情况下 ω < 1,因此选择分析通常是为了检测到较少见的正选择 (ω > 1)
+结合系统发育树,分析 ω 在进化树上的变化。两种结果都是有意义的:
+
+
+如果某一支(前景支)上的 ω > 1,而其他所有支(背景支)上的 ω < 1,并且似然率检验(LRT)的显著性分析支持备择假设(正选择),那么可认为前景支受到了正选择 。
+虽然进化树上的 ω 都小于1,但某一支比其他所有支的 ω 都要显著地大,这也说明这一支受到负选择的放松 。
+
+3. 使用PAML的codeML中的分支模型 (branch model) 来检测分支的选择方向和强度 3.1. 假设
+零假设 (null hypothesis):所有分支都有相同的 ω 值
+备择假设 (alternative hypothesis):一些分支具有与背景分支不同的 ω 值
+
+3.2. 准备输入文件 输入的序列比对文件和树文件的格式可以参考https://github.com/abacus-gene/paml-tutorial/tree/main/positive-selection/00_data 中的 Mx_aln.phy Mx_root.tree,Mx_unroot.tre。
+
+序列比对文件 (cds_aln.phy)
+
+
+phylip格式,加上样品数量和序列长度两个数字组成的首行。
+比对好的编码序列 (cds) 文件,碱基数量是3的倍数(codon模式比对)
+建议删除gaps和难以align的区域,但要按密码子删除(删除和保留都是3的倍数个碱基)
+
+
+树文件 (tree.newick)
+
+
+newick格式,并在首行前加上一行,包括两个数字,第一个是物种/样本数量,第二个是树的数量(一般是1),空格隔开。
+只需要拓扑结构,删除枝长、支持率等信息。
-其他参数
+配置文件 (codeml.ctl)
--p:保留原本文件的属性,如权限。
-–strip-components=2:解压时从文件名中清楚2个引导部分。
+codeml.ctl 的例子在安装的程序包paml/examples/下有,可以复制到分析目录下,修改后使用
+基础的配置参数如下,后续分析可基于这套参数修改:
-3.4. 实例 tar -cf files.tar file1.txt file2.txt # 打包file1.txt file2.txt到文件files.tar。仅打包不压缩。 tar -xf files.tar # 解包不解压。 tar -zcf files.tar.gz file1.txt file2.txt # 打包并调用gzip压缩file1.txt file2.txt到文件files.tar.gz tar -zxf files.tar.gz # 解包并调用gzip解压缩 tar -jcf files.tar.bz2 file1.txt file2.txt # 打包并调用bzip2压缩file1.txt file2.txt到文件files.tar.bz2 tar -jxf files.tar.bz2 # 解包并调用bzip2解压 tar -tf files.tar # 列出打包文件 files.tar 中的所有文件,但不解包。-t是列出文件的意思。 tar -ztf files.tar.gz # 列出打包压缩文件 files.tar.gz 中的所有文件,但不解压缩也不解包。gz文件需要加上-z参数调用gzip。 tar -zxf files.tar.gz file1.txt # 只将files.tar.gz内的部分文件(如file1.txt)解压出来 tar -rf all.tar *.gif # 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。 tar -uf all.tar logo.gif # 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
+ seqfile = cds_aln.phy treefile = tree.newick outfile = out.txt noisy = 9 verbose = 1 runmode = 0 seqtype = 1 CodonFreq = 2 ndata = 1 clock = 0 aaDist = 0 aaRatefile = ../dat/jones.dat model = 2 NSsites = 0 icode = 0 Mgene = 0 fix_kappa = 0 kappa = 2 fix_omega = 0 omega = .4 fix_alpha = 1 alpha = 0. Malpha = 0 ncatG = 8 getSE = 0 RateAncestor = 1 Small_Diff = .5e-6 cleandata = 0
+
+
+配置参数的含义和选择
+
+ seqfile = cds_aln.phy * sequence data filename treefile = tree.newick * tree structure file name outfile = out.txt * main result file name noisy = 9 * 0,1,2,3,9: how much rubbish on the screen;控制屏幕输出的信息量 verbose = 1 * 0: concise; 1: detailed, 2: too much;控制输出文件中的信息量 runmode = 0 * 0: user tree; 1: semi-automatic; 2: automatic * 3: StepwiseAddition; (4,5):PerturbationNNI; -2: pairwise ; 代表使用用户提供的树拓扑(0),或者codeML根据序列自行计算(2) seqtype = 2 * 1:codons; 2:AAs; 3:codons-->AAs ;输入序列数据类型 CodonFreq = 2 * 0:1/61 each, 1:F1X4, 2:F3X4, 3:codon table;密码子频率(CodonFreq)可以相等(0:每个1/61)或者不同,以解释密码子使用偏差。默认是2:F3X4,会根据序列决定密码子频率。FmutSel模型(CodonFreq = 7)为通用遗传密码的每个密码子分配了60(= 61-1)个密码子适应度参数(Yang and Nielsen 2008)。FmutSel0模型(CodonFreq = 6)是FmutSel的特例,它对同义密码子赋予相同的适应度值,因此只使用19(= 20-1)个氨基酸适应度参数。该模型假设氨基酸频率由蛋白质的功能需求决定,但同义密码子的相对频率仅由突变偏倚参数决定。 ndata = 1 * 基因或比对的数量 clock = 0 * 0:no clock, 1:clock; 2:local clock; 3:CombinedAnalysis;指定分子钟,不假设分子钟(0),严格分子钟(1),本地分子钟(2),和联合分析(3)。这里选0不假设分子钟,则需要使用无根树(大部分情况是这样)。 aaDist = 0 * 0:equal, +:geometric; -:linear, 1-6:G1974,Miyata,c,p,v,a aaRatefile = ../dat/jones.dat * only used for aa seqs with model=empirical(_F) * dayhoff.dat, jones.dat, wag.dat, mtmam.dat, or your own model = 2 * 根据进行的分析和假设来选择 * models for codons: * 0:one, 1:b, 2:2 or more dN/dS ratios for branches * models for AAs or codon-translated AAs: * 0:poisson, 1:proportional, 2:Empirical, 3:Empirical+F * 6:FromCodon, 7:AAClasses, 8:REVaa_0, 9:REVaa(nr=189) NSsites = 0 * 0:one w;1:neutral;2:selection; 3:discrete;4:freqs; * 5:gamma;6:2gamma;7:beta;8:beta&w;9:betaγ * 10:beta&gamma+1; 11:beta&normal>1; 12:0&2normal>1; * 13:3normal>0 icode = 0 * 0:universal code; 1:mammalian mt; 2-10:see below ; 编码方式 Mgene = 0 * codon: 0:rates, 1:separate; 2:diff pi, 3:diff kapa, 4:all diff * AA: 0:rates, 1:separate fix_kappa = 0 * 1: kappa fixed, 0: kappa to be estimated ;0代表从给的序列推断kappa,kappa是转换/颠换的比率。 kappa = 2 * initial or fixed kappa fix_omega = 0 * 1: omega or omega_1 fixed, 0: estimate ;0代表计算omega omega = .4 * initial or fixed omega, for codons or codon-based AAs ;当fix_omega = 0 ,我们需要计算omega时,这个初始omega值便随意设置都ok。 fix_alpha = 1 * 0: estimate gamma shape parameter; 1: fix it at alpha alpha = 0. * initial or fixed alpha, 0:infinity (constant rate) Malpha = 0 * different alphas for genes ncatG = 8 * # of categories in dG of NSsites models getSE = 0 * 0: don't want them, 1: want S.E.s of estimates RateAncestor = 1 * (0,1,2): rates (alpha>0) or ancestral states (1 or 2) Small_Diff = .5e-6 cleandata = 1 * remove sites with ambiguity data (1:yes, 0:no)? 歧义数据和比对间隙的位点要保留(0)或删除(1),建议自行删除歧义和gaps数据,并在这里选保留(0)。 * fix_blength = 1 * 0: ignore, -1: random, 1: initial, 2: fixed, 3: proportional method = 0 * Optimization method 0: simultaneous; 1: one branch a time * Genetic codes: 0:universal, 1:mammalian mt., 2:yeast mt., 3:mold mt., * 4: invertebrate mt., 5: ciliate nuclear, 6: echinoderm mt., * 7: euplotid mt., 8: alternative yeast nu. 9: ascidian mt., * 10: blepharisma nu. * These codes correspond to transl_table 1 to 11 of GENEBANK.
+
+3.3. 执行codeML 零假设模型(null model)的运算——one ratio model
+在基础的配置参数上修改以下参数,保存为codeml_null.ctl
+
+ model = 0 * model = 0 代表零假设(即所有分支的 ω 值都一样) NSsites = 0 treefile = tree.newick outfile = out_null.txt
+
+执行命令codeml codeml_null.ctl
+结果文件out_null.txt,这个模型得到的 ω 值代表整个系统发育树上的平均 ω 值。
+
+备择假设模型(branch model)的运算———two ratio model
+标记前景分支
+
-上面的实例通常都会加上-v参数详细列出处理文件。
+在树文件tree.newick的基础上标记前景分支,保存为tree_branch.newick文件。
-4. references
-压缩命令:https://www.runoob.com/w3cnote/linux-tar-gz.html
-pigz的用法实例:https://bashcommandnotfound.cn/article/linux-pigz-command#:~:text=Pigz%E6%98%AF%E4%B8%80%E4%B8%AAgzip%E5%8E%8B%E7%BC%A9,%E7%9A%84%E4%B8%80%E4%B8%AA%E9%AB%98%E6%95%88%E6%9B%BF%E4%BB%A3%E5%93%81%E3%80%82
-tar用法:https://wangchujiang.com/linux-command/c/tar.html
+
+标记前景分支的方法
+
+
+标记某一支为前景支 (#1),标记某一支及所有子分支都为前景支($1)。
+如只标记A和B的祖先枝为前景支,则可用((((A,B) #1,C),D),E);
;
+标记A和B祖先支以及A、B分支都为前景支:((((A,B) $1,C),D),E);
;等同于((((A #1,B #1) #1,C),D),E);
。
+多个标记的优先级:**#1** 标记比 $1 标记的优先级更高;tips端标记比祖先节点的标记的优先级更高。
+如果需要标记多个前景分支,则分别使用#1,#2,…(或者$1,$2,…)来标记。做过测试,同时标记多个前景支来运算和只标记一个前景支单独运算多次的结果是很接近的。
+
+
+在基础的配置参数上修改以下参数,保存为codeml_branch.ctl
+
+ model = 2 * model = 2 代表备择假设(不同分支的 ω 值有2种或以上的类别) NSsites = 0 treefile = tree_branch.newick outfile = out_branch.txt
+
+
+执行命令codeml codeml_branch.ctl
,得到结果文件out_branch.txt
+
+3.4. 比较结果 3.4.1. 似然率检验 (Likelihood Ratio Test,LRT) 如果零假设被数据支持,那么两种假设的似然值差异不会超过抽样误差。LRT检验的是,两种假设的似然值的比值与1是否有显著差异,或者似然值的自然对数的差值与0是否有显著差异。
+在两次运算的结果文件out_null.txt
和out_branch.txt
中分别寻找LRT的结果lnL值:
+
+零假设模型的似然值的对数:lnL(ntime:14 np:16): -1296.438022 +0.000000
+备择假设模型的似然值的对数:lnL(ntime:14 np:17): -1292.210434 +0.000000
+
+
+np代表参数的数量number of parameters
+
+3.4.2. 用卡方检验(chi^2)计算p值,分析似然值差异的显著性 lnL1-lnL0 满足卡方分布(chi^2):;计算p值
+
+▲LRT= abs (2 × (lnL1 - lnL0)) = abs (2 × (-1292.210434+1296.438022)) = 8.455176
+自由度df = np1 - np0 = 17 - 16 = 1
+卡方分布的显著性p值计算:在linux系统中之间使用命令chi2 1 8.455176
来计算p值
+
+
+在屏幕得到结果df = 1 prob = 0.003640060 = 3.640e-03
+p=0.00364, 远小于0.01。可以拒绝零假设,接收备择假设。即前景分支的 ω 值对系统发育树的平均 ω 值来说有显著差异。
+如果p值没有小于0.01,则无法拒绝零假设。
+
+3.4.3. omega(ω) 值 在两次运算的结果文件out_null.txt
和out_branch.txt
中分别寻找omega(ω) 值的结果:
+
+零假设模型的 ω 值:omega (dN/dS) = 0.12795
+
+
+代表零假设下,整个树上的平均 ω 值为0.12795
+
+
+备择假设模型的 ω 值:ω (dN/dS) for branches: 0.08179 0.21097
+
+
+代表备择假设下,背景支的平均 ω 值为 0.08179 ,前景支的平均 ω 值为 0.21097。前景支的 ω 值比背景支大。
+
+
+由于p值<0.01,接受备择假设,代表前景支的 ω 值比背景支显著地大,且前景支和背景支的 ω 值都<1。所以前景支应该经历了负选择的放松。
+如果这里是前景支的 ω 值比背景支显著地小,且前景支和背景支的 ω 值都<1,那么支持前景支经历了负选择的加强。
+
+4. reference
+PAML User Guide:https://github.com/abacus-gene/paml/blob/master/doc/pamlDOC.pdf
+PAML 中文用户手册:https://blog.sciencenet.cn/blog-3433349-1241310.html
+PAML开发者网站:http://abacus.gene.ucl.ac.uk/software/#phylogenetic-analysis-by-maximum-likelihood-paml
+陈连福博客-基因正选择分析原理:http://www.chenlianfu.com/?p=3084%E5%92%8Chttp://blog.sciencenet.cn/blog-460481-1163040.html
+视频-使用codeml的分支模型(branch test)检测进化树上某一支的选择压力:https://www.bilibili.com/video/av10469605/?from=search&seid=8859495264060497812&vd_source=86d4997d664e6bb659b1d0f0dcd15267
+wiki-Ka/Ks ratio:https://en.wikipedia.org/wiki/Ka/Ks_ratio
+paml检测正选择的初学者指南:https://wap.sciencenet.cn/blog-3434047-1389140.html?mobile=1
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ bio
+ evolution
+ selection
+
+
+ biosoft
+ bioinfo
+ PAML
+ codeML
+ d<sub>N</sub>
+ d<sub>S</sub>
+ d<sub>N</sub>d<sub>S</sub>
+ d<sub>N</sub>/d<sub>S</sub>
+ K<sub>A</sub>
+ K<sub>S</sub>
+ K<sub>A</sub>K<sub>S</sub>
+ K<sub>A</sub>/K<sub>S</sub>
+ omega(ω)
+ omega
+ ω
+ branch model
+
+
+
+ 在Linux系统中设置环境变量PATH
+ /2021/04/20/linux_basics_PATH/
+
+
+
+
+1. 环境变量PATH设置 1.1. PATH的解释 PATH是环境变量,一个存放有(可执行)命令和程序的目录集合,目录间以冒号:分隔。
+操作系统接到用户输入命令时,会从前到后依次 查看PATH存储的目录,查找与输入命令同名的可执行文件,一旦查找到就停止查找 ,全部目录都查不到就报错。
+echo $PATH
可以查看当前存放了哪些目录。
+1.2. 设置环境变量 1.2.1. 临时设置,当前终端有效
+添加目录到环境变量PATH=$PATH:/home/usrname/opt/software/
命令把目录/home/software/
添加到PATH后,并用冒号:分隔,即重新给PATH赋值。
+
+PATH=$PATH:/home/software/
和PATH=/home/software/:$PATH
区别在于把目录/home/software/
置于PATH的最前面还是最后面,最前面代表最优先使用这个目录下的命令。
+
+声明环境变量export PATH
命令声明变量,使其对系统shell可识别
+以上两条命令可以合并成export PATH=$PATH:/home/software/
或者export PATH=/home/software/:$PATH
,此时目录/home/software/
下的命令可以被当前shell直接调用。
+但这种设置方式只在当前shell有效,关掉shell就失效。
+1.2.2. 当前用户永久设置 登录服务器时,会自动运行当前用户下~/.bashrc
和~/.bash_profile
文件内的命令。
+所以把export PATH=$PATH:/home/software/
写入~/.bashrc
或者~/.bash_profile
文件就可以使目录/home/software/
对于当前用户永久生效。
+第一次写入后需要用命令source ~/.bashrc
运行~/.bashrc文件来刷新环境变量,之后就不再需要。
+1.2.3. 所有用户永久设置 与前一步同理,不过写入的文件是/etc/profile或者/etc/bashrc,需要root用户修改。
+第一次修改需要source /etc/profile
刷新,之后不再需要。
欢迎关注微信公众号:生信技工
@@ -10589,18 +9860,11 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
linux
- command
- compress
+ basics
linux
- compress
- gzip
- pigz
- bigz2
- tar
- zip
- rar
+ PATH
@@ -11089,82 +10353,59 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 在Linux系统中设置环境变量PATH
- /2021/04/20/linux_basics_PATH/
-
-
-
+ Linux中CPU相关概念
+ /2022/05/02/linux_basics_cpu/
+
-1. 环境变量PATH设置 1.1. PATH的解释 PATH是环境变量,一个存放有(可执行)命令和程序的目录集合,目录间以冒号:分隔。
-操作系统接到用户输入命令时,会从前到后依次 查看PATH存储的目录,查找与输入命令同名的可执行文件,一旦查找到就停止查找 ,全部目录都查不到就报错。
-echo $PATH
可以查看当前存放了哪些目录。
-1.2. 设置环境变量 1.2.1. 临时设置,当前终端有效
-添加目录到环境变量PATH=$PATH:/home/usrname/opt/software/
命令把目录/home/software/
添加到PATH后,并用冒号:分隔,即重新给PATH赋值。
+1. CPU相关概念 中央处理单元(central processing unit, CPU)
+在不同的情景中使用的CPU常常代表不同含义,主要区别物理CPU和逻辑CPU。
+
+逻辑CPU(processor数量)
-PATH=$PATH:/home/software/
和PATH=/home/software/:$PATH
区别在于把目录/home/software/
置于PATH的最前面还是最后面,最前面代表最优先使用这个目录下的命令。
+
+由于物理CPU,核心(core),SMT产生的计算能力翻倍,计算机的逻辑CPU的数量(也是常常说的总线程数),符合下面的公式:
+
+总的逻辑CPU数(processor数量) = 物理CPU数量(计算机主板的CPU硬件/插槽socket的数量) * 每颗物理CPU的核心数(core) * 每个核心的同时多线程数量/超线程数量
-声明环境变量export PATH
命令声明变量,使其对系统shell可识别
+物理CPU(physical CPU)
-以上两条命令可以合并成export PATH=$PATH:/home/software/
或者export PATH=/home/software/:$PATH
,此时目录/home/software/
下的命令可以被当前shell直接调用。
-但这种设置方式只在当前shell有效,关掉shell就失效。
-1.2.2. 当前用户永久设置 登录服务器时,会自动运行当前用户下~/.bashrc
和~/.bash_profile
文件内的命令。
-所以把export PATH=$PATH:/home/software/
写入~/.bashrc
或者~/.bash_profile
文件就可以使目录/home/software/
对于当前用户永久生效。
-第一次写入后需要用命令source ~/.bashrc
运行~/.bashrc文件来刷新环境变量,之后就不再需要。
-1.2.3. 所有用户永久设置 与前一步同理,不过写入的文件是/etc/profile或者/etc/bashrc,需要root用户修改。
-第一次修改需要source /etc/profile
刷新,之后不再需要。
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+计算机主板上实际插入的CPU硬件个数,也是主板物理CPU插槽(socket)的数量。
+通常只有服务器上才会有多个物理CPU,一般的办公/家用计算机主板上只有一个物理CPU。
- ]]>
-
- linux
- basics
-
-
- linux
- PATH
-
-
-
- Linux系统的服务器开机自动挂载硬盘的设置
- /2023/04/24/linux_operation.and.maintenance_auto.mount/
-
-
-Linux系统的服务器开机自动挂载硬盘的设置方法 这里介绍两种方法进行安装了Linux系统的服务器开机后自动挂载硬盘的设置,两种方法各有其特点。使用第一种方法挂载,失败后不影响操作系统运行,还可以手动挂载;第二种方法使用UUID识别硬盘,可以避免因为盘符改变造成的挂载不成功。
-方法一:在/etc/rc.local
内添加挂载命令
-操作步骤
+
+核心(core)
-vi /etc/rc.local
打开文件,在文件最后一行添加挂载命令,如挂载/dev/sdb1
到/disk1
上则挂载命令为mount /dev/sdb1 /disk1
,并保存。
-执行命令chmod +x /etc/rc.d/rc.local
赋值文件执行权限。
-下次服务器开机即会执行/etc/rc.d/rc.local
里的命令。
+核心是在物理CPU上的硬件。
+单个物理CPU上,可能存在单个/多个核心数量(所谓的单核、双核、四核等)。
-
-注意事项
+
+同时多线程技术(simultaneous multithreading, SMT)
-在文件/etc/rc.local
内添加挂载命令,如果输入的挂载命令错误,云服务器重启时不会影响操作系统正常运行。
-此方法通过盘符进行自动挂载,云硬盘进行挂载卸载操作、云服务器硬重启时盘符会产生改变或者漂移,建议只有一块数据盘(vdb)时采用该方法设置自动挂载。
+每个核心(core)的同时多线程数量。
+同时多线程技术(simultaneous multithreading, SMT)是实现单个核心(core)同一时刻能够执行多线程数的技术。以充分利用单个核心(core)的计算能力。AMD和其他CPU厂商常用SMT的称呼。
+超线程技术(hyper–threading, HT):Intel的称呼,是SMT的一种具体技术实现。
+在许多情境下,这个技术产生的计算能力又被称为**虚拟核心(virtual core),或者 逻辑处理器(logical processor),或者直接称作 线程(thread)**。
-方法二:修改配置文件/etc/fstab
-操作步骤(root用户)
+2. 查询CPU相关信息
+CPU相关详细信息在文件/proc/cpuinfo
中
-备份/etc/fstab
文件:cp /etc/fstab /etc/fstab.bak
-查看挂载硬盘的信息(UUID和文件类型):blkid /dev/sdb1
-显示如下:/dev/sdb1: UUID="37013e09-db10-4680-ad01-2a141597ce43" BLOCK_SIZE="512" TYPE="xfs" PARTLABEL="primary" PARTUUID="9002b507-946b-496d-8c8f-a09003c96465"
-在文件/etc/fstab
最后一行中写入此硬盘的挂载信息,格式为UUID=37013e09-db10-4680-ad01-2a141597ce43 /disk1 xfs defaults 0 0
,注意UUID和TYPE一定要填写正确,然后保存。
-运行命令cat /etc/fstab
查看挂载信息是否保存
+cat /proc/cpuinfo| grep "processor"| wc -l
#查看逻辑CPU数量,即processor数量
+cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
#查看物理CPU数量
+cat /proc/cpuinfo | grep "cpu cores" | uniq
#查看单个物理CPU的核心(core)的数量
-注意事项
+lscpu
命令会列出CPU相关信息
+
+Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 32 # 逻辑CPU总数,即processor数量 On-line CPU(s) list: 0-31 Thread(s) per core: 2 #每个核心的同时多线程数量 Core(s) per socket: 8 #每个物理CPU的核心数量 Socket(s): 2 #物理CPU数量/插槽数量 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 62 Model name: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz Stepping: 4 CPU MHz: 3287.925 CPU max MHz: 3400.0000 CPU min MHz: 1200.0000 BogoMIPS: 5187.48 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 20480K NUMA node0 CPU(s): 0-7,16-23 NUMA node1 CPU(s): 8-15,24-31 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveoptdtherm ida arat pln pts md_clear flush_l1d
+
+3. references
+wiki:CPU:https://en.wikipedia.org/wiki/Central_processing_unit
+CPU介绍:https://zhuanlan.zhihu.com/p/86855590
-
-如果配置文件信息有误,重启云服务器时会进入维护模式,需要修改配置信息正确才能正常进入操作系统。
-通过将信息写入/etc/fstab
中进行自动化挂载云硬盘操作时,建议不要使用盘符以及分区id,建议使用文件系统的UUID,因为当云硬盘涉及到挂载和卸载操作时盘符会产生改变或者漂移。
-
欢迎关注微信公众号:生信技工
@@ -11173,214 +10414,261 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
linux
- operation and maintenance
+ basics
- server
- mount
- auto
+ linux
+ CPU
+ 物理CPU
+ 逻辑CPU
+ 核心
- Linux系统服务器清理缓存
- /2024/01/09/linux_operation.and.maintenance_cache.release/
-
+ linux系统的压缩/解压缩和打包/解包工具
+ /2024/06/18/linux_command_compress/
+
-1. 释放缓存的步骤 服务器运行久了可以释放内存缓存,来增加运行速度,释放缓存需要root权限。
-
-查看内存和缓存使用情况
+一句话总结
+linux系统下最常见的压缩工具是gzip(压缩文件格式gz) ,可用多线程命令pigz 替代。另一个压缩效率更高的常用工具是bgzip2(压缩文件格式bz2) 。其余的compress(压缩文件格式Z),zip(压缩文件格式zip),rar(压缩文件格式rar)都不常用。另外打包工具tar 也常常调用压缩工具进行打包和压缩。
+1. linux系统下的压缩和打包命令快查表
+ 压缩和打包命令快查表
+
+
+ 文件格式
+ 工具
+ 压缩/打包命令
+ 解压/解包命令
+
+
+
+
+ file.gz
+ gzip和gunzip
+ gzip file
+ gzip -d file.gz或gunzip file.gz
+
+
+ file.gz
+ pigz(多线程的gzip)
+ pigz -p 8 file(用8个线程压缩)
+ pigz -p 8 -d file.gz(用8个线程解压缩)
+
+
+ file.tar
+ tar(打包/解包)
+ tar cvf file.tar *.jpg (把所有jpg文件打包进tar包,命名为file.tar文件)
+ tar xvf file.tar
+
+
+ file.tar.gz或file.tgz
+ tar(打包/解包的同时压缩/解压缩)
+ tar zcvf file.tar.gz *.jpg (把所有jpg文件打包压缩进file.tar.gz文件)
+ tar zxvf file.tar.gz
+
+
+ file.bz2
+ bzip2和bunzip2
+ bzip2 file
+ bzip2 -d file.bz2或bunzip2 file.bz2
+
+
+ file.Z
+ compress和uncompress
+ compress file
+ uncompress file.Z
+
+
+ file.zip
+ zip和unzip
+ zip file.zip *.jpg (把所有jpg文件压缩成一个zip包)
+ unzip file.zip
+
+
+ file.rar
+ rar和unrar (需要下载安装RAR for Linux工具)
+ rar a file *.jpg (把所有jpg文件压缩成一个rar包,名为file.rar)
+ unrar e file.rar (把file.rar中所有文件解压出来);unrar x file.rar (把file.rar中所有文件解压出来,并按目录层级)
+
+
+
+
+2. linux系统下的压缩工具 2.1. gzip工具(.gz压缩格式)
+gzip
-free -h
-buff/cache一栏是缓存占用量
+gzip是linux系统自带的压缩工具,生成压缩文件的后缀为gz(linux最常见的压缩格式)。
+gunzip是gzip的硬连接,与gzip命令几乎没有区别,主要用于解压缩gz格式文件。
+pigz是gzip的多线程并行版本,完全兼容gzip,可以直接替代gzip。
+gz格式常用于压缩生物序列文件,如fq,fa文件。绝大多数生物信息学软件都支持直接读取压缩后的fq.gz和fa.gz文件。
-同步
+基础用法
-sync
-释放内存前先使用sync命令做同步,以确保文件系统的完整性。
-这一步将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。
+gzip file.txt
:压缩file.txt文件。gzip默认生成与原始文件同前缀的压缩后文件file.txt.gz,并删除原始文件file.txt。
+gzip -k file.txt
:压缩file.txt文件。默认生成与原始文件同前缀的压缩后文件file.txt.gz,-k
参数不删除原始文件file.txt。
+gzip -c file.txt > sample.gz
:指定压缩文件名为sample.gz。此命令把file.txt压缩到sample.gz,并保留原始文件file.txt。-c
参数把压缩结果输出到标准输出,并保留原始文件,不会默认生成与原始文件同名压缩文件。
+gzip -d file.txt.gz
:解压缩file.txt.gz文件。此命令会生成解压缩后文件file.txt,并删除原始文件file.txt.gz。
+gzip -r Directory
:压缩Directory目录,使用-r参数递归压缩目录中所有文件。
-释放缓存
+进阶用法
-echo 1 > /proc/sys/vm/drop_caches
-释放缓存,释放后可free -h再次查看缓存释放的效果。可以看到buff/cache一栏显示的缓存占用量大大减少。
-可以使用echo 1 > /proc/sys/vm/drop_caches
和echo 2 > /proc/sys/vm/drop_caches
和echo 3 > /proc/sys/vm/drop_caches
多次释放缓存,使用第一次效果最好。
+gzip file1.txt file2.txt file3.txt
:分别压缩多个文件。此命令会生成压缩后文件file1.txt.gz,file2.txt.gz,file3.txt.gz,并删除原始文件file1.txt,file2.txt,file3.txt。
+cat file1.txt file2.txt | gzip > file.gz
或者gzip -c file1.txt file2.txt > file.gz
:gzip用于通道。此命令合并多个文件,并压缩合并后文件。如果gzip后不跟文件或者跟着-
代表文件,则读取标准输入作为压缩对象。
+tar cf - Directory | gzip |ssh user@remotehost "cat > directory.tar.gz"
:结合gzip和ssh进行远程备份
+cat newdata.txt | gzip >> existingdata.gz
:用gzip压缩新的数据并追加到现有压缩文件。
-2. 释放缓存示例 root# free -h total used free shared buff/cache available Mem: 314G 11G 191G 388K 111G 301G Swap: 61G 60G 38M root# sync root# echo 1 > /proc/sys/vm/drop_caches root# free -h total used free shared buff/cache available Mem: 314G 11G 297G 396K 6.2G 301G Swap: 61G 60G 38M root# sync root# echo 2 > /proc/sys/vm/drop_caches root# free -h total used free shared buff/cache available Mem: 314G 11G 298G 396K 5.3G 301G Swap: 61G 60G 38M root# sync root# echo 3 > /proc/sys/vm/drop_caches root# free -h total used free shared buff/cache available Mem: 314G 11G 299G 396K 4.0G 301G Swap: 61G 60G 38M
-
-
-
+
+参数
+
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+-c, –stdout:write on standard output, keep original files unchanged. 结果写到标准输出,原始文件保持不变。想要自行指定压缩文件名或者在管道中使用gzip则需要用这个参数。
+-d:decompress,解压缩。
+-1, -9:压缩级别1到9里面调整,-1压缩快但压缩程度低,-9压缩慢但压缩程度高。默认-6.
+-f:force overwrite of output file and compress links. 默认情况下,如果压缩文件已存在,gzip不会覆盖它。-f参数强制覆盖已有压缩文件,进行强制压缩。
+-k:keep (don’t delete) input files。默认会删除原始文件,-k参数则保留原始文件。
+-r:压缩目录,递归地压缩目录中的所有文件。
+-h:give this help。帮助文档。
+-t:test compressed file integrity. 测试压缩文件的完整性,而不解压。gzip -t file.txt.gz
,如果输出显示OK,则表示文件完整无损。
+-l:list compressed file contents。列出压缩文件的内容,而不解压。
+-L:display software license
+-n:do not save or restore the original name and timestamp. 压缩文件时不保存原始文件名和时间戳。
+-N:save or restore the original name and timestamp
+-q:quiet,suppress all warnings
+-S:指定压缩文件的后缀。
+-v, –verbose:以冗长模式输出,会显示每个文件的文件名和压缩率。
+-V, –version:列出软件版本号。
- ]]>
-
- linux
- operation and maintenance
- cache
-
-
- server
- cache
-
-
-
- 服务器的硬件和开机流程的简介,以及BIOS和磁盘阵列控制器的设置
- /2023/04/19/linux_operation.and.maintenance_RAID.Controller.Card/
-
-
-1. 服务器介绍 1.1. 课题组的16服务器硬件介绍
-服务器:惠普HPE_ProLiant_DL580_Gen9
+2.2. pigz (Parallel Implementation of GZip) :多线程的gzip
+pigz可以直接替代gzip
-
-
-HPE_ProLiant_DL580_Gen9_Server_按钮和指示灯
-服务器内部能看到外装的Dell的LSI MegaRaid SAS Controller磁盘阵列控制卡(RAID Controller)和USB3.0扩展卡(USB3.0 Extender)。
-两个外装设备都可拆卸。先按蓝色零件开启固定挡板,使固定挡板弹开,即可把RAID Controller和USB3.0 Extender拔出。装回两张卡后,把固定挡板盖上,并按紧(要同时按服务器后面)直到咔的一声表明固定挡板开关关上。
+因为gzip只支持单线程运行,所以推荐使用gzip的多线程并行版本pigz,完全兼容gzip。
+pigz支持gzip的所有参数,可以完美替代gzip,使压缩更高效。
+pigz除了支持gzip的参数外,还要自己特有的参数。
-
-
-HPE_ProLiant_DL580_Gen9_Server_服务器内部
-
-
-HPE_ProLiant_DL580_Gen9_Server_顶盖说明书
-磁盘阵列(RAID):戴尔 Dell_PowerVault_MD1200
-
-
-
-RAID_Dell_PowerVault_MD1200
-
-磁盘阵列控制卡:服务器自带的Smart Array P830i Controller
-磁盘阵列控制卡(RAID Controller):外装的Dell的LSI MegaRaid SAS Controller(用来连接服务器和磁盘阵列)
+pigz的特有参数
-SAS线(连接磁盘阵列和服务器的数据传输线)两端接口一样。
-16服务器的磁盘阵列有两根,服务器上面的接口接磁盘阵列上面的接口,服务器下面的接口接磁盘阵列下面的接口,不能混接。
-如果SAS线在服务器连接处的右边,每根SAS线对应亮黄灯,则表明磁盘阵列卡是正常工作连接的。
-磁盘阵列卡可以取出,先关机并拔除SAS线,然后打开服务器的顶盖,在右上方插着磁盘阵列卡和USB3.0外接卡。需要先按左上方的蓝色按钮打开固定挡板(参考服务器内部的图片),使得固定阵列卡和USB3.0外接卡的开关打开,才能取出两张卡。装回两张卡后,把固定挡板盖上,并按紧(要同时按服务器后面)直到咔的一声表明开关关上。
+-p n:指定使用n个线程,默认8线程。
+-0 to -9, -11:压缩级别,除了gzip的1-9,还支持-11的极致压缩。
+-b 128K:指定压缩block size,默认是128K。
+-i, –independent Compress blocks independently for damage recovery
+-I, –iterations n Number of iterations for -11 optimization
+-J, –maxsplits n Maximum number of split blocks for -11
+-Y –synchronous Force output file write to permanent storage
+-K, –zip Compress to PKWare zip (.zip) single entry format
+-z, –zlib Compress to zlib (.zz) instead of gzip format
+– All arguments after “–” are treated as files
+-O –oneblock Do not split into smaller blocks for -11
-
-USB3.0扩展卡
+
+使用pigz注意事项
-USB3.0扩展卡比磁盘阵列卡小,用于连接移动硬盘等外部存储设备。
-20230417开机故障把16服务器的USB3.0外接卡移除了,避免它导致服务器降级影响开机。
+当使用多线程时,pigz可能会消耗大量的CPU资源,因此在负载较重的系统上使用时需谨慎。
+请确保在使用多线程选项时,您的系统具有足够的处理器核心。
+压缩大文件时,pigz的内存消耗可能会增加。
+确保在脚本中使用时正确处理了pigz的退出状态,以便于捕获任何可能的错误。
-
-
-USB3.0扩展卡1
-
-
-USB3.0扩展卡2
-1.2. 课题组的16服务器软件介绍
-内核
+2.3. bzip2(.bz2格式)
+bzip2
-内核版本号 kernel 4.18.0-147.el8.x86_64,其他版本与磁盘阵列驱动不匹配,会导致无法识别磁盘阵列。开机时需要选择内核版本,默认是最新的4.18.0-240版本。
-uname -a
可以查看内核版本
+bzip2是压缩程度更高,但压缩速度更慢的工具,生成的压缩文件后缀为bz2。
-2. 操作 2.1. 正常开机界面 开机后进行初始化和自检,依次显示如下界面。
-
-开机过程1EarlyProcessorInitialization
-
-
-
-开机过程1EarlyProcessorInitialization
-开机过程2BIOS_Boot
+参数
-在这一步可以通过F9进入System Utilities,F10进入Intelligent Provisioning,F11进入Boot Menu,F12进入Network Boot
-
-
-
-开机过程2BIOS_Boot1
-
-如果按下F9,屏幕上会对应亮起,需等待检测完毕自动进入Boot界面
+-h –help print this message
+-d –decompress force decompression. 解压缩
+-z –compress force compression. 强制压缩
+-k –keep keep (don’t delete) input files. 保留原始文件
+-f –force overwrite existing output files. 覆盖已存在的输出文件
+-t –test test compressed file integrity. 测试压缩文件的完整性
+-c –stdout output to standard out. 输出结果到标准输出
+-q –quiet suppress noncritical error messages
+-v –verbose be verbose (a 2nd -v gives more)
+-L –license display software version & license
+-V –version display software version & license
+-s –small use less memory (at most 2500k). 压缩过程使用更小的内存。
+-1 .. -9 set block size to 100k .. 900k. 压缩级别1到9里面调整,-1压缩快但压缩程度低,-9压缩慢但压缩程度高。
-开机过程2BIOS_Boot2
-
-正常开机
+2.4. compress
+compress
-如果开机后不进行任何操作,正常开机最后会进入等待登录的命令行界面或图形界面,这时正常开机结束,就可以远程登录啦。
+compress命令生成的压缩文件后缀是Z。
-2.2. 更改启动模式 16服务器默认是UEFI Mode启动。如果服务器开机故障,可以尝试在BIOS Mode下启动以做检测或更改设置。
-
-开机
-经过EarlyProcessorInitialization页面,到BIOS Boot页面时,按下F9,等待系统自动进入System Utilities界面。在这个界面可以进行许多系统的设置。
-
-
-
-F9_SystemUtilities
-
-更改启动模式。依次选择System Configuration-BIOS/Platform Configuration(RBSU)-Boot Options-Boot Mode。Boot Mode代表服务器使用什么模式启动。然后从UEFI Mode转变成Legacy BIOS Mode模式。
-
-
-
-BIOSmode_RBSU_BootMode
-
-还可以更改自动开机设置。依次选择System Configuration-BIOS/Platform Configuration(RBSU)-Server Availability-Automatic Power-On。这里的Always Power On/Off是代表通电后总是自动开机/关机,Restore Last Power State代表通电后使用上次的开机/关机状态来决定是否开机。
-
-
-
-BIOSmode_RBSU_ServerAvailability
-
-F10保存所有设置后,Ctrl+Alt+Delete重启服务器,这次是以Legacy BIOS Mode模式启动了。
-
-2.3. RAID控制卡的设置
-RAID控制卡的设置需要在Legacy BIOS Mode模式下启动服务器,参考上面一节操作。
-Legacy BIOS Mode模式启动服务器的前面的初始化和自检过程一样,先开机过程1EarlyProcessorInitialization,再开机过程2BIOS_Boot,第二个页面只有Boot Mode这一行内容不一样,别的都一样。
-然后进入下面的页面,Booting in legacy BIOS mode,出现Expandable RAID Controller BIOS时按下ctrl+R进入RAID控制卡设置界面(ps:出现的时间很短,需要尽快按下ctrl+R)。
-
-
-
-开机过程3Bootmode
-
-磁盘阵列控制卡(RAID Controller)设置界面
+
+参数
-在这个界面可以更改RAID控制卡的设置
+-d If given, decompression is done instead. 解压缩。
+-c Write output on stdout, don’t remove original.
+-b Parameter limits the max number of bits/code. 压缩效率,9-16之间的数值,数值越大,压缩效率越高。默认是16。
+-f Forces output file to be generated, even if one already exists, and even if no space is saved by compressing. If -f is not used, the user will be prompted if stdin is a tty, otherwise, the output file will not be overwritten. 强制覆盖已有文件。
+-v Write compression statistics. 显示命令执行过程。
+-V Output vesion and compile options. 显示命令版本及默认参数。
+-r Recursive. If a filename is a directory, descend into it and compress everything in it. 压缩目录时递归压缩。
-
-
-RAID设置1VirtualDiskManagement
-
-空格键可以显示RAID硬盘的详细参数
+3. 打包工具:tar 3.1. 压缩和打包的区别
+打包是指将一大堆文件或目录变成一个总的文件。
+压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
+Linux中很多压缩程序(如gzip bzip2命令)只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
-
-
-RAID设置1VirtualDiskManagementDetails
+3.2. 打包工具:tar(tape archive)
+tar命令可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
+
+3.3. 参数
+常用参数
+
-Tab键在不同的标签页之间转换,在Controller Management标签页可以进行控制卡的管理。空格键可以在是否选中高亮的选项之间转换。改变设置之后要APPLY使其生效。
+-f:filename(文件名),这个参数后只能接文件名,所以一定要放在最后一个参数。
+-c, –create:创建一个新归档(打包)
+-x, –extract, –get:从归档中解出文件(解包)
+-A, –catenate, –concatenate:追加 tar 文件至归档
+-r, –append:追加文件至归档结尾
+-u, –update:仅追加比归档中副本更新的文件
+-d, –diff, –compare:找出归档和文件系统的差异;–delete:从归档(非磁带!)中删除
+-t, –list:列出归档内容;–test-label:测试归档卷标并退出
+-k, –keep-old-files:don’t replace existing files when extracting, treat them as errors. 保留原始文件。
+-O, –to-stdout:解压文件至标准输出
+-C, –directory=DIR:解压文件至目录 DIR
+-v, –verbose:详细地列出处理的文件
-
-
-RAID设置2ControllerManagement
-
-Enable BIOS Stop on Error选项的解释
+
+压缩参数
-上图中Settings里的Enable BIOS Stop on Error默认是选上的(前面有X符号)。
-选上Enable BIOS Stop on Error这个选项代表如果开机时有报错信息就让BIOS停止工作(BIOS停止工作意味着无法正常开机),这个时候如果硬盘或者硬盘的扇区出现问题,或者其他任何硬件出现问题,系统发生降级,RAID控制卡会记录这次降级,并认定为Error信息,从而停止BIOS工作,导致无法正常开机。
-如果不选这个选项,发生系统降级导致Error信息也不会停止BIOS工作。
+-a, –auto-compress:使用归档后缀名来决定压缩程序
+-I, –use-compress-program=PROG:通过 PROG 过滤(必须是能接受 -d选项的程序)
+-z, –gzip, –gunzip, –ungzip:通过 gzip 过滤归档
+-Z, –compress, –uncompress:通过 compress 过滤归档
+-j, –bzip2:通过 bzip2 过滤归档
+-J, –xz:通过 xz 过滤归档
-
-可能的开机故障处理方案,去除Enable BIOS Stop on Error设置。
+
+其他参数
-开机故障:前段时间(2023/04/17)服务器停电关机后开机出现故障,在开机过程2BIOS_Boot这个页面的Power and Thermal Calibration这一步时,屏幕转入无信号页面并一直保持在无信号页面,服务器不断尝试重启(声音变大变小,无限循环)。ctrl+alt+delete命令重启无效,长按电源键强制重启后服务器的健康监测灯变成红色,有时UID灯也亮起。
-解决方案就是把Enable BIOS Stop on Error设置改为不选中,就顺利开机了。
+-p:保留原本文件的属性,如权限。
+–strip-components=2:解压时从文件名中清楚2个引导部分。
-
-设置完毕,应用之后Ctrl+Alt+Delete重启,F9进入BIOS界面修改BIOS Mode回UEFI Mode启动,再重启即可。
+3.4. 实例 tar -cf files.tar file1.txt file2.txt # 打包file1.txt file2.txt到文件files.tar。仅打包不压缩。 tar -xf files.tar # 解包不解压。 tar -zcf files.tar.gz file1.txt file2.txt # 打包并调用gzip压缩file1.txt file2.txt到文件files.tar.gz tar -zxf files.tar.gz # 解包并调用gzip解压缩 tar -jcf files.tar.bz2 file1.txt file2.txt # 打包并调用bzip2压缩file1.txt file2.txt到文件files.tar.bz2 tar -jxf files.tar.bz2 # 解包并调用bzip2解压 tar -tf files.tar # 列出打包文件 files.tar 中的所有文件,但不解包。-t是列出文件的意思。 tar -ztf files.tar.gz # 列出打包压缩文件 files.tar.gz 中的所有文件,但不解压缩也不解包。gz文件需要加上-z参数调用gzip。 tar -zxf files.tar.gz file1.txt # 只将files.tar.gz内的部分文件(如file1.txt)解压出来 tar -rf all.tar *.gif # 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。 tar -uf all.tar logo.gif # 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
+
+
+上面的实例通常都会加上-v参数详细列出处理文件。
+
+4. references
+压缩命令:https://www.runoob.com/w3cnote/linux-tar-gz.html
+pigz的用法实例:https://bashcommandnotfound.cn/article/linux-pigz-command#:~:text=Pigz%E6%98%AF%E4%B8%80%E4%B8%AAgzip%E5%8E%8B%E7%BC%A9,%E7%9A%84%E4%B8%80%E4%B8%AA%E9%AB%98%E6%95%88%E6%9B%BF%E4%BB%A3%E5%93%81%E3%80%82
+tar用法:https://wangchujiang.com/linux-command/c/tar.html
@@ -11390,209 +10678,192 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
linux
- operation and maintenance
+ command
+ compress
- server
- hardware
- RAID
- RAID Controller
- BIOS
- Boot Mode
- USB3.0 Extender
+ linux
+ compress
+ gzip
+ pigz
+ bigz2
+ tar
+ zip
+ rar
- Linux系统服务器用户账号的管理
- /2024/01/09/linux_operation.and.maintenance_user.account/
-
+ 基因组间的同线性分析 —— MCscan
+ /2021/11/05/bioinfo_synteny_MCscan/
+
-1. 用户账号的管理
-背景
-
-
-Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
-用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
-每个用户账号都拥有一个唯一的用户名和各自的口令(即密码)。
-用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
-
-
-用户账号的管理主要包括以下三个方面的工作:
-
-
-用户账号的添加、删除与修改。
-用户口令(密码)的管理。
-用户组的管理。
-
-2. 用户账号的添加、删除和修改 新建用户useradd、删除用户userdel、修改用户usermod都是Linux自带命令,需要root权限。
-2.1. 新建用户 —— useradd
-添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。
-刚添加的账号是被锁定的,无法使用。
-
+1. MCscan背景 1.1. jcvi介绍 jcvi 是美国佐治亚大学唐海宝开发的一个生物信息学python库。主要有几个常见pipeline用到了jcvi库,一个是做基因组scaffoldding的ALLMAPS ,另一个是做基因组同线性分析的MCscan ,以及提取植物表型数据的GRABSEEDS 。
+1.2. MCscan介绍 用MCscan pipeline做两个基因组间的同线性分析,包括成对同线性(pairwise synteny)分析,宏观同线性(macrosynteny)分析,微观同线性(microsynteny)分析和结果的可视化(visualization)。
+成对同线性分析主要是制作同线性点图(dotplot),同线性深度直方图;宏观同线性分析主要是制作同线性染色体图。其中同线性深度直方图,同线性染色体图需要用到同线性点图的结果文件作为输入。
+微观同线性分析等后面用到再补坑。
+2. MCscan使用 2.1. 安装jcvi 2.1.1. 依赖 jcvi依赖包括biopython,numpy,matplotlib。
+MCscan依赖包括LASTAL。
+LASTAL可以用conda install -c bioconda last
安装,但我用conda安装的lastal和lastdb不能多线程运行,所以在运行python -m jcvi.compara.catalog ortholog --cpu=1
时用参数--cpu=1
来限制单线程运行。
+2.1.2. 安装jcvi 任意选一种安装方式
-语法
-
-
-useradd 选项 用户名
-选项用来配置用户信息,如果无参数,则创建的用户无密码、无主目录、不指定 shell 脚本。
-用户名用来指定新账号的登录名。
-除了用户名,其他参数都可缺省,useradd -D
可print缺省值。
-
-
-选项参数
+pip install jcvi
+pip install git+git://github.com/tanghaibao/jcvi.git
+cd jcvi git clone git://github.com/tanghaibao/jcvi.git pip install -e .
-
--c comment:指定一段注释性描述
--d 目录:指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
--g 用户组:指定用户所属的用户组。
--G 用户组,用户组:指定用户所属的附加组。
--s Shell文件:指定用户的登录Shell。
--u 用户号:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
-
-
-实例
+2.2. 准备输入文件 输入文件包括两个基因组的CDS/氨基酸序列文件(fa格式),两个基因组的注释坐标文件(bed格式)。
+2.2.1. jcvi支持直接从phytozome下载数据
+连接phytozome(需要登录,提前注册账号)python -m jcvi.apps.fetch phytozome
输入账户登录信息后,出现可以下载的基因组list。
+
+下载CDS序列和注释文件(gff格式),例如下载这两个物种:grape and peachpython -m jcvi.apps.fetch phytozome Vvinifera,Ppersica
+
+转换GFF为BED格式python -m jcvi.formats.gff bed --type=mRNA --key=Name --primary_only Vvinifera_145_gene.gff3.gz -o grape.bed
+
-
-useradd -m -d /home/user -s /bin/bash -g group -G adm,root karen
--m 指创建用户同时创建用户主目录。
-新建用户名为karen的用户。
-新建用户主目录/home/user,/home为默认用户主目录所在父目录。
-用户登录shell是/bin/bash,属于group用户组(主组),又属于adm和root用户组(附加组)。
-useradd命令涉及的组若不存在,则需要用groupadd先新建组,再新建用户。
-
+python -m jcvi.formats.gff bed --type=mRNA --key=Name --primary_only Ppersica_139_gene.gff3.gz -o peach.bed
+其中--primary_only
是用于去除多个转录本的,只保留一个。(原文是多个isoforms)一般不去也不影响后续步骤,加上更好吧。
-内涵
-
-
-useradd新建用户就是在系统文件/etc/passwd
中增加一条记录,记录新用户信息,同时更新其他系统文件如/etc/shadow,/etc/group等。
-
-
-adduser
+整理一下,获得CDS文件python -m jcvi.formats.fasta format Vvinifera_145_Genoscope.12X.cds.fa.gz grape.cds
-
-centos系统下adduser和useradd命令用法一样。
-ubuntu系统下有adduser是一个perl脚本,使用时出现交互界面,提供选项让用户填写和选择。
-使用adduser命令的时候,系统会自动地创建与这个用户名名字一样的用户组作为这个用户的初始用户组,还会自动地在/home目录下面创建一个与用户同名的目录作为用户主目录,接着执行”cp /etc/skel /home/用户名”的操作,实现新增用户的主目录的初始化。
-用adduser这个命令创建的账号是系统账号,可以用来登录到我们的ubuntu系统。
-
-2.2. 删除用户 —— userdel 如果一个用户的账号不再使用,可以从系统中删除。
-
-语法
+python -m jcvi.formats.fasta format Ppersica_298_v2.1.cds.fa.gz peach.cds
+2.2.2. 自己的数据
+gff2bedpython -m jcvi.formats.gff bed --type=mRNA --key=ID --primary_only sampleA.gff3.gz > sampleA.bed
-
+python -m jcvi.formats.gff bed --type=mRNA --key=ID --primary_only sampleB.gff3.gz > sampleB.bed
+其中--primary_only
是用于去除多个转录本的,只保留一个。(原文是多个isoforms)一般不去也不影响后续步骤,加上更好吧。
-选项参数
-
-
-常用的选项是 -r,它的作用是把用户的主目录一起删除。
-
-
-内涵
-
-
-删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
-
-2.3. 修改用户 —— usermod 修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
-
-语法
+去重,会生成sampleA.uniq.bed和sampleB.uniq.bed,然后重命名
+python -m jcvi.formats.bed uniq sampleA.bed mv sampleA.uniq.bed sampleA.bed python -m jcvi.formats.bed uniq sampleB.bed mv sampleB.uniq.bed sampleB.bed
+
+提取cds和pep
+seqkit grep -f <(cut -f 4 sampleA.uniq.bed ) sampleA.cdna.all.fa.gz | seqkit seq -i > sampleA.cds seqkit grep -f <(cut -f 4 sampleA.uniq.bed ) sampleB.pep.all.fa.gz | seqkit seq -i > sampleA.pep seqkit grep -f <(cut -f 4 sampleB.uniq.bed ) sampeB.cdna.fa.gz | seqkit seq -i > sampleB.cds seqkit grep -f <(cut -f 4 sampleB.uniq.bed ) sampleB.pep.fa.gz | seqkit seq -i > sampleB.pep
-
-
-选项参数
+2.3. 同线性点图 2.3.1. CDS的同线性点图dotplot
+确保sampleA.cds
,sampleA.bed
,sampleB.cds
,sampleB.bed
四个文件在同一目录下。
+运行python -m jcvi.compara.catalog ortholog --no_strip_names --cpu=1 sampleA sampleB
制作同线性点图。
-
-常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
-
+--cpu=1
是因为conda安装的lastal不支持多线程,所以用单线程。
-实例
+运行时如果报错ERROR savefig failed. Reset usetex to False
是缺少dvipng包没能生成png格式图,但看看结果文件sampleA.sampleB.anchors还是完整生成了就可以进行下一步。
+2.3.2. 蛋白的同线性点图 与CDS一样,cds数据换成pep数据,在运行参数里加上数据类型--dbtype prot
即可。
+python -m jcvi.compara.catalog ortholog --dbtype prot --no_strip_names --cpu=1 sampleA sampleB
+--cpu=1
是因为conda安装的lastal不支持多线程,所以用单线程。
+2.3.3. 结果 会生成五个结果文件。
-usermod -s /bin/ksh -g developer -G train -d /disk/karen karen
-此命令将用户karen的登录Shell修改为ksh,主目录改为/disk/karen,用户组改为developer,添加新的附加组train。
+sampleA.sampleB.last: 基于LAST的比对结果
+sampleA.sampleB.last.filtered: LAST的比对结果过滤串联重复和低分比对
+sampleA.sampleB.anchors: 高质量的同线性区块
+sampleA.sampleB.lifted.anchors:增加了额外的锚点,形成最终的同线性区块
+sampleA.sampleB.pdf:同线性点图
-
-修改用户名
+同线性点图一般可以看点连成的比较长的线,在同一横坐标范围有几根线,或者在同一纵坐标范围有几根线,从而判断两个基因组的倍数关系。
+
+
+Figure 1. 同线性点图结果示例
from MCscan jcvi viki
+2.4. 同线性深度直方图
+在同线性点图运行成功获得sampleA.sampleB.anchors结果文件的前提下
+运行python -m jcvi.compara.synteny depth --histogram sampleA.sampleB.anchors
+生成sampleA.sampleB.depth.pdf,显示了同线性深度比例。
-
-有些系统可以使用选项-l 新用户名
指定一个新的账号,即将原来的用户名改为新的用户名。
-
-3. 用户口令(密码)的管理 用户账号刚创建时没有口令,被系统锁定无法使用,必须指定口令后才能使用,即使是指定空口令。 超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
-
-指定用户密码的命令格式
+
+
+Figure 2. 同线性深度直方图结果示例
from MCscan jcvi viki
+2.5. 同线性染色体图 2.5.1. 输入文件
+seqids文件
-passwd 选项 用户名
+指定展示的染色体ID,两行对应两个物种,每行的染色体之间逗号隔开,不能有空行。
+seqids文件染色体的顺序对应同线性染色体图的顺序,可以根据前面得到的同线性点图来调整顺序使两个基因组的同线性对应,使图更清晰。
+scaf001,scaf002,scaf003,scaf004,scaf005,scaf006,scaf007,scaf008,scaf009,scaf010,scaf011,scaf012,scaf013,scaf014 scaffold1,scaffold2,scaffold3,scaffold4,scaffold5,scaffold6,scaffold7
+
-选项
+.simple文件
--l:锁定口令,即禁用账号。
--u:口令解锁。
--d:使账号无口令。
--f:强迫用户下次登录时修改口令。
+每行代表一个同线性区块
+一共六列,前四列是两个物种的同线性区块的上下限基因,第五列是评分,第六列是方向。
+用前面分析同线性点图的结果文件.anchors创建。
+运行python -m jcvi.compara.synteny screen --minspan=30 --simple sampleA.sampleB.anchors sampleA.sampleB.anchors.new
会生成sampleA.sampleB.anchors.simple文件。
-修改用户密码的实例
+layout文件
-passwd karen
-普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
+设置绘制参数。前三列是设置图的位置坐标信息,整个图的x和y轴都是[0-1]范围。第四列是设置旋转角度,第五列是设置染色体颜色,第六列是展示的标签,第七列是对齐方式,第八列指定bed文件。
+注意, #edges下的每一行开头都不能有空格。用于指定simple文件。# y, xstart, xend, rotation, color, label, va, bed .6, .2, .8, 0, lightblue, sample_A, top, sampleA.bed .4, .2, .8, 0, lightpink, sample_B, top, sampleB.bed # edges e, 0, 1, sampleA.sampleB.anchors.simple
-
-为用户指定空口令:passwd -d karen
,这个命令将用户 karen 的口令删除,这样用户 karen 下一次登录时,系统就不再允许该用户登录了。
-锁定用户,使其不能登录:passwd -l karen
-
-4. 用户组的管理
-每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
-用户组的管理涉及用户组的添加(groupadd)、删除(groupdel)和修改(groupmod)。组的增加、删除和修改实际上就是对/etc/group文件的更新。4.1. 新增用户组 —— groupadd
+2.5.2. 运行 python -m jcvi.graphics.karyotype seqids layout
+生成karyotype.pdf文件,为同线性双染色体图
+
+
+Figure 3. 同线性双染色体图结果示例
from MCscan jcvi wiki
+2.5.3. tips
+运行虽然报错ERROR savefig failed. Reset usetex to False.
,应该是没能生成png图,但还是生成了pdf图文件。
+当label用的名称过长时,label和图容易重叠,没有好的办法解决,最好用短一点的label。
-
-语法:groupadd 选项 用户组
-选项参数
+2.5.4. 个性化 2.5.4.1. highlight指定同线性区块 如果要突出显示指定的同线性区块(一般用于展示染色体倍数关系),则在sampleA.sampleB.anchors.sample文件中的对应同线性区域行的前面加上yellowgreen*
,表示这行的颜色用yellowgreen展示。
+然后再运行python -m jcvi.graphics.karyotype seqids layout
就会生成突出显示的图。
+3. references
+https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)
+https://xuzhougeng.top/archives/Comparative-genomics-using-JCVI-part-one
+
--g GID:指定新用户组的组标识号(GID)。
--o:一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
-实例
+ ]]>
+
+ bioinfo
+ synteny
+
+
+ biosoft
+ synteny
+ colinearity
+ MCscan
+ jcvi
+
+
+
+ Linux系统的服务器开机自动挂载硬盘的设置
+ /2023/04/24/linux_operation.and.maintenance_auto.mount/
+
+
+Linux系统的服务器开机自动挂载硬盘的设置方法 这里介绍两种方法进行安装了Linux系统的服务器开机后自动挂载硬盘的设置,两种方法各有其特点。使用第一种方法挂载,失败后不影响操作系统运行,还可以手动挂载;第二种方法使用UUID识别硬盘,可以避免因为盘符改变造成的挂载不成功。
+方法一:在/etc/rc.local
内添加挂载命令
+操作步骤
-groupadd group1
:此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
-groupadd -g 101 group2
:此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
+vi /etc/rc.local
打开文件,在文件最后一行添加挂载命令,如挂载/dev/sdb1
到/disk1
上则挂载命令为mount /dev/sdb1 /disk1
,并保存。
+执行命令chmod +x /etc/rc.d/rc.local
赋值文件执行权限。
+下次服务器开机即会执行/etc/rc.d/rc.local
里的命令。
-4.2. 删除用户组 —— groupdel 删除已有用户组的命令很简单:groupdel group1
命令即删除用户组group1了
-4.3. 修改用户组属性 —— groupmod
-语法:groupmod 选项 用户组
-选项参数
+
+注意事项
--g GID:为用户组指定新的组标识号(GID)。
--o:一般与-g选项同时使用,表示用户组的新GID可以与系统已有用户组的GID相同。
--n 新用户组:将用户组的名字修改为新名字。
+在文件/etc/rc.local
内添加挂载命令,如果输入的挂载命令错误,云服务器重启时不会影响操作系统正常运行。
+此方法通过盘符进行自动挂载,云硬盘进行挂载卸载操作、云服务器硬重启时盘符会产生改变或者漂移,建议只有一块数据盘(vdb)时采用该方法设置自动挂载。
-
-实例
+方法二:修改配置文件/etc/fstab
+操作步骤(root用户)
-groupmod -g 102 group2
:此命令将组group2的组标识号修改为102。
-groupmod –g 10000 -n group3 group2
:此命令将组group2的标识号改为10000,组名修改为group3。
+备份/etc/fstab
文件:cp /etc/fstab /etc/fstab.bak
+查看挂载硬盘的信息(UUID和文件类型):blkid /dev/sdb1
+显示如下:/dev/sdb1: UUID="37013e09-db10-4680-ad01-2a141597ce43" BLOCK_SIZE="512" TYPE="xfs" PARTLABEL="primary" PARTUUID="9002b507-946b-496d-8c8f-a09003c96465"
+在文件/etc/fstab
最后一行中写入此硬盘的挂载信息,格式为UUID=37013e09-db10-4680-ad01-2a141597ce43 /disk1 xfs defaults 0 0
,注意UUID和TYPE一定要填写正确,然后保存。
+运行命令cat /etc/fstab
查看挂载信息是否保存
-4.4. 切换用户组 —— newgrp 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
-
-用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。
-实例:newgrp root
-这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。
-
-5. 用户账号管理的集成工具 Linux提供了集成的系统管理工具userconf,它可以用来对用户账号和用户组进行统一管理。
-6. reference
-https://www.runoob.com/linux/linux-user-manage.html
+
+注意事项
+
+如果配置文件信息有误,重启云服务器时会进入维护模式,需要修改配置信息正确才能正常进入操作系统。
+通过将信息写入/etc/fstab
中进行自动化挂载云硬盘操作时,建议不要使用盘符以及分区id,建议使用文件系统的UUID,因为当云硬盘涉及到挂载和卸载操作时盘符会产生改变或者漂移。
+
欢迎关注微信公众号:生信技工
@@ -11602,55 +10873,45 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
linux
operation and maintenance
- user
server
- user
- useradd
- usermod
- userdel
- passwd
- groupadd
- groupmod
- groupdel
- newgrp
+ mount
+ auto
- shell的几种循环语法
- /2021/10/10/linux_shell_loop/
-
+ Linux系统服务器清理缓存
+ /2024/01/09/linux_operation.and.maintenance_cache.release/
+
-1. shell的几种循环语法间的差异 1.1. for-loop
-for i in $(cat file.txt);do echo $i; done
+1. 释放缓存的步骤 服务器运行久了可以释放内存缓存,来增加运行速度,释放缓存需要root权限。
+
+查看内存和缓存使用情况
-for循环每次都是以空格/制表符为分割符输出,所以i变量不是一整行内容,而是单个单元格的内容。想要获取一整行内容,可以先将空格换成别的字符,输出时再替换回来。比如for i in $(sed 's/\t/#/g' file.txt); do echo $i |sed 's/#/\t/g'; done
-【更耗内存】cat会一次性把file.txt所有内容输入到内存中;
-
-1.2. while-loop
-while read line; do echo $line; done < file.txt
-
-
-【更省内存】按行读取文件,读取到line变量是一整行内容。
+free -h
+buff/cache一栏是缓存占用量
-cat file.txt | while read line; do echo $line; done
+同步
-【更耗内存】cat会一次性把file.txt所有内容输入到内存中; 因为管道|的使用,while read line在子shell中按行调用,line变量也是一整行内容。 这个和多线程控制脚本batch_run.sh冲突。
+sync
+释放内存前先使用sync命令做同步,以确保文件系统的完整性。
+这一步将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。
-2. 循环语法常用命令符号 2.1. && ; 一行for/while循环中,执行多条命令的代码常写成这种形式:for i in $(cat file.txt);do grep $i sum.txt && echo $i; j=$i+3;done
。
-包含了三条命令:
+
+释放缓存
+
-grep $i sum.txt
-break
-echo $i
+echo 1 > /proc/sys/vm/drop_caches
+释放缓存,释放后可free -h再次查看缓存释放的效果。可以看到buff/cache一栏显示的缓存占用量大大减少。
+可以使用echo 1 > /proc/sys/vm/drop_caches
和echo 2 > /proc/sys/vm/drop_caches
和echo 3 > /proc/sys/vm/drop_caches
多次释放缓存,使用第一次效果最好。
-其中grep $i sum.txt
和echo $i
以&&
相连,j=$i+3
与其他两条命令以;
相连。
-&&
和;
都是用于连接同一行的两条命令的;代表前一条命令执行完再接着执行下一条命令;区别在于&&
需要上一条命令执行成功才执行下一条命令;;
则只是命令分隔符,上一条命令执行成功与否不影响下一条命令的执行。
-再多介绍一个命令符||
,当用||
连接两条命令时,表示前一条命令执行成功时,停止执行后面的命令;只有当前一条命令执行失败时,才执行后一条命令。
+2. 释放缓存示例 root# free -h total used free shared buff/cache available Mem: 314G 11G 191G 388K 111G 301G Swap: 61G 60G 38M root# sync root# echo 1 > /proc/sys/vm/drop_caches root# free -h total used free shared buff/cache available Mem: 314G 11G 297G 396K 6.2G 301G Swap: 61G 60G 38M root# sync root# echo 2 > /proc/sys/vm/drop_caches root# free -h total used free shared buff/cache available Mem: 314G 11G 298G 396K 5.3G 301G Swap: 61G 60G 38M root# sync root# echo 3 > /proc/sys/vm/drop_caches root# free -h total used free shared buff/cache available Mem: 314G 11G 299G 396K 4.0G 301G Swap: 61G 60G 38M
+
+
欢迎关注微信公众号:生信技工
@@ -11659,27 +10920,91 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
linux
- shell
+ operation and maintenance
+ cache
- linux
- loop
- for
- while
+ server
+ cache
- Linux的常用命令连接符(command connector)
- /2022/01/16/linux_shell_command.connector/
-
+ 祖先状态重建:用PAML的baseML重建祖先序列
+ /2023/11/03/evolution_ancestral.state.reconstruction_paml.baseml/
+
-1. 常用命令连接符 多条命令放在一行时,需要在命令之间使用命令连接符,包括;
,&&
,||
等。
-1.1. ;
;
是最简单的命令连接符。
-command1; command2; command3
表示多个命令顺序执行,命令间没有逻辑联系。
-1.2. &&
&&
逻辑与命令连接符。
-command1 && command2 && command3
表示从左往右按顺序执行命令,如果中间有命令执行失败,则中断在失败的命令处不继续往下执行。即左边的命令执行成功才执行右边的命令;当左边命令执行失败就不会执行右边命令。
-1.3. ||
||
逻辑或命令连接符。
-command1 ||command2 || command3
表示从左往右按顺序执行命令,如果中间有命令执行成功,则中断在成功的命令处不继续往下执行。即左边的命令执行成功时,停止执行右边的命令;只有当左边的命令执行失败时,才执行右边的命令。
+
+1. 重建祖先序列
+根据现存物种的状态(性状/序列),以及系统发育关系,可以推断祖先节点物种的状态(性状/序列),即祖先状态重建。
+这篇博客介绍使用PAML的baseML程序根据系统发育关系从现存物种的序列重建祖先序列的用法。
+
+2. 用PAML的baseML程序重建祖先序列 2.1. 准备输入文件 输入的序列比对文件和树文件的格式可以参考https://github.com/abacus-gene/paml-tutorial/tree/main/positive-selection/00_data 中的 Mx_aln.phy Mx_root.tree,Mx_unroot.tre 文件。
+
+序列比对文件 (cds_aln.phy)
+
+
+phylip格式
+比对好的编码序列 (cds) 文件,碱基数量是3的倍数(codon模式比对)
+建议删除gaps和难以align的区域,但要按密码子删除(删除和保留都是3的倍数个碱基)
+
+
+树文件 (tree.newick)
+
+
+newick格式,并在首行前加上一行,包括两个数字,一个是物种/样本数量,一个是树的数量(一般是1),空格隔开。
+只需要拓扑结构,删除枝长、支持率等信息。
+
+
+配置文件 (baseml.ctl)
+
+
+baseml.ctl 的例子在安装的程序包paml/examples/下有,可以复制到分析目录下,修改后使用
+基础的配置参数如下,后续分析可基于这套参数修改:
+
+seqfile = aln.phy * sequence data file name treefile = tree.newick * tree structure file name outfile = out.txt * main result file noisy = 3 * 0,1,2,3: how much rubbish on the screen 控制屏幕输出的信息量 verbose = 0 * 1: detailed output, 0: concise output * 控制输出文件中的信息量 runmode = 0 * 0: user tree; 1: semi-automatic; 2: automatic * 3: StepwiseAddition; (4,5):PerturbationNNI model = 6 * 0:JC69, 1:K80, 2:F81, 3:F84, 4:HKY85, 5:T92, 6:TN93, 7:REV, 8:UNREST, 9:REVu; 10:UNRESTu 指定核酸替代模型。模型0,1,…,8分别表示模型JC69, K80, F81, F84, HKY85, T92, TN93, REV (也称为 GTR), 和 UNREST。注释参看Yang(1994 JME 39:105-111)。两个模型可以分别运行。model = 9是REV模型的特例,而model = 10是无限制模型的特例。当model = 9或10时,同一行里包含的主要是指定模型的额外信息。中括号中的数字是自由参数比值的数字。例如,REV应该是5而UNREST应该是11。接在这些数字后面的是圆括号中的数字。输出文件中的比值参数将按照这里的顺序摆列。括号中没有提到的比值为1。当model = 9时,你只能指定TC或CT,但不能同时指定。当model = 10时,TC和CT是不同的。 Mgene = 0 * 0:rates, 1:separate; 2:diff pi, 3:diff kapa, 4:all diff ndata = 1 * number of data sets * 基因或比对的数量 clock = 0 * 0:no clock, 1:clock; 2:local clock; 3:CombinedAnalysis fix_kappa = 0 * 0: estimate kappa; 1: fix kappa at value below kappa = 2.5 * initial or fixed kappa fix_alpha = 1 * 0: estimate alpha; 1: fix alpha at value below alpha = 0. * initial or fixed alpha, 0:infinity (constant rate) Malpha = 0 * 1: different alpha¡¯s for genes, 0: one alpha ncatG = 5 * # of categories in the dG, AdG, or nparK models of rates fix_rho = 1 * 0: estimate rho; 1: fix rho at value below rho = 0. * initial or fixed rho, 0:no correlation nparK = 0 * rate-class models. 1:rK, 2:rK&fK, 3:rK&MK(1/K), 4:rK&MK nhomo = 0 * 0 & 1: homogeneous, 2: kappa for branches, 3: N1, 4: N2。 nhomo仅针对baseml,并涉及同一替代模型中的频率参数。nhomo = 1适合一个均匀模型,但是通过最大似然迭代估算频率参数(πT,πC和πA;πG在频率总和为1中不是一个自由参数。)。这适用于F81,F84,HKY85,T92(这种情况下πGC是一个参数),TN93,或REV模型。通常(nhomo = 0)这些通过观察到的频率的平均值来估算。在两种情况下(nhomo = 0 和 1),你需要为碱基频率计算三个(或对T92计算一个)自由参数。 nhomo = 2 适用K80,F84和HKY85模型对树中的每个分枝估算一个转换/颠换比率(k)。 选项 nhomo = 3,4,和5仅用于F84,HKY85 或 T92。 getSE = 0 * 0: don¡¯t want them, 1: want S.E.s of estimates RateAncestor = 1 * (0,1,2): rates (alpha>0) or ancestral states,默认是0,不重构祖先状态,1是重构祖先序列。 Small_Diff = 1e-6 cleandata = 0 * remove sites with ambiguity data (1:yes, 0:no)? 歧义数据和比对间隙的位点要保留(0)或删除(1),建议自行删除歧义和gaps数据,并在这里选保留(0)。 * icode = 0 * (RateAncestor=1 for coding genes, ¡°GC¡± in data) * fix_blength = 0 * 0: ignore, -1: random, 1: initial, 2: fixed。设置程序处理输入树文件中枝长数据的方法:0,忽略输入树文件中的枝长信息;-1,使用一个随机起始进行进行计算;1,以输入的枝长信息作为初始值进行ML迭代分析,此时需要注意输入的枝长信息是碱基替换率,而不是碱基替换数;2,不需要使用ML迭代计算枝长,直接使用输入的枝长信息,需要注意,若枝长信息和序列信息不吻合可能导致程序崩溃;3,让ML计算出的枝长和输入的枝长呈正比。 method = 0 * 0: simultaneous; 1: one branch at a time
+
+2.2. 执行
+2.3. 结果文件 推断的祖先序列在结果文件rst中,与提供的比对好的现存物种序列长度一致,可免比对,直接提取使用。
+2.3.1. out.txt
+主要结果文件,默认名称是mlc。
+内容包括每条序列的A/T/C/G的频率,一致性位点数量,成对遗传距离矩阵,Pairwise deletion matrix,带枝长的树,树节点和枝的编号,以及kappa值。2.3.2. rst:包含三块内容 Marginal reconstruction和Joint reconstruction是两种祖先序列重构的算法。如果对所有分类单元的合集都感兴趣,用joint;如果对特定分类单元的祖先感兴趣,用marginal。
+
+
+运行的参数以及树的信息
+
+
+给系统发育树的每个node进行编号的信息,以及每个branch是哪两个node连接而成;
+
+
+Marginal reconstruction of ancestral sequences的结果
+
+
+Prob of best state at each node, listed by site. 分位点记录的每个node的序列和频率,以及重建的祖先序列的概率;
+Summary of changes along branches. 分branch记录突变的位点;
+List of extant and reconstructed sequences(现存node和祖先node的序列);
+Overall accuracy of the 91 ancestral sequences
+Counts of changes at sites. 分位点记录突变的计数;
+
+
+Joint reconstruction of ancestral sequences的结果
+
+
+Reconstruction (prob.), listed by pattern
+List of extant and reconstructed sequences(现存node和祖先node的序列);2.3.3. 其他文件 另外还有一些其他结果文件,暂时还未用到。
+
+
+rst1
+lnf
+rub
+
+3. reference
+PAML User Guide:https://github.com/abacus-gene/paml/blob/master/doc/pamlDOC.pdf
+PAML 中文用户手册:https://blog.sciencenet.cn/blog-3433349-1241310.html
+PAML开发者网站:http://abacus.gene.ucl.ac.uk/software/#phylogenetic-analysis-by-maximum-likelihood-paml
+paml软件进行祖先酶序列重建极简教程视频:https://www.bilibili.com/video/BV1AX4y1K7H4/
+
欢迎关注微信公众号:生信技工
@@ -11687,460 +11012,208 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
- linux
- shell
+ bio
+ evolution
+ ancestral state reconstruction
- linux
- shell
- command connector
+ biosoft
+ bioinfo
+ PAML
+ baseML
+ 祖先状态重建
- Linux运维命令 —— top
- /2022/05/02/linux_shell_top/
-
-
-top
用于交互式监控Linux上动态实时进程,按线程数从大到小排序。
-1. top的输出 在shell终端输入top
回车,就可以查看许多系统运行的实时信息。如下图所示:
-
+ Linux系统服务器用户账号的管理
+ /2024/01/09/linux_operation.and.maintenance_user.account/
+
-Figure 1. top默认输出示例
-top的默认输出包含两个区域:水平信息的汇总区(红框部分)和垂直信息的任务区(蓝框部分)。汇总区显示有关进程和资源使用情况的统计信息,而任务区显示当前正在运行的所有进程的列表。
-下面一一说明各个参数的含义:
-1.1. 汇总区 汇总区共有5行。
+1. 用户账号的管理
+背景
+
+
+Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
+用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
+每个用户账号都拥有一个唯一的用户名和各自的口令(即密码)。
+用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
+
+
+用户账号的管理主要包括以下三个方面的工作:
+
+
+用户账号的添加、删除与修改。
+用户口令(密码)的管理。
+用户组的管理。
+
+2. 用户账号的添加、删除和修改 新建用户useradd、删除用户userdel、修改用户usermod都是Linux自带命令,需要root权限。
+2.1. 新建用户 —— useradd
+添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。
+刚添加的账号是被锁定的,无法使用。
+
-第一行:任务队列信息。同uptime
命令输出一致。
+语法
-
-
-
-显示
-含义
-
-
-
-top - 15:30:36
-系统当前时间(system time)
-
-
-up 29 days, 54 min
-系统运行时长(uptime)
-
-
-7 users
-当前登录的用户/会话数量(user sessions)
-
-
-load average: 4.92, 4.90, 4.96
-系统平均负载,即任务队列的平均长度。三个数值分别为1min,5min,15min前到现在的平均值
-
-
+
+useradd 选项 用户名
+选项用来配置用户信息,如果无参数,则创建的用户无密码、无主目录、不指定 shell 脚本。
+用户名用来指定新账号的登录名。
+除了用户名,其他参数都可缺省,useradd -D
可print缺省值。
+
-第二行:任务进程信息 Tasks
+选项参数
-
-
-
-显示
-含义
-
-
-
-498 total
-进程总数
-
-
-3 running
-正在运行的进程数
-
-
-316 sleeping
-睡眠状态的进程数
-
-
-0 stopped
-停止状态的进程数
-
-
-0 zombie
-僵尸状态的进程数
-
-
+
+-c comment:指定一段注释性描述
+-d 目录:指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
+-g 用户组:指定用户所属的用户组。
+-G 用户组,用户组:指定用户所属的附加组。
+-s Shell文件:指定用户的登录Shell。
+-u 用户号:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
+
-第三行:CPU信息 %Cpu(s)。如果有多个CPU,可能会有多行,每行单独显示一个CPU。
+实例
-
-
-
-显示
-含义
-
-
-
-6.1 us
-用户空间占用CPU百分比
-
-
-0.2 sy
-内核空间占用CPU百分比
-
-
-0.0 ni
-用户进程空间内改变过优先级的进程占用CPU百分比
-
-
-93.7 id
-空闲CPU百分比
-
-
-0.0 wa
-等待输入输出的CPU时间百分比
-
-
-0.0 hi
-硬件CPU中断占用百分比
-
-
-0.0 si
-软中断占用百分比
-
-
-0.0 st
-虚拟机占用百分比
-
-
+
+useradd -m -d /home/user -s /bin/bash -g group -G adm,root karen
+-m 指创建用户同时创建用户主目录。
+新建用户名为karen的用户。
+新建用户主目录/home/user,/home为默认用户主目录所在父目录。
+用户登录shell是/bin/bash,属于group用户组(主组),又属于adm和root用户组(附加组)。
+useradd命令涉及的组若不存在,则需要用groupadd先新建组,再新建用户。
+
-第四行:内存信息 KiB Mem
+内涵
-
-
-
-显示
-含义
-
-
-
-33012627+total
-物理内存总量
-
-
-93989232 free
-空闲内存总量
-
-
-27405860 used
-使用的物理内存总量
-
-
-20873120+buff/cache
-用作内核缓存的内存量
-
-
+
+useradd新建用户就是在系统文件/etc/passwd
中增加一条记录,记录新用户信息,同时更新其他系统文件如/etc/shadow,/etc/group等。
+
-第五行:交换区信息 KiB Swap
+adduser
-
-
-
-显示
-含义
-
-
-
-63998972 total
-交换区总量
-
-
-63280912 free
-空闲交换区总量
-
-
-718060 used
-使用的交换区总量
-
-
-30034761+avail Mem
-缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入
-
-
-1.2. 任务区 任务区每行代表一个进程的信息。
-这里把每一列的含义列在这里:
-
-
-
-序号
-列名
-含义
-
-
-
-1
-PID
-进程id,即标识进程的唯一的身份证号
-
-
-2
-PPID
-父进程id
-
-
-3
-RUSER
-真实用户名Real user name
-
-
-4
-UID
-进程所有者的用户id
-
-
-5
-USER
-进程所有者的用户名
-
-
-6
-GROUP
-进程所有者的组名
-
-
-7
-TTY
-启动进程的终端名。不是从终端启动的进程则显示为 ?
-
-
-8
-PR
-优先级
-
-
-9
-NI
-nice值。负值表示高优先级,正值表示低优先级
-
-
-10
-P
-最后使用的CPU,仅在多CPU环境下有意义
-
-
-11
-%CPU
-上次更新到现在的CPU时间占用百分比
-
-
-12
-TIME
-进程使用的CPU时间总计,单位秒
-
-
-13
-TIME+
-进程使用的CPU时间总计,单位1/100秒
-
-
-14
-%MEM
-进程使用的物理内存百分比
-
-
-15
-VIRT
-进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
-
-
-16
-SWAP
-进程使用的虚拟内存中,被换出的大小,单位kb。
-
-
-17
-RES
-进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
-
-
-18
-CODE
-可执行代码占用的物理内存大小,单位kb
-
-
-19
-DATA
-可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
-
-
-20
-SHR
-共享内存大小,单位kb
-
-
-21
-nFLT
-页面错误次数
-
-
-22
-nDRT
-最后一次写入到现在,被修改过的页面数。
-
-
-23
-S
-进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
-
-
-24
-COMMAND
-命令名/命令行
-
-
-25
-WCHAN
-若该进程在睡眠,则显示睡眠中的系统函数名
-
-
-26
-Flags
-任务标志,参考 sched.h
-
-
-2. top的交互命令 当使用top
命令显示汇总区和任务区后,还可以使用交互命令进行特定显示。
-2.1. 常用交互命令
-q:退出程序
+
+centos系统下adduser和useradd命令用法一样。
+ubuntu系统下有adduser是一个perl脚本,使用时出现交互界面,提供选项让用户填写和选择。
+使用adduser命令的时候,系统会自动地创建与这个用户名名字一样的用户组作为这个用户的初始用户组,还会自动地在/home目录下面创建一个与用户同名的目录作为用户主目录,接着执行”cp /etc/skel /home/用户名”的操作,实现新增用户的主目录的初始化。
+用adduser这个命令创建的账号是系统账号,可以用来登录到我们的ubuntu系统。
+
+2.2. 删除用户 —— userdel 如果一个用户的账号不再使用,可以从系统中删除。
+
+语法
-要退出程序,可以按键盘上的“q”。
+userdel 选项 用户名
-上下箭头键/PgUp和PgDn键:任务区的翻页
-f/F:字段/列管理
+选项参数
-默认情况下任务区仅显示部分字段/列: PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 。
-通过 f/F 键可以显示任务区所有列的列表,被激活的字段会标记星号(*)并粗体显示。
-字段/列的添加或删除:上下箭头键来移动到字段,空格键进行选中或去粗选中。
-q退出界面。
+常用的选项是 -r,它的作用是把用户的主目录一起删除。
-
-h或者?:显示交互命令的帮助界面
-k:终止一个进程
+
+内涵
-系统将提示输入需要终止的进程PID,以及需要发送给该进程什么样的信号。
-一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
+删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
-
-u:显示特定用户的进程
+2.3. 修改用户 —— usermod 修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
+
+语法
-系统将提示输入用户名(留空代表所有用户),回车后即可显示指定用户的进程。
+usermod 选项 用户名
-
-r:即renice,改变一个进程的优先级别(NI值)
+
+选项参数
-系统提示用户输入需要改变的进程PID(默认是第一个PID进程),然后提示输入需要改变的进程优先级值(NI值,一般修改前为0),在已有NI值上加上这个输入值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
-试了下,输入正值(优先级降低)可以生效,输入负值(优先级升高)显示Permission denied。
+常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
-
-s:改变两次刷新之间的延迟时间
+
+实例
-系统将提示用户输入新的时间,单位为秒(s)。如果有小数,就换算成毫秒(ms)。输入0值则系统将不断刷新,默认值是3s。
-需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
+usermod -s /bin/ksh -g developer -G train -d /disk/karen karen
+此命令将用户karen的登录Shell修改为ksh,主目录改为/disk/karen,用户组改为developer,添加新的附加组train。
-
-o或者O:激活流程过滤
+
+修改用户名
-系统会提示输入过滤器表达式,回车后只显示符合表达式的进程。
-过滤器表达式是指定属性和值之间关系的语句。示例:COMMAND=getty: 过滤 COMMAND 属性中包含“getty”的进程
,!COMMAND=getty: 过滤 COMMAND 属性中没有“getty”的进程
,%CPU>3.0:过滤 CPU 使用率超过 3% 的进程
。
-清除添加的任何过滤器,按”=”。
+有些系统可以使用选项-l 新用户名
指定一个新的账号,即将原来的用户名改为新的用户名。
-
-W:保存当前设置到~/.toprc
设置文件中
+3. 用户口令(密码)的管理 用户账号刚创建时没有口令,被系统锁定无法使用,必须指定口令后才能使用,即使是指定空口令。 超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
+
+指定用户密码的命令格式
-如果对top的输出做了任何更改,可以将当前设置写入~/.toprc
文件中以供以后使用。
+passwd 选项 用户名
-2.2. 切换显示内容
-l:切换显示平均负载和启动时间信息(汇总区第一行)。
-t:切换显示进程和CPU状态信息(汇总区第二、三行),共四种视图。
-m:切换显示内存信息(汇总区第四、五行),共四种视图。
-c:切换显示命令名称和绝对路径的完整命令行。
-z:以红色突出显示正在运行的进程的开关。
-i:忽略空闲,睡眠和僵死进程的开关。
-R:任务区默认降序排列,切换到升序排列的开关。
-S:切换累计时间模式的开关。
-1:数字1为切换 汇总区第三行CPU信息的两种显示方式,总CPUs信息或者单个CPU信息。
+
+选项
-也可以用这个方式确定服务器的逻辑CPU数量。
-但当系统的CPU数量过多(比如超过36)无法显示全部逻辑CPU信息,还没找到怎么翻页。
-所以最好还是用cat /proc/cpuinfo| grep "processor"| wc -l
命令查看当前系统的逻辑CPU数量。
+-l:锁定口令,即禁用账号。
+-u:口令解锁。
+-d:使账号无口令。
+-f:强迫用户下次登录时修改口令。
-
-H:任务区的进程显示切换为线程显示。
-V:在正常显示和父子级层次结构显示间切换。
+
+修改用户密码的实例
-2.3. 排序任务区
-M:根据驻留内存大小排序任务区。
-P:根据CPU利用率排序任务区。
-T:根据运行累计时间排序任务区。
-N:根据进程ID排序任务区。
+
+passwd karen
+普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
+
+
+为用户指定空口令:passwd -d karen
,这个命令将用户 karen 的口令删除,这样用户 karen 下一次登录时,系统就不再允许该用户登录了。
+锁定用户,使其不能登录:passwd -l karen
-3. top的常用参数 top命令的常用参数中许多都可以在交互式命令中实现。
-top
命令的常用参数:top [-] [d] [p] [q] [c] [C] [S] [s] [n]
+4. 用户组的管理
+每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
+用户组的管理涉及用户组的添加(groupadd)、删除(groupdel)和修改(groupmod)。组的增加、删除和修改实际上就是对/etc/group文件的更新。4.1. 新增用户组 —— groupadd
+
--d 5:延迟时间,指定每两次屏幕信息刷新之间的时间间隔为5秒。
--p 51524:通过指定进程ID(PID)来仅仅监控某个进程的状态,可用多个-p PID来指定多个进程ID。
--u username:显示特定用户的进程。
--q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
--S:打开累计时间模式。
--s:打开安全操作模式。安全模式下用户无法更改和杀死任务,这将避免交互命令所带来的潜在危险。
--i:使top不显示任何闲置或者僵死进程。
--c:显示绝对路径命令行而不只是显示命令名。
--o %CPU:任务区按CPU使用率对进程进行降序排列显示。除了CPU使用率,还支持所有其他属性值。
--b:批处理模式。批处理模式程序基本上允许您将 top 命令输出结果发送到文件或其他程序。它将主要用于编写脚本和故障排除。
--n 5:5个循环显示后自动退出top界面。
-
-4. top的应用 top常用的运维应用案例
-4.1. 通过平均负载(load average)评估系统运行状态
-平均负载(load average)
+语法:groupadd 选项 用户组
+选项参数
-平均负载是指系统正在执行的计算工作占系统计算资源的比例。
-完全空闲的计算机的平均负载为 0,使用或等待 CPU 资源的每个正在运行的进程都会在平均负载上加 1。
-单CPU情况下,0代表空载,1代表满载,超过1即超载。
-单CPU情况下,良好的运行状况期望是平均负载在0-1之间,或不要超过1太多。
+-g GID:指定新用户组的组标识号(GID)。
+-o:一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
-
-查看平均负载
+
+实例
-top
命令的汇总区的第一行中load average显示的三个数字即为1min,5min,15min前到现在的平均负载。这里的平均负载是所有CPU的总平均,还要根据CPU数量来计算单CPU平均负载。
+groupadd group1
:此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
+groupadd -g 101 group2
:此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
-
-查看逻辑CPU数量(processor数量)
+4.2. 删除用户组 —— groupdel 删除已有用户组的命令很简单:groupdel group1
命令即删除用户组group1了
+4.3. 修改用户组属性 —— groupmod
+语法:groupmod 选项 用户组
+选项参数
-cat /proc/cpuinfo| grep "processor"| wc -l
可获得当前系统的逻辑CPU数量
-lscpu
列出的CPU(s)信息也是逻辑CPU数量
+-g GID:为用户组指定新的组标识号(GID)。
+-o:一般与-g选项同时使用,表示用户组的新GID可以与系统已有用户组的GID相同。
+-n 新用户组:将用户组的名字修改为新名字。
-
-计算单CPU平均负载,评估系统运行现状
+
+实例
-假设top
命令中平均负载值为54,系统CPU数量为36,单个CPU的平均负载为1.5(=54/24),代表系统过载率为50%(=54/36-1)。
-假设top
命令中平均负载值为18,系统CPU数量为36,单个CPU的平均负载为0.5(=18/24),代表系统空闲率为50%(=1-18/36)。
+groupmod -g 102 group2
:此命令将组group2的组标识号修改为102。
+groupmod –g 10000 -n group3 group2
:此命令将组group2的标识号改为10000,组名修改为group3。
-即达到,可根据top
命令的平均负载和CPU数量快速判断系统运行状态。
-5. references
-top的manual:https://man7.org/linux/man-pages/man1/top.1.html
-top命令指南:https://www.booleanworld.com/guide-linux-top-command/
-博客:top输出详解:https://www.jianshu.com/p/af584c5a79f2
-博客:平均负载:https://www.howtogeek.com/194642/understanding-the-load-average-on-linux-and-other-unix-like-systems/
+4.4. 切换用户组 —— newgrp 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
+
+用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。
+实例:newgrp root
+这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。
+
+5. 用户账号管理的集成工具 Linux提供了集成的系统管理工具userconf,它可以用来对用户账号和用户组进行统一管理。
+6. reference
+https://www.runoob.com/linux/linux-user-manage.html
@@ -12151,77 +11224,239 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
linux
operation and maintenance
+ user
- linux
- 运维
- top
- load average
+ server
+ user
+ useradd
+ usermod
+ userdel
+ passwd
+ groupadd
+ groupmod
+ groupdel
+ newgrp
- 基因组注释(三):基因功能注释
- /2021/05/17/omics_genome.annotation_function/
-
-
+ Linux的常用命令连接符(command connector)
+ /2022/01/16/linux_shell_command.connector/
+
-基因功能的注释依赖于上一步的基因结构预测,根据预测结果从基因组上提取翻译后的蛋白序列 和主流的数据库进行比对,完成功能注释。(有些也支持用DNA序列做功能注释的,但比较少。)
-比较推荐的方案是:eggNOG-mapper网页注释和PANNZER2网页注释,如果有余力再加上interpro的本地注释。
-功能注释的一般流程:1.选择数据库并下载,2.构建blastp索引,3.用blastp比对蛋白序列到数据库,4.结果整理。
-有些软件集成了数据库和功能注释的多个流程,甚至提供服务器用于网页版注释,例如eggNOG-mapper和interproscan分别集成了eggNOG和interpro数据库,PANNZER2使用最新的UniProt数据库实现网页注释。
-1. 数据库概述 根据数据库中已知编码基因的注释信息(包括motif、domain),基于同源比对,对基因中的模序和结构域、新基因编码的蛋白质功能、所参与的信号传导通路和代谢途径等的预测。基因组注释内容还可涉及蛋白激酶、病原与宿主互作、致病毒力因子预测、抗性基因等。 常用数据库:
+1. 常用命令连接符 多条命令放在一行时,需要在命令之间使用命令连接符,包括;
,&&
,||
等。
+1.1. ;
;
是最简单的命令连接符。
+command1; command2; command3
表示多个命令顺序执行,命令间没有逻辑联系。
+1.2. &&
&&
逻辑与命令连接符。
+command1 && command2 && command3
表示从左往右按顺序执行命令,如果中间有命令执行失败,则中断在失败的命令处不继续往下执行。即左边的命令执行成功才执行右边的命令;当左边命令执行失败就不会执行右边命令。
+1.3. ||
||
逻辑或命令连接符。
+command1 ||command2 || command3
表示从左往右按顺序执行命令,如果中间有命令执行成功,则中断在成功的命令处不继续往下执行。即左边的命令执行成功时,停止执行右边的命令;只有当左边的命令执行失败时,才执行右边的命令。
+
-Nr:NCBI官方非冗余蛋白数据库,包括PDB, Swiss-Prot, PIR, PRF; 如果要用DNA序列,就是nt库。
-
-UniProt:分为两部分。Swiss-Prot是UniProt数据库中经过人工校正的高质量蛋白数据库,蛋白序列得到实验的验证。TrEBL是UniProt数据库中未经过人工校正、机器自动注释的蛋白数据库。
-
-eggNOG:EMBL创建,是对NCBI的COG数据库的拓展,提供了不同分类水平蛋白的直系同源分组(Orthologous Groups,OG)。
-
-InterPro:EBI开发的一个整合的蛋白家族功能注释数据库,包括Gene3D、CDD、Pfam等10几个数据库。
-
-Pfam: 蛋白结构域注释的分类系统。
-
-GO: 基因本体论注释数据库。
-
-KEGG: 代谢通路注释数据库。
-
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-数据库的下载非常耗时,不管是eggnog还是interproscan,linux下几十KB/s,window下几百KB/s(需科学上网),耗时长度以天计算,可以尝试先在window系统下载,再转移到linux下。
-1.1. Nr/Nt数据库 nr数据库 ;nt数据库 ;
-1.2. UniProt数据库(Swiss-Prot和TrEMBL) UniProt数据库包括人工校正的高质量数据库Swiss-Prot和软件自动注释的TrEMBL数据库。
-Swiss-Prot数据库 :高质量,手工注释,非冗余的蛋白质序列数据库。非常可靠。
-TrEMBL数据库 :自动注释的蛋白质序列数据库。
-UniProt将完整数据库分类拆分成几个子库 。包括古菌,真菌,植物,人,哺乳动物,脊椎动物,无脊椎动物,啮齿动物等。
-1.3. GO数据库 [GO数据库](http://geneontology.org/docs/download-ontology/)
-1.4. KEGG数据库 KEGG(Kyoto Encyclopedia of Genes and Genomes)京都基因和基因组百科全书,是研究Pathway代谢通路最主要的数据库,整合了基因组、化学、系统及疾病和健康的信息。
-1.5. COG直系同源蛋白数据库 COG数据库 :NCBI开发的用于同源蛋白注释的数据库。 fun2003-2014.tab是COG的分类信息,将COG的功能分为26个类别,每个类别用一个字母表示。 cognames2003-2014.tab是COG的详细信息,包括编号,对应的分类,功能描述等。 cog2003-2014.csv是蛋白和COG对应关系。 prot2003-2014.fa.gz是fa格式的蛋白序列和注释信息。
-1.6. KOG数据库 KOG(Clusters of orthologous groups for eukaryotic complete genomes)真核生物蛋白相邻类的聚簇。构成每个KOG的蛋白都是被假定来自一个祖先蛋白,要么是orthologs,要么是paralogs。orthologs是指来自不同物种的由垂直家系(物种形成)进化而来的蛋白,并且保留与原始蛋白相同的功能;paralogs是指在一定物种中来源于基因复制的蛋白,可能会进化成新的与原来有关的功能。KOG数据库
-1.7. eggNOG数据库 eggNOG(evolutionary genealogy of genes:non-supervised orthologous groups)由EMBL创建,是对NCBI的COG数据库的拓展,提供了不同分类水平蛋白的直系同源分组(Orthologous Groups,OG),包括真核生物,原核生物,病毒的信息。拓展了COG的分类,采用无监督聚类算法在全基因组范围内推导基因功能,更适合谱系特征基因的分析。
-eggNOG数据库 中,e5.proteomes.faa是所有的蛋白组序列,e5.taxid_info.tsv是taxid对应的物种名及完整的谱系信息,e5.og_annotations.tsv是所有NOG group信息(第一列为Taxid,第二列为NOG groups,第三列为COG归属,第四列为Function)。per_tax_level下不同taxonomy level的members.tsv文件分别是相应level的蛋白序列id和NOG group的对应关系(第一列taxid,第二列NOG groups,第三列为该NOG group所包含的蛋白序列数目,第四列为该NOG group所包含的物种数目,第五列是该NOG group所包含的蛋白序列id,第六列是该NOG group所包含的物种taxid。
-1.8. pfam数据库 pfam数据库 是蛋白质家族数据库,根据多序列比对结果和隐马尔科夫模型,将蛋白分成不同家族。
-1.9. string数据库 string数据库 。 搜寻已知蛋白质和预测蛋白质之间的相关关系的系统,包括蛋白质之间的物理作用和间接的功能相关性。基于染色体临近,系统进化谱,基因融合和基因芯片数据等计算基因或蛋白的共表达。 包括动物转录因子数据AnimalTFDB3.0,植物转录因子数据PlnTFDB ,真菌转录因子数据库Fungal TFDB 。
-植物转录因子数据库收录了大部分植物模式物种共20个种的84个转录因子家族,包含28193 protein models,26184 distinct protein sequences,支持在线blast和本地blast。 分析工具:iTAK ,软件内置了PlantTFDB的数据库,可直接用于预测植物转录因子。 结果在classification.txt文件中。
-2. 基因功能注释 notes: 注释分析中要保证蛋白序列中没有代表氨基酸字符以外的字符,比如说有些软件会把最后一个终止密码子翻译成”.”或者”*”,需要删除。
-2.1. 下载数据库手动注释–以Uniprot为例 2.1.1. 下载数据库 这里以Uniprot为例,下载其他数据库后可用同样方法进行手动注释。
-可以uniprot_sprot和uniprot_trembl的植物数据库合并在一起。wget ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions/uniprot_sprot_plants.dat.gz #
;wget ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions/uniprot_trembl_plants.dat.gz # 11.5G
;zcat uniprot_sprot_plants.dat.gz uniprot_trembl_plants.dat.gz > uniprot_plants.dat
;
-转换格式: 用python的SeqIO模块转换
-from Bio import SeqIOcount = SeqIO.convert("uniprot_plants.dat" ,"swiss" ,"uniprot_plants.fa" ,"fasta" ) print ("Converted %i records" % count)
+ ]]>
+
+ linux
+ shell
+
+
+ linux
+ shell
+ command connector
+
+
+
+ shell的几种循环语法
+ /2021/10/10/linux_shell_loop/
+
-2.1.2. 构建blastp索引 makeblastdb -in uniprot_plants.fasta -dbtype prot -title uniprot_plants -parse_seqids
或者更快的diamond makedb --in uniprot_plants.fasta -d uniprot_plants
-2.1.3. 用blastp比对蛋白序列protein.fa和数据库uniprot_plants blastp -query protein.fa -out uniprot_plants.xml -db uniprot_plants.fasta -evalue 1e-5 -outfmt 6 -num_threads 24 &
或者更快的diamond blastp -d uniprot_plants.dmnd -q proteins.fasta --evalue 1e-5 > blastp.outfmt6
-2.1.4. 比对结果中筛选每个query的最佳subject jcvi可用conda安装python -m jcvi.formats.blast best -n 1 blastp.outfmt6
生成blastp.outfmt6.best
-2.1.5. 使用add_annotation_from_dat.py根据blastp输出从dat提取GO/KEGG/同源基因 python add_annotation_from_dat.py blastp.outfmt6.best uniprot_plants.dat 生成swiss_annotation.tsv文件;包含以下几列。
+1. shell的几种循环语法间的差异 1.1. for-loop
+for i in $(cat file.txt);do echo $i; done
+
-gene id
-uniprot accession
-identity
-homology species
-EnsemblPlants
-GO ID
-GO component, CC/MF/BP
-evidence
+for循环每次都是以空格/制表符为分割符输出,所以i变量不是一整行内容,而是单个单元格的内容。想要获取一整行内容,可以先将空格换成别的字符,输出时再替换回来。比如for i in $(sed 's/\t/#/g' file.txt); do echo $i |sed 's/#/\t/g'; done
+【更耗内存】cat会一次性把file.txt所有内容输入到内存中;
-参考脚本add_annotation_from_dat.py
+1.2. while-loop
+while read line; do echo $line; done < file.txt
+
+
+【更省内存】按行读取文件,读取到line变量是一整行内容。
+
+
+cat file.txt | while read line; do echo $line; done
+
+
+【更耗内存】cat会一次性把file.txt所有内容输入到内存中; 因为管道|的使用,while read line在子shell中按行调用,line变量也是一整行内容。 这个和多线程控制脚本batch_run.sh冲突。
+
+2. 循环语法常用命令符号 2.1. && ; 一行for/while循环中,执行多条命令的代码常写成这种形式:for i in $(cat file.txt);do grep $i sum.txt && echo $i; j=$i+3;done
。
+包含了三条命令:
+
+grep $i sum.txt
+break
+echo $i
+
+其中grep $i sum.txt
和echo $i
以&&
相连,j=$i+3
与其他两条命令以;
相连。
+&&
和;
都是用于连接同一行的两条命令的;代表前一条命令执行完再接着执行下一条命令;区别在于&&
需要上一条命令执行成功才执行下一条命令;;
则只是命令分隔符,上一条命令执行成功与否不影响下一条命令的执行。
+再多介绍一个命令符||
,当用||
连接两条命令时,表示前一条命令执行成功时,停止执行后面的命令;只有当前一条命令执行失败时,才执行后一条命令。
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ linux
+ shell
+
+
+ linux
+ loop
+ for
+ while
+
+
+
+ Linux系统服务器清理系统日志
+ /2024/05/26/linux_operation.and.maintenance_log.release/
+
+
+1. 查看系统日志记录情况【需要root权限】 服务器运行久了系统日志会满,有时开机会提示【SEL IS FULL】。这个时候就需要清理系统日志。 系统日志存放在目录/var/log/journal/
下面。
+
+ll /var/log/journal/
查看系统日志文件
+du -t 100M /var
查看/var
目录下面所有文件,包括系统日志和缓存等。
+journalctl --disk-usage
命令查看,得到Archived and active journals take up 1.9G in the file system.
表示系统日志文件占了1.9G。
+
+2. 清理系统日志文件
+journalctl命令会自动维护剩余日志文件,按文件大小或产生时间自动维护。【推荐】
+
+
+journalctl --vacuum-size=10M
命令表示只保留最近时间10Mb的日志文件;
+journalctl --vacuum-time=1w
命令表示只保留最近一周的日志文件。
+
+
+也可以单独一次清理
+
+
+rm -rf /var/log/journal/*
命令直接删除/var/log/journal/
目录下的所有文件
+
+
+清理完之后再使用journalctl --disk-usage
命令查看,会发现日志文件容量变小。
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ linux
+ operation and maintenance
+ log
+
+
+ server
+ log
+
+
+
+ 在Linux系统中替换文本换行符
+ /2021/10/10/linux_text.processing_replace.line.separator/
+
+
+替换换行符/多行变单行的几种方法
+cat file.txt | xargs echo
#用xargs为echo传入参数,默认是把换行符替换成空格。【推荐】
+cat file.txt | tr '\n' ' '
#用tr把换行符替换成空格。【推荐】
+cat file.txt | paste -sd " "
#用paste替换;-s是一次处理文件的所有行,而非并行处理每一行;-d指定分割符。
+sed ':a;N;s/\n/ /g;ta' file.txt
#用sed处理;sed按行处理所以每次处理会自动添加换行符,:a
在代码开始处设置标记a,代码执行结尾处通过跳转命令ta
重新跳转到标号a处,重新执行代码,递归每行;N表示读入下一行。【很慢】
+awk 'ORS=" "' file.txt |head -c -1
#用awk处理;ORS(Output Record Separator)设置输出分隔符,把换行符换成空格。head -c -1代表截取文件除了最后一个字符的字符,用于去掉文本末多的分隔符,根据情况使用。
+awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' file.txt
#用awk处理,将RS(record separator)设置成EOF(end of file),即将文件视为一个记录;再通过gsub函数将换行符\n替换成空格。
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ linux
+ text processing
+
+
+ linux
+ line separator
+ xargs
+ tr
+ paste
+ sed
+ awk
+
+
+
+ 基因组注释(三):基因功能注释
+ /2021/05/17/omics_genome.annotation_function/
+
+
+
+基因功能的注释依赖于上一步的基因结构预测,根据预测结果从基因组上提取翻译后的蛋白序列 和主流的数据库进行比对,完成功能注释。(有些也支持用DNA序列做功能注释的,但比较少。)
+比较推荐的方案是:eggNOG-mapper网页注释和PANNZER2网页注释,如果有余力再加上interpro的本地注释。
+功能注释的一般流程:1.选择数据库并下载,2.构建blastp索引,3.用blastp比对蛋白序列到数据库,4.结果整理。
+有些软件集成了数据库和功能注释的多个流程,甚至提供服务器用于网页版注释,例如eggNOG-mapper和interproscan分别集成了eggNOG和interpro数据库,PANNZER2使用最新的UniProt数据库实现网页注释。
+1. 数据库概述 根据数据库中已知编码基因的注释信息(包括motif、domain),基于同源比对,对基因中的模序和结构域、新基因编码的蛋白质功能、所参与的信号传导通路和代谢途径等的预测。基因组注释内容还可涉及蛋白激酶、病原与宿主互作、致病毒力因子预测、抗性基因等。 常用数据库:
+
+Nr:NCBI官方非冗余蛋白数据库,包括PDB, Swiss-Prot, PIR, PRF; 如果要用DNA序列,就是nt库。
+
+UniProt:分为两部分。Swiss-Prot是UniProt数据库中经过人工校正的高质量蛋白数据库,蛋白序列得到实验的验证。TrEBL是UniProt数据库中未经过人工校正、机器自动注释的蛋白数据库。
+
+eggNOG:EMBL创建,是对NCBI的COG数据库的拓展,提供了不同分类水平蛋白的直系同源分组(Orthologous Groups,OG)。
+
+InterPro:EBI开发的一个整合的蛋白家族功能注释数据库,包括Gene3D、CDD、Pfam等10几个数据库。
+
+Pfam: 蛋白结构域注释的分类系统。
+
+GO: 基因本体论注释数据库。
+
+KEGG: 代谢通路注释数据库。
+
+
+数据库的下载非常耗时,不管是eggnog还是interproscan,linux下几十KB/s,window下几百KB/s(需科学上网),耗时长度以天计算,可以尝试先在window系统下载,再转移到linux下。
+1.1. Nr/Nt数据库 nr数据库 ;nt数据库 ;
+1.2. UniProt数据库(Swiss-Prot和TrEMBL) UniProt数据库包括人工校正的高质量数据库Swiss-Prot和软件自动注释的TrEMBL数据库。
+Swiss-Prot数据库 :高质量,手工注释,非冗余的蛋白质序列数据库。非常可靠。
+TrEMBL数据库 :自动注释的蛋白质序列数据库。
+UniProt将完整数据库分类拆分成几个子库 。包括古菌,真菌,植物,人,哺乳动物,脊椎动物,无脊椎动物,啮齿动物等。
+1.3. GO数据库 [GO数据库](http://geneontology.org/docs/download-ontology/)
+1.4. KEGG数据库 KEGG(Kyoto Encyclopedia of Genes and Genomes)京都基因和基因组百科全书,是研究Pathway代谢通路最主要的数据库,整合了基因组、化学、系统及疾病和健康的信息。
+1.5. COG直系同源蛋白数据库 COG数据库 :NCBI开发的用于同源蛋白注释的数据库。 fun2003-2014.tab是COG的分类信息,将COG的功能分为26个类别,每个类别用一个字母表示。 cognames2003-2014.tab是COG的详细信息,包括编号,对应的分类,功能描述等。 cog2003-2014.csv是蛋白和COG对应关系。 prot2003-2014.fa.gz是fa格式的蛋白序列和注释信息。
+1.6. KOG数据库 KOG(Clusters of orthologous groups for eukaryotic complete genomes)真核生物蛋白相邻类的聚簇。构成每个KOG的蛋白都是被假定来自一个祖先蛋白,要么是orthologs,要么是paralogs。orthologs是指来自不同物种的由垂直家系(物种形成)进化而来的蛋白,并且保留与原始蛋白相同的功能;paralogs是指在一定物种中来源于基因复制的蛋白,可能会进化成新的与原来有关的功能。KOG数据库
+1.7. eggNOG数据库 eggNOG(evolutionary genealogy of genes:non-supervised orthologous groups)由EMBL创建,是对NCBI的COG数据库的拓展,提供了不同分类水平蛋白的直系同源分组(Orthologous Groups,OG),包括真核生物,原核生物,病毒的信息。拓展了COG的分类,采用无监督聚类算法在全基因组范围内推导基因功能,更适合谱系特征基因的分析。
+eggNOG数据库 中,e5.proteomes.faa是所有的蛋白组序列,e5.taxid_info.tsv是taxid对应的物种名及完整的谱系信息,e5.og_annotations.tsv是所有NOG group信息(第一列为Taxid,第二列为NOG groups,第三列为COG归属,第四列为Function)。per_tax_level下不同taxonomy level的members.tsv文件分别是相应level的蛋白序列id和NOG group的对应关系(第一列taxid,第二列NOG groups,第三列为该NOG group所包含的蛋白序列数目,第四列为该NOG group所包含的物种数目,第五列是该NOG group所包含的蛋白序列id,第六列是该NOG group所包含的物种taxid。
+1.8. pfam数据库 pfam数据库 是蛋白质家族数据库,根据多序列比对结果和隐马尔科夫模型,将蛋白分成不同家族。
+1.9. string数据库 string数据库 。 搜寻已知蛋白质和预测蛋白质之间的相关关系的系统,包括蛋白质之间的物理作用和间接的功能相关性。基于染色体临近,系统进化谱,基因融合和基因芯片数据等计算基因或蛋白的共表达。 包括动物转录因子数据AnimalTFDB3.0,植物转录因子数据PlnTFDB ,真菌转录因子数据库Fungal TFDB 。
+植物转录因子数据库收录了大部分植物模式物种共20个种的84个转录因子家族,包含28193 protein models,26184 distinct protein sequences,支持在线blast和本地blast。 分析工具:iTAK ,软件内置了PlantTFDB的数据库,可直接用于预测植物转录因子。 结果在classification.txt文件中。
+2. 基因功能注释 notes: 注释分析中要保证蛋白序列中没有代表氨基酸字符以外的字符,比如说有些软件会把最后一个终止密码子翻译成”.”或者”*”,需要删除。
+2.1. 下载数据库手动注释–以Uniprot为例 2.1.1. 下载数据库 这里以Uniprot为例,下载其他数据库后可用同样方法进行手动注释。
+可以uniprot_sprot和uniprot_trembl的植物数据库合并在一起。wget ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions/uniprot_sprot_plants.dat.gz #
;wget ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions/uniprot_trembl_plants.dat.gz # 11.5G
;zcat uniprot_sprot_plants.dat.gz uniprot_trembl_plants.dat.gz > uniprot_plants.dat
;
+转换格式: 用python的SeqIO模块转换
+from Bio import SeqIOcount = SeqIO.convert("uniprot_plants.dat" ,"swiss" ,"uniprot_plants.fa" ,"fasta" ) print ("Converted %i records" % count)
+
+2.1.2. 构建blastp索引 makeblastdb -in uniprot_plants.fasta -dbtype prot -title uniprot_plants -parse_seqids
或者更快的diamond makedb --in uniprot_plants.fasta -d uniprot_plants
+2.1.3. 用blastp比对蛋白序列protein.fa和数据库uniprot_plants blastp -query protein.fa -out uniprot_plants.xml -db uniprot_plants.fasta -evalue 1e-5 -outfmt 6 -num_threads 24 &
或者更快的diamond blastp -d uniprot_plants.dmnd -q proteins.fasta --evalue 1e-5 > blastp.outfmt6
+2.1.4. 比对结果中筛选每个query的最佳subject jcvi可用conda安装python -m jcvi.formats.blast best -n 1 blastp.outfmt6
生成blastp.outfmt6.best
+2.1.5. 使用add_annotation_from_dat.py根据blastp输出从dat提取GO/KEGG/同源基因 python add_annotation_from_dat.py blastp.outfmt6.best uniprot_plants.dat 生成swiss_annotation.tsv文件;包含以下几列。
+
+gene id
+uniprot accession
+identity
+homology species
+EnsemblPlants
+GO ID
+GO component, CC/MF/BP
+evidence
+
+参考脚本add_annotation_from_dat.py
2.1.6. blast2go blast2go的功能是将blast注释结果转换成GO注释,但使用较为复杂,下载数据库耗时长,不推荐使用。blast2go教程 ;blast2go教程 下载数据库 wget ftp://ftp.ncbi.nlm.nih.gov/gene/DATA/gene_info.gz #650M wget ftp://ftp.ncbi.nlm.nih.gov/gene/DATA/gene2accession.gz #2.3G wget ftp://ftp.pir.georgetown.edu/databases/idmapping/idmapping.tb.gz #10G wget http://release.geneontology.org/2017-01-01/mysql_dumps/go_monthly-assocdb-data.gz #6.3G
2.2. eggnog-mapper注释 eggNOG(evolutionary genealogy of genes: Non-supervised Orthologous Groups)。eggNOG数据库 是数据库,eggnog-mapper是使用eggnog数据库作为参考的注释软件或网页,eggnog-mapper网页版 。
2.2.1. eggNOG本地注释 下载数据库本地注释的方法: 在eggnog网站下载对应使用的数据库。http://eggnog5.embl.de/download/emapperdb-5.0.0/eggnog.db.gz http://eggnogdb.embl.de/download/emapperdb-5.0.0/eggnog_proteins.dmnd.gz 注释命令: python2 /home/leon/software/3.Function/eggnog-mapper.orginal/emapper.py -i Tov.final.all.maker.transcripts.fasta -o run_egg –override -m diamond –cpu 80
@@ -12530,39 +11765,6 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
GFAP
-
- 在Linux系统中替换文本换行符
- /2021/10/10/linux_text.processing_replace.line.separator/
-
-
-替换换行符/多行变单行的几种方法
-cat file.txt | xargs echo
#用xargs为echo传入参数,默认是把换行符替换成空格。【推荐】
-cat file.txt | tr '\n' ' '
#用tr把换行符替换成空格。【推荐】
-cat file.txt | paste -sd " "
#用paste替换;-s是一次处理文件的所有行,而非并行处理每一行;-d指定分割符。
-sed ':a;N;s/\n/ /g;ta' file.txt
#用sed处理;sed按行处理所以每次处理会自动添加换行符,:a
在代码开始处设置标记a,代码执行结尾处通过跳转命令ta
重新跳转到标号a处,重新执行代码,递归每行;N表示读入下一行。【很慢】
-awk 'ORS=" "' file.txt |head -c -1
#用awk处理;ORS(Output Record Separator)设置输出分隔符,把换行符换成空格。head -c -1代表截取文件除了最后一个字符的字符,用于去掉文本末多的分隔符,根据情况使用。
-awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' file.txt
#用awk处理,将RS(record separator)设置成EOF(end of file),即将文件视为一个记录;再通过gsub函数将换行符\n替换成空格。
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- linux
- text processing
-
-
- linux
- line separator
- xargs
- tr
- paste
- sed
- awk
-
-
基因组注释(四):非编码RNA的注释-用Infernal软件对Rfam 12进行RNA注释
/2022/04/22/omics_genome.annotation_ncRNA/
@@ -12926,115 +12128,583 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
LTR预测
-LTR_FINDER预测LTR
-LTRharvest预测LTR
-LTR_retriever确认前两个软件预测的LTR
+LTR_FINDER预测LTR
+LTRharvest预测LTR
+LTR_retriever确认前两个软件预测的LTR
+
+
+TIR预测
+
+
+Generic Repeat Finder
+TIR-Learner预测TIR
+
+
+Helitrons预测
+
+
+
+filter过滤
+
+
+以上三种TE预测结束后做basic filter获得full-length TEs
+进一步做advance filter,获得raw library
+与指定的curated library合并
+用RepeatModeler做训练
+用指定的CDS做最后的filters
+
+
+获得最终的final TE library
+Annotation
+Evaluation
+
+3.2. EDTA 安装 参考开发者推荐的安装方式
+注意RepeatMasker安装的Repbase库的加入,参考RepeatMasker的安装。
+3.2.1. quick installation using conda
+下载EDTAgit clone https://github.com/oushujun/EDTA.git
+
+用EDTA.yml创建新的环境和安装依赖conda env create -f EDTA.yml
+
+
+3.2.2. another installation using conda
+【推荐】创建新的环境并进入conda create -n EDTA
conda activate EDTA
+
+三种方式安装EDTA:
+
+
+
+安装EDTAconda install -c bioconda -c conda-forge edta
+
+安装EDTA和指定版本依赖conda install -c conda-forge -c bioconda edta python=3.6 tensorflow=1.14 'h5py<3'
+
+用mamba加速安装conda install -c conda-forge mamba
mamba install -c conda-forge -c bioconda edta python=3.6 tensorflow=1.14 'h5py<3'
+
+
+3.2.3. singularity安装 singularity pull EDTA.sif docker://oushujun/edta:<tag>
+3.2.4. docker安装 docker pull docker://oushujun/edta:<tag>
+singularity和docker安装我没用过,参考开发者说明吧。
+3.3. EDTA 使用 nohup EDTA.pl --genome sample.fa --cds sample.cds --species others --step all --sensitive 1 --anno 1 --evaluate 1 -t 36 &
+参数解释:
+
+–genome 基因组文件
+–cds 提供这个种或近缘种的CDS序列(不能包括introns和UTR),用于最终过滤。
+–rmout 提供其他软件做的同源TE注释(比如repeatmasker的.out文件),如果不提供则默认使用EDTA - library用于masking。
+–species [Rice|Maize|others]三种可选
+–step [all|filter|final|anno]
+-sensitive: 是否用RepeatModeler分析剩下的TE,默认是0,不要。RepeatModeler会增加运行时间。
+-anno: 是否在构建TE文库后进行全基因组预测,默认是0.
+-evalues: 默认是0,需要同时设置-anno 1才能使用。能够评估注释质量,但会显著增加分析时间。
+–overwrite默认是0,设定为1会删除已有结果重新运行,建议保持默认,运行中断可以继续运行。
+
+简化推荐版:nohup EDTA.pl --genome sample.fa --cds sample.cds --species others --step all --anno 1 -t 36 &
+3.4. 结果文件
+genome.mod.EDTA.TElib.fa:最终结果,非冗余的TE库。如果在输入文件中用–curatedlib指定的修正版TE库,则该文件中也将包含这部分序列。
+genome.mod.EDTA.TElib.novel.fa: 新TE类型。该文件包括在输入文件中用–curatedlib指定的修正版TE库没有的TE序列,即genome.mod.EDTA.TElib.fa减去–curatedlib指定库(需要–curatedlib参数)。
+genome.mod.EDTA.TEanno.gff: 全基因组TE的注释。该文件包括结构完整和结构不完整的TE的注释(需要–anno 1参数)。
+genome.mod.EDTA.TEanno.sum: 对全基因组TE注释的总结(需要–anno 1参数)。
+genome.mod.MAKER.masked: 低阈值TE的屏蔽。该文件中仅包括长TE(>= 1 kb)序列(需要–anno 1参数)。
+genome.mod.EDTA.TE.fa.stat.redun.sum: 简单TE的注释偏差(需要–evaluate 1参数)。
+genome.mod.EDTA.TE.fa.stat.nested.sum:嵌套型TE注释的偏差(需要–evaluate 1参数)。
+genome.mod.EDTA.TE.fa.stat.all.sum: 注释偏差的概述(需要–evaluate 1参数)。
+
+3.5. 评估已有TE注释 当已有TE库结果,想要与其他软件(比如RepeatMasker)预测结果比较,可以用EDTA的脚本lib-test.pl
进行,评估是通过与参考注释进行比较来进行的。
+
+用RepeatMasker根据已有TE库进行注释
+
+RepeatMasker -pa 36 -q -no_is -norna -nolow -div 40 -lib sample.TE.lib.fasta -cutoff 225 sample.fa
+
+用lib-test.pl进行TE注释的比较和评估
+
+perl lib-test.pl -genome genome.fasta -std genome.stdlib.RM.out -tst genome.testlib.RM.out -cat [options] -genome [file] FASTA format genomesequence -std [file] RepeatMasker .out file of the standard library -tst [file] RepeatMasker .out file of the test library -cat [string] Testing TE category. Use one of LTR|nonLTR|LINE|SINE|TIR|MITEHelitron|Total|Classified -N [0|1] Include Ns in total length of the genome. Defaule: 0 (not include Ns). -unknown [0|1] Include unknownannotations to the testing category. This should be used when the test library has no classification and you assume they all belong to the target category specified by -cat. Default: 0 (not include unknowns) -rand [int] A randum number used to identify the current run. (default:generate automatically) -threads|-t [int] Number of threads torun this program. Default: 4
+
+lib-test.pl -genome sample.fa -std genome.stdlib.RM.out -tst genome.testlib.RM.out -cat LTR
+3.6. notes
+基因组的碱基全部大写,因为小写在一些软件是被认为进行了soft-masked的,在TIR预测时会报错。
+-t设置线程,当运行到调用RMBlast引擎时,默认使用四核,如果服务器是四核,则实际使用线程为设置的-t的四倍(RepeatMasker和RepeatModeler的-pa设置线程有一样的问题),EDTA支持断点续跑,可以先设置-t 高一点,运行到RMBlast时,kill掉,重新设置低一点的-t。
+预测有时运行会报错缺一些perl的module,例如Bio,安装缺失的module,再次运行即可。
+关于–rmout,当使用这个参数指定同源TE注释时,不使用EDTA的同源注释,而是用这个参数指定的库做同源注释,最终结果是这个同源注释加上EDTA其他注释的完整的intact TEs结果。所以当提供的repeatmasker文件预测结果非常全面时,使用这个参数;如果提供的库对物种TE的预测结果不够全面,使用这个参数反而会降低最终预测结果,不建议使用这个参数。不知道是否提供的库是否全面,有时间就有这个参数和没这个参数的结果比较选用,没时间就直接不用这个参数。参考issue 。
+HelitronScanner预测Helitrons默认需要400G运行内存,若不够会出现如下报错,把运行内存上限升高后再次运行即可:
+
+ERROR: Raw Helitron results not found in sample.fa.mod.EDTA.raw/sample.fa.mod.Helitron.raw.fa If you believe the program is working properly, this may be caused by the lack of intact Helitrons in your genome. Consider to use the --force 1 parameter to overwrite this check
+
+references
+https://en.wikipedia.org/wiki/Tandem_repeat
+https://en.wikipedia.org/wiki/Microsatellite
+http://www.repeatmasker.org/RepeatModeler/
+https://www.cnblogs.com/zhanmaomao/p/12345462.html
+https://www.jianshu.com/p/ddd1c9a74fde
+https://www.jianshu.com/p/dfa89f394882
+https://wheat.pw.usda.gov/ITMI/Repeats/Repeat_types.html
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ omics
+ genome
+ annotation
+
+
+ genome
+ genome annotation
+ repeat sequences
+ transposable elements(TE)
+ RepeatMasker
+ RepeatModeler
+ EDTA
+ tandem repeat
+
+
+
+ Linux运维命令 —— top
+ /2022/05/02/linux_shell_top/
+
+
+top
用于交互式监控Linux上动态实时进程,按线程数从大到小排序。
+1. top的输出 在shell终端输入top
回车,就可以查看许多系统运行的实时信息。如下图所示:
+
+
+Figure 1. top默认输出示例
+top的默认输出包含两个区域:水平信息的汇总区(红框部分)和垂直信息的任务区(蓝框部分)。汇总区显示有关进程和资源使用情况的统计信息,而任务区显示当前正在运行的所有进程的列表。
+下面一一说明各个参数的含义:
+1.1. 汇总区 汇总区共有5行。
+
+第一行:任务队列信息。同uptime
命令输出一致。
+
+
+
+
+显示
+含义
+
+
+
+top - 15:30:36
+系统当前时间(system time)
+
+
+up 29 days, 54 min
+系统运行时长(uptime)
+
+
+7 users
+当前登录的用户/会话数量(user sessions)
+
+
+load average: 4.92, 4.90, 4.96
+系统平均负载,即任务队列的平均长度。三个数值分别为1min,5min,15min前到现在的平均值
+
+
+
+第二行:任务进程信息 Tasks
+
+
+
+
+显示
+含义
+
+
+
+498 total
+进程总数
+
+
+3 running
+正在运行的进程数
+
+
+316 sleeping
+睡眠状态的进程数
+
+
+0 stopped
+停止状态的进程数
+
+
+0 zombie
+僵尸状态的进程数
+
+
+
+第三行:CPU信息 %Cpu(s)。如果有多个CPU,可能会有多行,每行单独显示一个CPU。
+
+
+
+
+显示
+含义
+
+
+
+6.1 us
+用户空间占用CPU百分比
+
+
+0.2 sy
+内核空间占用CPU百分比
+
+
+0.0 ni
+用户进程空间内改变过优先级的进程占用CPU百分比
+
+
+93.7 id
+空闲CPU百分比
+
+
+0.0 wa
+等待输入输出的CPU时间百分比
+
+
+0.0 hi
+硬件CPU中断占用百分比
+
+
+0.0 si
+软中断占用百分比
+
+
+0.0 st
+虚拟机占用百分比
+
+
+
+第四行:内存信息 KiB Mem
+
+
+
+
+显示
+含义
+
+
+
+33012627+total
+物理内存总量
+
+
+93989232 free
+空闲内存总量
+
+
+27405860 used
+使用的物理内存总量
+
+
+20873120+buff/cache
+用作内核缓存的内存量
+
+
+
+第五行:交换区信息 KiB Swap
+
+
+
+
+显示
+含义
+
+
+
+63998972 total
+交换区总量
+
+
+63280912 free
+空闲交换区总量
+
+
+718060 used
+使用的交换区总量
+
+
+30034761+avail Mem
+缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入
+
+
+1.2. 任务区 任务区每行代表一个进程的信息。
+这里把每一列的含义列在这里:
+
+
+
+序号
+列名
+含义
+
+
+
+1
+PID
+进程id,即标识进程的唯一的身份证号
+
+
+2
+PPID
+父进程id
+
+
+3
+RUSER
+真实用户名Real user name
+
+
+4
+UID
+进程所有者的用户id
+
+
+5
+USER
+进程所有者的用户名
+
+
+6
+GROUP
+进程所有者的组名
+
+
+7
+TTY
+启动进程的终端名。不是从终端启动的进程则显示为 ?
+
+
+8
+PR
+优先级
+
+
+9
+NI
+nice值。负值表示高优先级,正值表示低优先级
+
+
+10
+P
+最后使用的CPU,仅在多CPU环境下有意义
+
+
+11
+%CPU
+上次更新到现在的CPU时间占用百分比
+
+
+12
+TIME
+进程使用的CPU时间总计,单位秒
+
+
+13
+TIME+
+进程使用的CPU时间总计,单位1/100秒
+
+
+14
+%MEM
+进程使用的物理内存百分比
+
+
+15
+VIRT
+进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
+
+
+16
+SWAP
+进程使用的虚拟内存中,被换出的大小,单位kb。
+
+
+17
+RES
+进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
+
+
+18
+CODE
+可执行代码占用的物理内存大小,单位kb
+
+
+19
+DATA
+可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
+
+
+20
+SHR
+共享内存大小,单位kb
+
+
+21
+nFLT
+页面错误次数
+
+
+22
+nDRT
+最后一次写入到现在,被修改过的页面数。
+
+
+23
+S
+进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
+
+
+24
+COMMAND
+命令名/命令行
+
+
+25
+WCHAN
+若该进程在睡眠,则显示睡眠中的系统函数名
+
+
+26
+Flags
+任务标志,参考 sched.h
+
+
+2. top的交互命令 当使用top
命令显示汇总区和任务区后,还可以使用交互命令进行特定显示。
+2.1. 常用交互命令
+q:退出程序
+
+
+
+上下箭头键/PgUp和PgDn键:任务区的翻页
+f/F:字段/列管理
+
+
+默认情况下任务区仅显示部分字段/列: PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 。
+通过 f/F 键可以显示任务区所有列的列表,被激活的字段会标记星号(*)并粗体显示。
+字段/列的添加或删除:上下箭头键来移动到字段,空格键进行选中或去粗选中。
+q退出界面。
+
+
+h或者?:显示交互命令的帮助界面
+k:终止一个进程
+
+
+系统将提示输入需要终止的进程PID,以及需要发送给该进程什么样的信号。
+一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
-
-TIR预测
+
+u:显示特定用户的进程
-Generic Repeat Finder
-TIR-Learner预测TIR
+系统将提示输入用户名(留空代表所有用户),回车后即可显示指定用户的进程。
-
-Helitrons预测
+
+r:即renice,改变一个进程的优先级别(NI值)
-HelitronScanner
+系统提示用户输入需要改变的进程PID(默认是第一个PID进程),然后提示输入需要改变的进程优先级值(NI值,一般修改前为0),在已有NI值上加上这个输入值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
+试了下,输入正值(优先级降低)可以生效,输入负值(优先级升高)显示Permission denied。
-
-filter过滤
+
+s:改变两次刷新之间的延迟时间
-以上三种TE预测结束后做basic filter获得full-length TEs
-进一步做advance filter,获得raw library
-与指定的curated library合并
-用RepeatModeler做训练
-用指定的CDS做最后的filters
+系统将提示用户输入新的时间,单位为秒(s)。如果有小数,就换算成毫秒(ms)。输入0值则系统将不断刷新,默认值是3s。
+需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
-
-获得最终的final TE library
-Annotation
-Evaluation
-
-3.2. EDTA 安装 参考开发者推荐的安装方式
-注意RepeatMasker安装的Repbase库的加入,参考RepeatMasker的安装。
-3.2.1. quick installation using conda
-下载EDTAgit clone https://github.com/oushujun/EDTA.git
-
-用EDTA.yml创建新的环境和安装依赖conda env create -f EDTA.yml
-
-
-3.2.2. another installation using conda
-【推荐】创建新的环境并进入conda create -n EDTA
conda activate EDTA
-
-三种方式安装EDTA:
-
+
+o或者O:激活流程过滤
-安装EDTAconda install -c bioconda -c conda-forge edta
-
-安装EDTA和指定版本依赖conda install -c conda-forge -c bioconda edta python=3.6 tensorflow=1.14 'h5py<3'
-
-用mamba加速安装conda install -c conda-forge mamba
mamba install -c conda-forge -c bioconda edta python=3.6 tensorflow=1.14 'h5py<3'
-
+系统会提示输入过滤器表达式,回车后只显示符合表达式的进程。
+过滤器表达式是指定属性和值之间关系的语句。示例:COMMAND=getty: 过滤 COMMAND 属性中包含“getty”的进程
,!COMMAND=getty: 过滤 COMMAND 属性中没有“getty”的进程
,%CPU>3.0:过滤 CPU 使用率超过 3% 的进程
。
+清除添加的任何过滤器,按”=”。
-3.2.3. singularity安装 singularity pull EDTA.sif docker://oushujun/edta:<tag>
-3.2.4. docker安装 docker pull docker://oushujun/edta:<tag>
-singularity和docker安装我没用过,参考开发者说明吧。
-3.3. EDTA 使用 nohup EDTA.pl --genome sample.fa --cds sample.cds --species others --step all --sensitive 1 --anno 1 --evaluate 1 -t 36 &
-参数解释:
+
+W:保存当前设置到~/.toprc
设置文件中
+
-–genome 基因组文件
-–cds 提供这个种或近缘种的CDS序列(不能包括introns和UTR),用于最终过滤。
-–rmout 提供其他软件做的同源TE注释(比如repeatmasker的.out文件),如果不提供则默认使用EDTA - library用于masking。
-–species [Rice|Maize|others]三种可选
-–step [all|filter|final|anno]
--sensitive: 是否用RepeatModeler分析剩下的TE,默认是0,不要。RepeatModeler会增加运行时间。
--anno: 是否在构建TE文库后进行全基因组预测,默认是0.
--evalues: 默认是0,需要同时设置-anno 1才能使用。能够评估注释质量,但会显著增加分析时间。
-–overwrite默认是0,设定为1会删除已有结果重新运行,建议保持默认,运行中断可以继续运行。
+如果对top的输出做了任何更改,可以将当前设置写入~/.toprc
文件中以供以后使用。
-简化推荐版:nohup EDTA.pl --genome sample.fa --cds sample.cds --species others --step all --anno 1 -t 36 &
-3.4. 结果文件
-genome.mod.EDTA.TElib.fa:最终结果,非冗余的TE库。如果在输入文件中用–curatedlib指定的修正版TE库,则该文件中也将包含这部分序列。
-genome.mod.EDTA.TElib.novel.fa: 新TE类型。该文件包括在输入文件中用–curatedlib指定的修正版TE库没有的TE序列,即genome.mod.EDTA.TElib.fa减去–curatedlib指定库(需要–curatedlib参数)。
-genome.mod.EDTA.TEanno.gff: 全基因组TE的注释。该文件包括结构完整和结构不完整的TE的注释(需要–anno 1参数)。
-genome.mod.EDTA.TEanno.sum: 对全基因组TE注释的总结(需要–anno 1参数)。
-genome.mod.MAKER.masked: 低阈值TE的屏蔽。该文件中仅包括长TE(>= 1 kb)序列(需要–anno 1参数)。
-genome.mod.EDTA.TE.fa.stat.redun.sum: 简单TE的注释偏差(需要–evaluate 1参数)。
-genome.mod.EDTA.TE.fa.stat.nested.sum:嵌套型TE注释的偏差(需要–evaluate 1参数)。
-genome.mod.EDTA.TE.fa.stat.all.sum: 注释偏差的概述(需要–evaluate 1参数)。
+2.2. 切换显示内容
+l:切换显示平均负载和启动时间信息(汇总区第一行)。
+t:切换显示进程和CPU状态信息(汇总区第二、三行),共四种视图。
+m:切换显示内存信息(汇总区第四、五行),共四种视图。
+c:切换显示命令名称和绝对路径的完整命令行。
+z:以红色突出显示正在运行的进程的开关。
+i:忽略空闲,睡眠和僵死进程的开关。
+R:任务区默认降序排列,切换到升序排列的开关。
+S:切换累计时间模式的开关。
+1:数字1为切换 汇总区第三行CPU信息的两种显示方式,总CPUs信息或者单个CPU信息。
+
+
+也可以用这个方式确定服务器的逻辑CPU数量。
+但当系统的CPU数量过多(比如超过36)无法显示全部逻辑CPU信息,还没找到怎么翻页。
+所以最好还是用cat /proc/cpuinfo| grep "processor"| wc -l
命令查看当前系统的逻辑CPU数量。
-3.5. 评估已有TE注释 当已有TE库结果,想要与其他软件(比如RepeatMasker)预测结果比较,可以用EDTA的脚本lib-test.pl
进行,评估是通过与参考注释进行比较来进行的。
+
+H:任务区的进程显示切换为线程显示。
+V:在正常显示和父子级层次结构显示间切换。
+
+2.3. 排序任务区
+M:根据驻留内存大小排序任务区。
+P:根据CPU利用率排序任务区。
+T:根据运行累计时间排序任务区。
+N:根据进程ID排序任务区。
+
+3. top的常用参数 top命令的常用参数中许多都可以在交互式命令中实现。
+top
命令的常用参数:top [-] [d] [p] [q] [c] [C] [S] [s] [n]
-用RepeatMasker根据已有TE库进行注释
+-d 5:延迟时间,指定每两次屏幕信息刷新之间的时间间隔为5秒。
+-p 51524:通过指定进程ID(PID)来仅仅监控某个进程的状态,可用多个-p PID来指定多个进程ID。
+-u username:显示特定用户的进程。
+-q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
+-S:打开累计时间模式。
+-s:打开安全操作模式。安全模式下用户无法更改和杀死任务,这将避免交互命令所带来的潜在危险。
+-i:使top不显示任何闲置或者僵死进程。
+-c:显示绝对路径命令行而不只是显示命令名。
+-o %CPU:任务区按CPU使用率对进程进行降序排列显示。除了CPU使用率,还支持所有其他属性值。
+-b:批处理模式。批处理模式程序基本上允许您将 top 命令输出结果发送到文件或其他程序。它将主要用于编写脚本和故障排除。
+-n 5:5个循环显示后自动退出top界面。
-RepeatMasker -pa 36 -q -no_is -norna -nolow -div 40 -lib sample.TE.lib.fasta -cutoff 225 sample.fa
+4. top的应用 top常用的运维应用案例
+4.1. 通过平均负载(load average)评估系统运行状态
+平均负载(load average)
+
+
+平均负载是指系统正在执行的计算工作占系统计算资源的比例。
+完全空闲的计算机的平均负载为 0,使用或等待 CPU 资源的每个正在运行的进程都会在平均负载上加 1。
+单CPU情况下,0代表空载,1代表满载,超过1即超载。
+单CPU情况下,良好的运行状况期望是平均负载在0-1之间,或不要超过1太多。
+
-用lib-test.pl进行TE注释的比较和评估
+查看平均负载
-perl lib-test.pl -genome genome.fasta -std genome.stdlib.RM.out -tst genome.testlib.RM.out -cat [options] -genome [file] FASTA format genomesequence -std [file] RepeatMasker .out file of the standard library -tst [file] RepeatMasker .out file of the test library -cat [string] Testing TE category. Use one of LTR|nonLTR|LINE|SINE|TIR|MITEHelitron|Total|Classified -N [0|1] Include Ns in total length of the genome. Defaule: 0 (not include Ns). -unknown [0|1] Include unknownannotations to the testing category. This should be used when the test library has no classification and you assume they all belong to the target category specified by -cat. Default: 0 (not include unknowns) -rand [int] A randum number used to identify the current run. (default:generate automatically) -threads|-t [int] Number of threads torun this program. Default: 4
-
-lib-test.pl -genome sample.fa -std genome.stdlib.RM.out -tst genome.testlib.RM.out -cat LTR
-3.6. notes
- omics
- genome
- annotation
+ linux
+ operation and maintenance
- genome
- genome annotation
- repeat sequences
- transposable elements(TE)
- RepeatMasker
- RepeatModeler
- EDTA
- tandem repeat
+ linux
+ 运维
+ top
+ load average
- 用Hifiasm组装基因组:(一)简介Hifiasm软件和HiFi数据
- /2024/06/19/omics_genome.assembly_TGS_Hifiasm_01.intro/
-
+ 用SPAdes对Illumina二代测序数据进行基因组预组装
+ /2024/11/05/omics_genome.assembly_NGS_SPAdes/
+
-1. HiFi数据 HiFi reads(High Fidelity reads)是2019年由PacBio公司推出的基于环化一致性序列(Circular Consensus Sequencing,CCS)模式产生的既兼顾长读长(10-20kb的长度)又具有高精度(>99%准确率)的测序结果。非常适合用于基因组组装。
-
-HiFi数据预处理
+1. SPAdes简介 SPAdes (St. Petersburg genome assembler) 是2012年首次开发的一个多功能工具包,用于组装和分析测序数据,并包括校错功能。
+
+SPAdes 主要针对 Illumina 测序数据开发,但也可用于 IonTorrent。 大多数 SPAdes 管道都支持二代三代reads混合组装,即允许使用长读数(PacBio 和 Oxford Nanopore)作为补充数据。
+SPAdes 软件包为分离株、单细胞细菌、元基因组和转录组数据的DNA组装提供了管道。
+附加模式允许恢复细菌质粒和 RNA 病毒,以及执行 HMM 引导的组装。
+此外,SPAdes软件包还包括辅助工具,用于高效的k-mer计数和基于k-mer的读数过滤、组装图构建和简化、序列到图的比对以及元基因组分选细化。
+
+最新的SPAdes v4.0.0版本支持NCBI的SRA文件作为输入。
+2. SPAdes安装
+下载预安装的二进制文件
+
+wget https://github.com/ablab/spades/releases/download/v4.0.0/SPAdes-4.0.0-Linux.tar.gz # 下载 tar -xzf SPAdes-4.0.0-Linux.tar.gz # 解压缩 ./SPAdes-4.0.0-Linux/bin/spades.py -h # 查看参数 ./SPAdes-4.0.0-Linux/bin/spades.py --test # 测试运行
+
+
+conda安装:conda install bioconda::spades
+
+3. SPAdes运行
+命令
-可以用bam2fasta
直接把下机数据ccs.bam或者hifi.bam转换成fasta格式文件用于后续分析。
-bam2fasta sample.ccs.bam -c 9 -o sample.ccs
命令会生成sample.ccs.fasta.gz文件,-c 9
代表压缩程度为9。
+nohup spades.py -o /path/to/output_directory/ -t 32 -1 /path/to/sample_clean_R1.fq.gz -2 /path/to/sample_clean_R2.fq.gz --careful 2>&1 > spades.log &
-用HiFi数据组装基因组的软件选择
+基本参数
+
+
+-o :指定输出文件目录
+-1, -2:指定paired-end测序文件
+–merged:指定合并的paired-end测序文件
+-s:指定single-end测序文件
+-t:指定运行线程
+-m int:设定内存的限制,单位为 Gb。如果程序使用的内存达到此值,则程序会终止运行。默认值是 250 。
+-k:kmer数,一次可以输入多个,用逗号分隔,数值从小到大排列,kmer最大为127,数值必须是奇数,一般自动选择即可,–sc参数,则默认值为 21,33,55。若没有 –sc参数,则程序会根据 reads长度自动选择 k-mer参数。
+
+
+运行模式参数
+
+
+–isolate:对于高覆盖率的分离和多细胞 Illumina 数据,强烈建议使用此参数;它能提高组装质量并缩短运行时间。 我们还建议在组装前对reads进行QC和trim。 该选项与–only-error-correction 或–careful 选项不兼容。
+–sc:对于MDA扩增单细胞(single-cell)数据使用此参数。假设覆盖范围极不均匀且存在扩增伪影。
+–meta:运行metaSPAdes模式,在组装元基因组数据集时使用此参数,同metaspades.py。 目前,metaSPAdes 只支持单个短读数文库,而且必须是成对的短读数文库(我们希望尽快取消这一限制)。 此外,您还可以提供长读数(例如使用–pacbio 或–nanopore 选项),但是元基因组的混合组装仍然是一个实验管道,无法保证最佳性能。 它不支持careful mode(不提供错配校正)。 此外,您不能为 metaSPAdes 指定覆盖率截止值。 请注意,metaSPAdes 可能对数据中残留的技术序列(比如接头序列)非常敏感,因此请对原始数据进行质量控制并对数据进行相应的预处理后再使用。
+–plasmid:运行plasmidSPAdes模式,在用WGS数据集组装质粒时用此参数,同plasmidspades.py。与单细胞模式(–sc)不兼容。不推荐在一个以上的库中运行此模式。
+–metaplasmid和–metaviral:这些参数专门用于从元基因组组装中提取染色体外的元素。 它们运行类似的管道,但在简化步骤上略有不同;一个区别是,在metaviral模式下,我们输出线性的推断的染色体外contigs,而在metaplasmid模式下,我们不输出线性的推断的染色体外contigs。 此外,对于plasmidSPAdes、metaplasmidSPAdes和metaviralSPAdes,我们建议使用viralVerify工具验证生成的contigs。
+–bio:生物合成模式。
+–rna:RNA-seq数据模式。
+–rnaviral:病毒RNA数据模式。
+–corona:启用HMM引导的冠状病毒组装模块。
+–iontorrent:IonTorrent数据模式,允许BAM格式文件作为输入。
+–sevage:SARS-CoV-2废水样本模式。
+
+
+管道运行参数
-2024年发表在Genome Research上的一篇文章 对11种针对HiFi测序技术的组装工具的评估结果显示,hifiasm 和hifiasm-meta 分别是组装真核基因组和宏基因组的最佳工具。
-文章显示,在真核生物基因组组装中,hifiasm在不同方法比较的组装基因组均具有更高的连续性、完整性和准确性;HiCanu、Verkko与LJA次之,但Verkko与LJA具有组装的contig较短等缺陷;NextDenovo仅对单倍体基因组具有更好的性能。
-宏基因组组装评估中,hifiasm-meta以及metaflye的组装错误最少,但是在面对复杂宏基因组时hifiasm-meta的完整性及连续性明显优于metaflye,但同时也会保留部分冗余的序列。
+–careful:通过运行 MismatchCorrector模块进行基因组上 mismatches和 short indels的修正。推荐使用此参数。
+–only-error-correction:仅仅执行 reads error correction 步骤
+–only-assembler:仅仅运行组装模块
+–continue:从上一次终止处继续运行程序。
+–restart-from :从指定的位置重新开始运行程序。和上一个参数相比,此参数可以用于改变一些组装参数。可选的值有:ec 从 error correction 处开始;as 从 assembly module 处开始;k 从指定的 k 值处开始;mc 从 mismatch correction 处开始;last从最后可用的check-point开始,类似–continue。
+–checkpoints :生成一些checkpoints,允许SPAdes从运行中间阶段重新开始运行。可用的mode包括none(默认),all(生成所有checkpoints),last(只在SPAdes报错时生成一个checkpoint)。
-目前来说,Hifiasm软件 是用HiFi数据组装基因组的不二选择。
-2. Hifiasm软件
-简介
+
+其他参数
-Hifiasm是一个利用PacBio HiFi数据进行从头组装基因组,获得单倍体基因组的组装工具。
-由哈佛大学李恒团队在2021年2月份开发,首次发表在Nature Methods上。2022年在Nature biotechnology上发表论文,在Hifiasm中引入了Hi-C Integrated assembly 模式。
-Hifiasm被设计用于PacBio HiFi数据组装基因组,使用在分型组装图(pahsed assembly graph)中表示单倍体信息的算法。
+–phred-offset:碱基质量格式, 33 或 64。默认自动检测。
-
-特点和优势
+
+运行时间:32个线程,34Gb Illumina paired-end clean reads,9:40-
+
+4. SPAdes输出结果
+结果文件
-运行速度很快。半天时间可以组装一个人类基因组。
-可以接受一种数据类群的多个输入文件(如多个HiFi数据文件),并且合并作为一个文件输入和多个文件输入的结果不同,建议就保持多个文件输入。
-倾向于尽量组装更长的contigs。
-能够更好地解决片段重复(segmental duplications)
-可以利用Hi-C数据或/和亲本二代Illumina测序数据获得解析良好的单倍型组装。
-也可以利用Oxford Nanopore数据获得端粒到端粒的组装。
+/corrected/:directory contains reads corrected by BayesHammer in *.fastq.gz files; if compression is disabled, reads are stored in uncompressed *.fastq files
+/scaffolds.fasta:即组装结果scaffolds文件,推荐作为结果文件或下一步分析使用。
+/contigs.fasta:即组装结果contigs文件
+/assembly_graph_with_scaffolds.gfa:contains SPAdes assembly graph and scaffolds paths in GFA 1.2 format
+/assembly_graph.fastg:contains SPAdes assembly graph in FASTG format
+/contigs.paths:contains paths in the assembly graph corresponding to contigs.fasta
+/scaffolds.paths:contains paths in the assembly graph corresponding to scaffolds.fasta
-
-Hifiasm简化了组装流程
+tips
+内存不够报错:如果默认的250Gb内存不够,会在log文件出现报错信息:
-内置了清除haplotigs之间的重复(duplications)的程序,无需第三方工具(如purge_dups)。
-组装完成后无需polish工具(如pilon,racon)进行polish。
+ERROR General (mmapped_reader.hpp : 52) mmap(2) failed. Reason: Cannot allocate memory. Error code: 12。
-3. references
-Hifiasm manual:https://hifiasm.readthedocs.io/_/downloads/en/latest/pdf/
-Hifiasm介绍:https://www.bilibili.com/read/cv18775152/
-hifiasm组装(多个cell的HiFi输入文件)的不同结果:https://mdnice.com/writing/25f5a8fe3bfe4474ae1bdcab44604da9
+
+这时,用nohup spades.py -o /path/to/output_directory/ -t 16 -m 500 --restart-from last --checkpoints last 2>&1 > spades.log &
命令重新运行,并指定500Gb内存。(不能用–continue而用–restart-from last是因为要改变参数,–continue不接受-o参数以外的其他所有参数)
+
+5. reference
+github:https://github.com/ablab/spades
+官方教程:http://ablab.github.io/spades/
@@ -13124,12 +12836,11 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
genome assembly
- Hi-C
- third generation sequencing
- TGS
- Hifiasm
- HiFi
- PacBio
+ SPAdes
+ Illumina
+ NGS
+ contig
+ scaffold
@@ -13236,8 +12947,8 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
genome assembly
- genome assembly
Hi-C
+ genome assembly
third generation sequencing
TGS
Hifiasm
@@ -13356,8 +13067,8 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
genome assembly
- genome assembly
Hi-C
+ genome assembly
third generation sequencing
TGS
Hifiasm
@@ -13618,8 +13329,8 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
genome assembly
- genome assembly
Hi-C
+ genome assembly
third generation sequencing
TGS
Hifiasm
@@ -13628,82 +13339,58 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 基因组组装和注释结果的整理
- /2021/08/10/omics_genome.management/
-
-
-
-1. 基因组整理【组装之后,注释之前】 1.1. 基因组碱基整理 基因组碱基-u修改成大写字母形式,同时建议使用-w 0把序列输出限定为一行序列。
-seqkit seq -u -w 0 genome.old.fa>genome.new.fa
-1.2. 基因组碱基小写带来的问题:
-edta运行TIR预测时,报错并中断运行。
-
-EDTA/bin/TIR-Learner2.5/Module2/RunGRF.py", line 79, in <module> if (len(str(records[0].seq))>int(length)+500): IndexError: list index out of range cp: cannot stat 'TIR-Learner/*-p': No such file or directory
+ 用Hifiasm组装基因组:(一)简介Hifiasm软件和HiFi数据
+ /2024/06/19/omics_genome.assembly_TGS_Hifiasm_01.intro/
+
-
-geta生成基因注释结果减少。 前期运行不受影响,会在geta生成的/out.tmp/6.combineGeneModels/中合并前面步骤预测结果时把许多基因预测结果识别为partial而筛除掉本为完整的基因,可看到/out.tmp/6.combineGeneModels/genome.gff3的gene数量是正常的,而out.tmp/6.combineGeneModels/genome.completed.gff3明显降低,/out.tmp/6.combineGeneModels/genome.partial.gff3明显升高。out.tmp/6.combineGeneModels/genome.filter.gff3是最后的基因注释结果,即out.gff3也相应减少。
-maker的某些运行步骤也会出错。
-
-1.3. 基因组序列ID修改 1.3.1. 排序【optional】–根据需要选择 按长度对基因组contigs进行从长到短的排序
-seqkit sort -l -r -w 0 genome.old.fa >genome.sort.fa
-1.3.2. 重命名【推荐】 最好重命名成长度一致的数字,避免后期分析遇到contig1和contig11同时被匹配的问题。
+1. HiFi数据 HiFi reads(High Fidelity reads)是2019年由PacBio公司推出的基于环化一致性序列(Circular Consensus Sequencing,CCS)模式产生的既兼顾长读长(10-20kb的长度)又具有高精度(>99%准确率)的测序结果。非常适合用于基因组组装。
-solution A【速度最快,推荐】 序列IDs按顺序命名为1-n的数字,–nr-width可以设置数字的长度,长度为5时第一条序列名称为00001。
+HiFi数据预处理
-seqkit replace -p '.*' -r {nr} --nr-width 5 genome.sort.fa
+
+可以用bam2fasta
直接把下机数据ccs.bam或者hifi.bam转换成fasta格式文件用于后续分析。
+bam2fasta sample.ccs.bam -c 9 -o sample.ccs
命令会生成sample.ccs.fasta.gz文件,-c 9
代表压缩程度为9。
+
-solution B 把序列id重命名成1-n的数字
-
-awk 'BEGIN{i=0 ; FS="," ; OFS=","}{ if(/>/){gsub($1,">"++i,$1);print $0}else{print $0}}' genome.sort.fa>genome.fa
-基因组的序列id改为scaf001的形式
-sed -i "s/>/>scaf/g" genome.fa
-
-solution C 把基因组序列id的数字1-100改成0001-0100这种数字位数相同的格式。这个没有solution A快,只推荐在不想做大规模更改的情况下使用。
+用HiFi数据组装基因组的软件选择
-用下面脚本实现:
-#!/bin/bash j=1 for i in `seq -w 1 0100` #把相同数字位数的0001-0100依次赋值给变量i do sed -i -E -e "s/scaffold$j$/scaffold_$i/g" -e "s/scaffold$j([^0-9])/scaffold_$i\1/g" species.fa #两次替换,第一次替换scaffold$j为行尾的字符串(比如在基因组序列文件中),第二次替换scaffold$j不为行尾的字符串,[^0-9]代表不为数字的任意一个字符,\1代表替换前括号([^0-9])中的内容。 sed -i -E -e "s/scaffold$j$/scaffold_$i/g" -e "s/scaffold$j([^0-9])/scaffold_$i\1/g" species.gff #同上,替换其他文件,比如gff文件。 j=$(($j+1)) #把1-100依次赋值给变量j done
-
-2. 基因组注释整理【注释结果整理】 GFF3toolkit【推荐】 推荐使用GFF3toolkit来进行gff3注释文件的整理,具体介绍参考博客GFF3toolkit blog 。
-GFF3toolkit包含许多模块:
-gff3_QC:检测gff3格式错误
-gff3_fix:修正gff3格式错误
-gff3_merge:合并两个gff3文件
-gff3_sort:根据scaffold,coordinates坐标来排序gff3文件
-gff3_to_fasta:根据基因组fasta和注释gff生成gene/cds/protein/exon等序列
+2024年发表在Genome Research上的一篇文章 对11种针对HiFi测序技术的组装工具的评估结果显示,hifiasm 和hifiasm-meta 分别是组装真核基因组和宏基因组的最佳工具。
+文章显示,在真核生物基因组组装中,hifiasm在不同方法比较的组装基因组均具有更高的连续性、完整性和准确性;HiCanu、Verkko与LJA次之,但Verkko与LJA具有组装的contig较短等缺陷;NextDenovo仅对单倍体基因组具有更好的性能。
+宏基因组组装评估中,hifiasm-meta以及metaflye的组装错误最少,但是在面对复杂宏基因组时hifiasm-meta的完整性及连续性明显优于metaflye,但同时也会保留部分冗余的序列。
-2.1. 合并多个注释结果 基因组的基因结构注释,如果使用了多款软件进行,想要合并多套注释结果,并让注释的基因根据染色体和位置信息排序,可参考这个办法。
-合并两个基因注释文件(若是多个就依次合并)
-
-输出A.gff中符合要求的行,即A.gff中与B.gff中位置有overlap的行。bedtools intersect -a A.gff -b B.gff -wa >A.dup.gff
-
-输出只在A.gff存在的行,即把A.dup.gff从A.gff中删除,需要两个文件都已排序,若未排序先sort排序再处理。comm -1 A.gff A.dup.gff >A.filter.gff
-
-合并B.gff和A.gff中与B.gff不重复的部分。cat B.gff A.filter.gff >sample.gff
-
+目前来说,Hifiasm软件 是用HiFi数据组装基因组的不二选择。
+2. Hifiasm软件
+简介
-2.2. 重命名注释结果【可选】 根据需要选择【非必要的】,根据染色体位置顺序对注释的基因结果进行排序和重命名整理。 除了基因注释外,不同分析源都可能发现新的基因,增加注释的基因数量,从而打乱顺序。
-2.2.1. 排序
-把sample.gff3中gene替换成1gene,mRNA替换成2mRNA,exon替换成3exon,CDS替换成4CDS;目的是确保排序后单个基因内部的顺序是1-2-3-4。sed -i -e "s/gene/1gene/g" -e "s/mRNA/2mRNA/g" -e "s/exon/3exon/g" -e "s/CDS/4CDS/g" sample.gff3
-根据染色体位置排序。按照第一列第四个字符,第四列数值,第五列数值逆序依次排序。cat sample.gff3 |sort -k 1.4n -k 4n -k 5nr >sample.sort.gff3
-获得的sample.sort.gff3文件再1gene替换成gene,234类似替换。sed -i -e "s/1gene/gene/g" -e "s/2mRNA/mRNA/g" -e "s/3exon/exon/g" -e "s/4CDS/CDS/g" sample.sort.gff3
+
+Hifiasm是一个利用PacBio HiFi数据进行从头组装基因组,获得单倍体基因组的组装工具。
+由哈佛大学李恒团队在2021年2月份开发,首次发表在Nature Methods上。2022年在Nature biotechnology上发表论文,在Hifiasm中引入了Hi-C Integrated assembly 模式。
+Hifiasm被设计用于PacBio HiFi数据组装基因组,使用在分型组装图(pahsed assembly graph)中表示单倍体信息的算法。
+
+
+特点和优势
-2.2.2. 重命名
-复制一份注释文件用于修改和替换cp sample.sort.gff3 sample.new.gff3
-获取旧ID的list。获取sample.sort.gff3第九列中的ID值。cat sample.new.gff3 | awk '$3=="gene" {print $9}'|sed -e "s/;.*//g" -e "s/ID=//g" >old.name
-获取新ID的list。for i in $(seq -w 1
cat old.name|wc -l); do echo scaf$i; done >new.name
-合并旧的和新的ID。paste -d "/" old.name new.name > old2new.name
-生成替换脚本old2new.sh。sed -e "s/^/sed -i \"s\//g" -e "s/$/\/g sample.new.gff3/g\"" old2new.name >old2new.sh
-运行替换脚本,会直接替换sample.new.gff3文件的旧ID为新ID,可能会运行较长时间。sh old2new.sh
+
+运行速度很快。半天时间可以组装一个人类基因组。
+可以接受一种数据类群的多个输入文件(如多个HiFi数据文件),并且合并作为一个文件输入和多个文件输入的结果不同,建议就保持多个文件输入。
+倾向于尽量组装更长的contigs。
+能够更好地解决片段重复(segmental duplications)
+可以利用Hi-C数据或/和亲本二代Illumina测序数据获得解析良好的单倍型组装。
+也可以利用Oxford Nanopore数据获得端粒到端粒的组装。
+
+
+Hifiasm简化了组装流程
-ps:这部分代码可实现,但是是非常冗余的代码量(水平有限),且未必适用所有注释文件,谨慎参考。
-2.3. 从注释文件提取序列 用gffread根据注释文件从基因组提取基因序列:
-从基因组genome.fa和注释文件sample.gff3获取cds序列gffread -x sample.cds.fa -g genome.fa sample.gff3
-从基因组genome.fa和注释文件sample.gff3获取exon序列gffread -w sample.exon.fa -g genome.fa sample.gff3
-从基因组genome.fa和注释文件sample.gff3获取protein序列gffread -y sample.protein.fa -g genome.fa sample.gff3
+内置了清除haplotigs之间的重复(duplications)的程序,无需第三方工具(如purge_dups)。
+组装完成后无需polish工具(如pilon,racon)进行polish。
-2.4. 从注释文件提取intron信息 脚本extract_intron_info.pl
+3. references
+Hifiasm manual:https://hifiasm.readthedocs.io/_/downloads/en/latest/pdf/
+Hifiasm介绍:https://www.bilibili.com/read/cv18775152/
+hifiasm组装(多个cell的HiFi输入文件)的不同结果:https://mdnice.com/writing/25f5a8fe3bfe4474ae1bdcab44604da9
+
欢迎关注微信公众号:生信技工
@@ -13713,14 +13400,16 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
omics
genome
+ genome assembly
- genome
- genome annotation
- sort
- rename
- combine
- extract
+ Hi-C
+ genome assembly
+ third generation sequencing
+ TGS
+ Hifiasm
+ HiFi
+ PacBio
@@ -13738,7 +13427,7 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
去掉质量较低的reads
去掉被细菌或其他生物污染产生的reads
-
+
进行质控过滤低质量reads后的序列通常被称为clean reads。
2. NCBI下载二代数据raw reads和预处理 如果是使用NCBI等公共数据库的raw reads数据,则需要先下载SRA格式文件和转换为fastq格式文件。
@@ -13780,9 +13469,9 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
SRA Toolkit的命令
-SRA Toolkit包括下载SRA数据的命令prefetch
,将SRA格式的数据转换为FASTQ格式的命令fastq-dump
,fasterq-dump
,检索SRA数据文件中的元数据的vdb-dump
,将SRA文件直接转换为SAM格式(如果记录在数据库中有对映/SAM信息)的sam-dump
。2.3. 下载SRA文件和转换格式 2.3.1. 查找SRR编号
+SRA Toolkit包括下载SRA数据的命令prefetch
,将SRA格式的数据转换为FASTQ格式的命令fastq-dump
,fasterq-dump
,检索SRA数据文件中的元数据的vdb-dump
,将SRA文件直接转换为SAM格式(如果记录在数据库中有对映/SAM信息)的sam-dump
。
-
+2.3. 下载SRA文件和转换格式 2.3.1. 查找SRR编号
在NCBI网站 https://www.ncbi.nlm.nih.gov/sra 搜索物种名等信息,获取SRR编号;
选择多个搜索结果,然后Send to-File-RunInfo下载SraRunInfo.csv表格文件,里面有非常完整的上传人填写的测序相关信息,包括SRA Lite格式的download_path;
选择多个搜索结果,然后Send to-File-Acdession List下载SraAccList.csv表格文件。
@@ -13794,6 +13483,7 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
先在NCBI查询需要下载的数据的SRR编号,再使用编号信息下载SRA文件:prefetch SRR1234567 SRR7654321
命令会下载SRA Normalized格式文件,支持多个SRR编号参数,依次下载。
多个SRA数据下载,也可以把SRR编号保存在文件中,一个编号一行(同SraAccList.csv表格文件)。然后用–option-file参数指定保存了编号的文件,来依次下载多个SRA数据:prefetch --option-file SraAccList.csv
+为每个数据生成SRR编号命名的文件夹,里面只有一个以SRR1234567.sra命名的文件。
其他参数:
-X|–max-size: 设置最大下载文件大小,默认20G。
-p|–progress: 显示下载进度。
@@ -13806,6 +13496,7 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
复制下载网址之后用wget下载:wget -c http:url
+下载完成后,如果是SRA Normalized格式,则生成SRR1234567文件;如果是SRA Lite格式,则生成SRR1234567.lite.1文件。
2.3.3. SRA格式转为fastq格式 SRA Toolkit有两个命令可以将SRA格式转为fastq格式:fastq-dump和fasterq-dump。
区别主要是:
@@ -13831,8 +13522,8 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
fasterq-dump
--fasterq-dump --split-3 ./SRR1234567 -p -e 12
+3.2.3. FastQC 获取clean reads的质量报告 FastQC 获取clean reads的质量报告,可以与raw reads的报告对比着看。
+
time fastqc sample_clean.R1.fq.gz -t 8 -o sample_clean
time fastqc sample_clean.R2.fq.gz -t 8 -o sample_clean
4. 去除重复序列(cleanreads2uniqreads) 4.1. 去重操作的背景
测序过程中(二代测序主要是PCR环节引入)可能带来重复片段Duplication,通常重复片段占比<15%。Duplication占比问题的解释
去重一般操作比对到基因组上并排序完成的bam文件,利用基因组的位置信息进行去重,效率较高。
-若没有参考基因组的情况,比如genome survey分析前的数据预处理,可以直接对clean reads进行去重 。4.2. Fastuniq去重操作
+若没有参考基因组的情况,比如genome survey分析前的数据预处理,可以直接对clean reads进行去重 。
+
+4.2. Fastuniq去重操作
命令
realpath sample_1.clean.fq sample_2.clean.fq >input.txt time fastuniq -i input.txt -o sample_1.fastuniq.clean.fq -p sample_2.fastuniq.clean.fq -t q
@@ -13984,11 +13683,11 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
genome survey
fastq
+ NGS
quality control
QC
genome sequencing
next generation sequencing
- NGS
NCBI
SRA
SRA Toolkit
@@ -14003,79 +13702,157 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 三代基因组测序PacBio CLR和CCS模式下机数据的预处理
- /2024/06/04/omics_genome.sequencing_TGS_data.preprocessing/
-
+ 服务器的硬件和开机流程的简介,以及BIOS和磁盘阵列控制器的设置
+ /2023/04/19/linux_operation.and.maintenance_RAID.Controller.Card/
+
-1. SMRT测序模式 PacBio sequel II平台支持CLR(Continuous Long Reads)和CCS(Circular Consensus Sequencing)两种测序模式。 (sequel平台好像只支持CLR模式)
-
-CLR模式适用超长插入片段文库(>20kb),存储有效数据的文件一般命名为* .subreads.bam。对subreads不再进行后续处理。
-CCS模式则适用于普通长度插入片段文库(1-20kb),存储数据的* .subreads.bam文件(subreads )需要一致性校正后生成CCS reads或HiFi reads用于下游分析。
+1. 服务器介绍 1.1. 课题组的16服务器硬件介绍
+服务器:惠普HPE_ProLiant_DL580_Gen9
-2. CLR模式
-CLR模式下机数据
+
+
+HPE_ProLiant_DL580_Gen9_Server_按钮和指示灯
+
+服务器内部能看到外装的Dell的LSI MegaRaid SAS Controller磁盘阵列控制卡(RAID Controller)和USB3.0扩展卡(USB3.0 Extender)。
+两个外装设备都可拆卸。先按蓝色零件开启固定挡板,使固定挡板弹开,即可把RAID Controller和USB3.0 Extender拔出。装回两张卡后,把固定挡板盖上,并按紧(要同时按服务器后面)直到咔的一声表明固定挡板开关关上。
+
+
+
+HPE_ProLiant_DL580_Gen9_Server_服务器内部
+
+
+HPE_ProLiant_DL580_Gen9_Server_顶盖说明书
+
+磁盘阵列(RAID):戴尔 Dell_PowerVault_MD1200
+
+
+
+RAID_Dell_PowerVault_MD1200
+
+磁盘阵列控制卡:服务器自带的Smart Array P830i Controller
+磁盘阵列控制卡(RAID Controller):外装的Dell的LSI MegaRaid SAS Controller(用来连接服务器和磁盘阵列)
+
+
+SAS线(连接磁盘阵列和服务器的数据传输线)两端接口一样。
+16服务器的磁盘阵列有两根,服务器上面的接口接磁盘阵列上面的接口,服务器下面的接口接磁盘阵列下面的接口,不能混接。
+如果SAS线在服务器连接处的右边,每根SAS线对应亮黄灯,则表明磁盘阵列卡是正常工作连接的。
+磁盘阵列卡可以取出,先关机并拔除SAS线,然后打开服务器的顶盖,在右上方插着磁盘阵列卡和USB3.0外接卡。需要先按左上方的蓝色按钮打开固定挡板(参考服务器内部的图片),使得固定阵列卡和USB3.0外接卡的开关打开,才能取出两张卡。装回两张卡后,把固定挡板盖上,并按紧(要同时按服务器后面)直到咔的一声表明开关关上。
+
+
+USB3.0扩展卡
+
+
+USB3.0扩展卡比磁盘阵列卡小,用于连接移动硬盘等外部存储设备。
+20230417开机故障把16服务器的USB3.0外接卡移除了,避免它导致服务器降级影响开机。
+
+
+
+USB3.0扩展卡1
+
+
+USB3.0扩展卡2
+1.2. 课题组的16服务器软件介绍
+内核
-*subreads.bam是以bam格式存储CLR测序数据的下机原始数据。
-因为每条插入片段只测了一次,不需要进行reads的一致性校正,生成consenses reads这一步骤(Pacbio CCS模式生成的subreads则需要合并生成CCS reads才能用于下游分析)。
+内核版本号 kernel 4.18.0-147.el8.x86_64,其他版本与磁盘阵列驱动不匹配,会导致无法识别磁盘阵列。开机时需要选择内核版本,默认是最新的4.18.0-240版本。
+uname -a
可以查看内核版本
+2. 操作 2.1. 正常开机界面 开机后进行初始化和自检,依次显示如下界面。
+
+开机过程1EarlyProcessorInitialization
+
+
+
+开机过程1EarlyProcessorInitialization
-CLR模式数据文件命名规则
+开机过程2BIOS_Boot
-文件名:P01TYD19110566-1_r64031_20191018_094227_2_B01.subreads.bam的含义
-P01TYD19110566-1:文库号,即library ID。
-r64031_20191018_094227:样本所在run的ID号码,编号唯一,格式为”r机器号_日期_时间”。
-2_B01:cell编号。
+在这一步可以通过F9进入System Utilities,F10进入Intelligent Provisioning,F11进入Boot Menu,F12进入Network Boot
+
+
+开机过程2BIOS_Boot1
+
+如果按下F9,屏幕上会对应亮起,需等待检测完毕自动进入Boot界面
+
+开机过程2BIOS_Boot2
-CLR模式数据预处理
+正常开机
-CLR的subreads没有单碱基质量数据,所以bam文件转化为fa文件即可(而不必转为fq文件)。
-可以用bam2fasta
直接把*subreads.bam转换成fasta格式文件用于后续分析。bam2fasta sample.subreads.bam -c 9 -o sample.subreads
命令会生成sample.subreads.fasta.gz文件,-c 9
代表压缩程度为9。
+如果开机后不进行任何操作,正常开机最后会进入等待登录的命令行界面或图形界面,这时正常开机结束,就可以远程登录啦。
-3. CCS模式
-CCS模式下机数据
+2.2. 更改启动模式 16服务器默认是UEFI Mode启动。如果服务器开机故障,可以尝试在BIOS Mode下启动以做检测或更改设置。
+
+开机
+经过EarlyProcessorInitialization页面,到BIOS Boot页面时,按下F9,等待系统自动进入System Utilities界面。在这个界面可以进行许多系统的设置。
+
+
+
+F9_SystemUtilities
+
+更改启动模式。依次选择System Configuration-BIOS/Platform Configuration(RBSU)-Boot Options-Boot Mode。Boot Mode代表服务器使用什么模式启动。然后从UEFI Mode转变成Legacy BIOS Mode模式。
+
+
+
+BIOSmode_RBSU_BootMode
+
+还可以更改自动开机设置。依次选择System Configuration-BIOS/Platform Configuration(RBSU)-Server Availability-Automatic Power-On。这里的Always Power On/Off是代表通电后总是自动开机/关机,Restore Last Power State代表通电后使用上次的开机/关机状态来决定是否开机。
+
+
+
+BIOSmode_RBSU_ServerAvailability
+
+F10保存所有设置后,Ctrl+Alt+Delete重启服务器,这次是以Legacy BIOS Mode模式启动了。
+
+2.3. RAID控制卡的设置
+RAID控制卡的设置需要在Legacy BIOS Mode模式下启动服务器,参考上面一节操作。
+Legacy BIOS Mode模式启动服务器的前面的初始化和自检过程一样,先开机过程1EarlyProcessorInitialization,再开机过程2BIOS_Boot,第二个页面只有Boot Mode这一行内容不一样,别的都一样。
+然后进入下面的页面,Booting in legacy BIOS mode,出现Expandable RAID Controller BIOS时按下ctrl+R进入RAID控制卡设置界面(ps:出现的时间很短,需要尽快按下ctrl+R)。
+
+
+
+开机过程3Bootmode
+
+磁盘阵列控制卡(RAID Controller)设置界面
-拿到PacBio CCS模式测序数据时,例如下载公共数据尤其是早期数据时,一定要弄清楚是subreads,还是HiFi reads。
-对于近期从测序服务商那里得到的数据一般都是运行完CCS软件后的HiFi reads。(文件为下机的ccs.bam或者hifi_reads.bam),可直接用于下游分析。
-需要注意的是,如果拿到的是subreads.bam数据,则subreads数据需要通过一致性校正后(intra-molecular consensus),得到一条唯一的read,称为CCS read ,再用于下游分析。这个校正过程会显著提升测序准确率。
+在这个界面可以更改RAID控制卡的设置
-
-CCS模式数据的几种类型reads
-
+
+
+RAID设置1VirtualDiskManagement
-polymerase reads:对环状的SMRTbell文库分子测序得到的reads,可能多次读取环状分子。(保存在zmws.bam文件)
-subreads:从polymerase reads序列中去掉哑铃状的测序接头序列,可以得到多条subreads序列。(保存在subreads.bam文件,被废弃的adapter和低质量序列保存在scraps.bam文件)
-CCS reads:环状一致性序列,从一个polymerase reads上的多条subreads序列,进行一致性校正得到的一条准确率更高的序列。(保存在CCS.bam文件)
-HiFi reads (High fidelity reads):质量值大于Q20的CCS reads,即为HiFi reads。(保存在hifi_reads.bam文件)
+空格键可以显示RAID硬盘的详细参数
-
+
-Figure 1. CCS reads处理,图片来源: https://cehs.mit.edu/pacific-biosciences-sequel
-
-一致性校正(subreads to CCS reads)
-
+RAID设置1VirtualDiskManagementDetails
-如果拿到的是subreads数据,则需要进行一致性校正,把数据转化为CCS reads。
-PacBio官方smrtlink软件中的CCS工具可将subrads.bam转换为ccs.bam,命令如下:ccs *.subreads.bam *.ccs.bam
。
-分割文件并行转换可以加速,下面代码示例为分成10份运行::
+Tab键在不同的标签页之间转换,在Controller Management标签页可以进行控制卡的管理。空格键可以在是否选中高亮的选项之间转换。改变设置之后要APPLY使其生效。
-ccs *.subreads.bam *.ccs.1.bam --chunk 1/10 -j <THREADS> ccs *.subreads.bam *.ccs.2.bam --chunk 2/10 -j <THREADS> ... ccs *.subreads.bam *.ccs.10.bam --chunk 10/10 -j <THREADS> pbmerge -o *.ccs.bam movie.ccs.*.bam
+
-
-CCS模式数据预处理
+RAID设置2ControllerManagement
+
+Enable BIOS Stop on Error选项的解释
-使用CCS read或HiFi reads(通常做一致性校正后reads质量都大于Q20,所以CCS reads就是HiFi reads)可以进行下游分析,有时下游分析需要fa格式。
-CCS reads没有单碱基质量数据,所以bam文件转化为fa文件即可(而不必转为fq文件)。
-可以用bam2fasta
直接把*ccs.bam转换成fasta格式文件用于后续分析。bam2fasta sample.ccs.bam -c 9 -o sample.ccs
命令会生成sample.ccs.fasta.gz文件,-c 9
代表压缩程度为9。
+上图中Settings里的Enable BIOS Stop on Error默认是选上的(前面有X符号)。
+选上Enable BIOS Stop on Error这个选项代表如果开机时有报错信息就让BIOS停止工作(BIOS停止工作意味着无法正常开机),这个时候如果硬盘或者硬盘的扇区出现问题,或者其他任何硬件出现问题,系统发生降级,RAID控制卡会记录这次降级,并认定为Error信息,从而停止BIOS工作,导致无法正常开机。
+如果不选这个选项,发生系统降级导致Error信息也不会停止BIOS工作。
-references
-一致性校正:https://freewechat.com/a/MzA3MjM5NTE4Mg==/2247483719/1
-CCS模式测序:https://cloud.tencent.com/developer/article/2346853
+
+可能的开机故障处理方案,去除Enable BIOS Stop on Error设置。
+
+
+开机故障:前段时间(2023/04/17)服务器停电关机后开机出现故障,在开机过程2BIOS_Boot这个页面的Power and Thermal Calibration这一步时,屏幕转入无信号页面并一直保持在无信号页面,服务器不断尝试重启(声音变大变小,无限循环)。ctrl+alt+delete命令重启无效,长按电源键强制重启后服务器的健康监测灯变成红色,有时UID灯也亮起。
+解决方案就是把Enable BIOS Stop on Error设置改为不选中,就顺利开机了。
+
+
+设置完毕,应用之后Ctrl+Alt+Delete重启,F9进入BIOS界面修改BIOS Mode回UEFI Mode启动,再重启即可。
@@ -14084,25 +13861,17 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
- omics
- genome
- genome sequencing
- third generation sequencing
+ linux
+ operation and maintenance
- fasta
- third generation sequencing
- TGS
- PacBio
- genome sequencing
- data preprocessing
- long read sequencing
- continuous long reads
- CLR
- circular consensus sequencing
- CCS
- SMRT
- subreads
+ server
+ hardware
+ RAID
+ RAID Controller
+ BIOS
+ Boot Mode
+ USB3.0 Extender
@@ -14234,21 +14003,21 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
fasta
fastq
+ NGS
third generation sequencing
TGS
PacBio
genome sequencing
next generation sequencing
- NGS
+ sanger sequencing
long read sequencing
continuous long reads
CLR
circular consensus sequencing
CCS
SMRT
- subreads
- sanger sequencing
Nanopore
+ subreads
@@ -14644,46 +14413,143 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
-4.2. jellyfish+Smudgeplot 用jellyfish代替KMC
+4.2. jellyfish+Smudgeplot 用jellyfish代替KMC
+
+用jellyfish计算k-mer频率,生成k-mer频率表
+jellyfish count -C -m 21 -s 1000000000 -t 8 *.fastq -o kmer_counts.jf jellyfish histo kmer_counts.jf > kmer_k21.hist
+
+提取阈值范围的k-mers,计算k-mer pairs
+L=$(smudgeplot.py cutoff kmer_k21.hist L) U=$(smudgeplot.py cutoff kmer_k21.hist U) echo $L $U jellyfish dump -c -L $L -U $U kmer_counts.jf | smudgeplot.py hetkmers -o kmer_pairs # note that if you would like use --middle flag, you would have to sort the jellyfish dump first
+
+生成smudgeplot污热度图
+smudgeplot.py plot kmer_pairs_coverages_2.tsv -o my_genome
+
+4.3. Smudgeplot结果
+热度图
+
+
+热度图,横坐标是相对覆盖度 (CovB / (CovA + CovB)) ,纵坐标是总覆盖度 (CovA + CovB) ,颜色是k-mer对的频率。
+每个单倍型结构都在图上呈现一个”污点(smudge)”,污点的热度表示单倍型结构在基因组中出现的频率,频率最高的单倍型结构即为预测的物种倍性结果。(比如这个图提供了三倍体的证据,AAB的频率最高)
+
+
+
+Figure 5. Smudgeplot热度图。 图片来源: Smudgeplot github
+
+smudgeplot_verbose_summary.txt
+
+
+文件中可以提取预测的最终倍性结果:“* Proposed ploidy: 2”
+
+5. KMC/jellyfish结果用于GenomeScope进行基因组调查
+通过KMC/jellyfish获得的频数分布表结果kmcdb_k21.hist可用于GenomeScope进行基因组调查
+
+Rscript genomescope.R kmcdb_k21.hist <k-mer_length> <read_length> <output_dir> [kmer_max] [verbose]
+6. 批量运行脚本 如果样品数量非常多,可以用脚本自动遍历每个样品来运行。
+把样品名称整理成样品列表(sample.list),修改下面脚本中的/path/to/data/为数据所在路径,即可运行。
+for i in sample.list do mkdir $i cd $i mkdir tmp # 运行KMC,获得频数分布表sample_k21.hist ls /path/to/data/$i* > FILES kmc -k21 -t8 -m64 -ci1 -cs10000 @FILES $i tmp kmc_tools transform $i histogram "$i"_k21.hist -cx10000 rm -rf tmp # 运行genomescope2.0,估计基因组特征(默认是二倍体-p 2) genomescope.R -i "$i"_k21.hist -o ./ -k 21 -n "$i"_genomescope -p 2 >"$i"_genomescope.log 2>&1 & # 运行smudgeplot,估计 L=$(smudgeplot.py cutoff "${i}"_k21.hist L) U=$(smudgeplot.py cutoff "${i}"_k21.hist U) echo $L $U kmc_tools transform $i -ci"$L" -cx"$U" dump -s "$i"_L"$L"_U"$U".dump smudgeplot.py hetkmers -o "$i"_L"$L"_U"$U" < "$i"_L"$L"_U"$U".dump # 耗时步骤,约1h smudgeplot.py plot "$i"_L"$L"_U"$U"_coverages.tsv -o $i -t $i cd .. done
+
+7. references
+GenomeScope 2.0 + Smudgeplot paper:https://www.nature.com/articles/s41467-020-14998-3
+Smudgeplot github:https://github.com/KamilSJaron/smudgeplot
+genomescope2.0 github:https://github.com/tbenavi1/genomescope2.0
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ omics
+ genome
+ genome survey
+
+
+ genome survey
+ genome
+ k-mer
+ KMC
+ GenomeScope
+ Smudgeplot
+
+
+
+ 基因组组装和注释结果的整理
+ /2021/08/10/omics_genome.management/
+
+
+
+1. 基因组整理【组装之后,注释之前】 1.1. 基因组碱基整理 基因组碱基-u修改成大写字母形式,同时建议使用-w 0把序列输出限定为一行序列。
+seqkit seq -u -w 0 genome.old.fa>genome.new.fa
+1.2. 基因组碱基小写带来的问题:
+edta运行TIR预测时,报错并中断运行。
+
+EDTA/bin/TIR-Learner2.5/Module2/RunGRF.py", line 79, in <module> if (len(str(records[0].seq))>int(length)+500): IndexError: list index out of range cp: cannot stat 'TIR-Learner/*-p': No such file or directory
+
+
+geta生成基因注释结果减少。 前期运行不受影响,会在geta生成的/out.tmp/6.combineGeneModels/中合并前面步骤预测结果时把许多基因预测结果识别为partial而筛除掉本为完整的基因,可看到/out.tmp/6.combineGeneModels/genome.gff3的gene数量是正常的,而out.tmp/6.combineGeneModels/genome.completed.gff3明显降低,/out.tmp/6.combineGeneModels/genome.partial.gff3明显升高。out.tmp/6.combineGeneModels/genome.filter.gff3是最后的基因注释结果,即out.gff3也相应减少。
+maker的某些运行步骤也会出错。
+
+1.3. 基因组序列ID修改 1.3.1. 排序【optional】–根据需要选择 按长度对基因组contigs进行从长到短的排序
+seqkit sort -l -r -w 0 genome.old.fa >genome.sort.fa
+1.3.2. 重命名【推荐】 最好重命名成长度一致的数字,避免后期分析遇到contig1和contig11同时被匹配的问题。
+
+solution A【速度最快,推荐】 序列IDs按顺序命名为1-n的数字,–nr-width可以设置数字的长度,长度为5时第一条序列名称为00001。
+
+seqkit replace -p '.*' -r {nr} --nr-width 5 genome.sort.fa
+
+solution B 把序列id重命名成1-n的数字
+
+awk 'BEGIN{i=0 ; FS="," ; OFS=","}{ if(/>/){gsub($1,">"++i,$1);print $0}else{print $0}}' genome.sort.fa>genome.fa
+基因组的序列id改为scaf001的形式
+sed -i "s/>/>scaf/g" genome.fa
+
+solution C 把基因组序列id的数字1-100改成0001-0100这种数字位数相同的格式。这个没有solution A快,只推荐在不想做大规模更改的情况下使用。
+
+用下面脚本实现:
+#!/bin/bash j=1 for i in `seq -w 1 0100` #把相同数字位数的0001-0100依次赋值给变量i do sed -i -E -e "s/scaffold$j$/scaffold_$i/g" -e "s/scaffold$j([^0-9])/scaffold_$i\1/g" species.fa #两次替换,第一次替换scaffold$j为行尾的字符串(比如在基因组序列文件中),第二次替换scaffold$j不为行尾的字符串,[^0-9]代表不为数字的任意一个字符,\1代表替换前括号([^0-9])中的内容。 sed -i -E -e "s/scaffold$j$/scaffold_$i/g" -e "s/scaffold$j([^0-9])/scaffold_$i\1/g" species.gff #同上,替换其他文件,比如gff文件。 j=$(($j+1)) #把1-100依次赋值给变量j done
+
+2. 基因组注释整理【注释结果整理】 GFF3toolkit【推荐】 推荐使用GFF3toolkit来进行gff3注释文件的整理,具体介绍参考博客GFF3toolkit blog 。
+GFF3toolkit包含许多模块:
+
+gff3_QC:检测gff3格式错误
+gff3_fix:修正gff3格式错误
+gff3_merge:合并两个gff3文件
+gff3_sort:根据scaffold,coordinates坐标来排序gff3文件
+gff3_to_fasta:根据基因组fasta和注释gff生成gene/cds/protein/exon等序列
+
+2.1. 合并多个注释结果 基因组的基因结构注释,如果使用了多款软件进行,想要合并多套注释结果,并让注释的基因根据染色体和位置信息排序,可参考这个办法。
+合并两个基因注释文件(若是多个就依次合并)
-用jellyfish计算k-mer频率,生成k-mer频率表
-jellyfish count -C -m 21 -s 1000000000 -t 8 *.fastq -o kmer_counts.jf jellyfish histo kmer_counts.jf > kmer_k21.hist
+输出A.gff中符合要求的行,即A.gff中与B.gff中位置有overlap的行。bedtools intersect -a A.gff -b B.gff -wa >A.dup.gff
-提取阈值范围的k-mers,计算k-mer pairs
-L=$(smudgeplot.py cutoff kmer_k21.hist L) U=$(smudgeplot.py cutoff kmer_k21.hist U) echo $L $U jellyfish dump -c -L $L -U $U kmer_counts.jf | smudgeplot.py hetkmers -o kmer_pairs # note that if you would like use --middle flag, you would have to sort the jellyfish dump first
+输出只在A.gff存在的行,即把A.dup.gff从A.gff中删除,需要两个文件都已排序,若未排序先sort排序再处理。comm -1 A.gff A.dup.gff >A.filter.gff
+
+合并B.gff和A.gff中与B.gff不重复的部分。cat B.gff A.filter.gff >sample.gff
-生成smudgeplot污热度图
-smudgeplot.py plot kmer_pairs_coverages_2.tsv -o my_genome
-4.3. Smudgeplot结果
-热度图
+2.2. 重命名注释结果【可选】 根据需要选择【非必要的】,根据染色体位置顺序对注释的基因结果进行排序和重命名整理。 除了基因注释外,不同分析源都可能发现新的基因,增加注释的基因数量,从而打乱顺序。
+2.2.1. 排序
+把sample.gff3中gene替换成1gene,mRNA替换成2mRNA,exon替换成3exon,CDS替换成4CDS;目的是确保排序后单个基因内部的顺序是1-2-3-4。sed -i -e "s/gene/1gene/g" -e "s/mRNA/2mRNA/g" -e "s/exon/3exon/g" -e "s/CDS/4CDS/g" sample.gff3
+根据染色体位置排序。按照第一列第四个字符,第四列数值,第五列数值逆序依次排序。cat sample.gff3 |sort -k 1.4n -k 4n -k 5nr >sample.sort.gff3
+获得的sample.sort.gff3文件再1gene替换成gene,234类似替换。sed -i -e "s/1gene/gene/g" -e "s/2mRNA/mRNA/g" -e "s/3exon/exon/g" -e "s/4CDS/CDS/g" sample.sort.gff3
-
-热度图,横坐标是相对覆盖度 (CovB / (CovA + CovB)) ,纵坐标是总覆盖度 (CovA + CovB) ,颜色是k-mer对的频率。
-每个单倍型结构都在图上呈现一个”污点(smudge)”,污点的热度表示单倍型结构在基因组中出现的频率,频率最高的单倍型结构即为预测的物种倍性结果。(比如这个图提供了三倍体的证据,AAB的频率最高)
-
-
-
-Figure 5. Smudgeplot热度图。 图片来源: Smudgeplot github
-
-smudgeplot_verbose_summary.txt
+2.2.2. 重命名
+复制一份注释文件用于修改和替换cp sample.sort.gff3 sample.new.gff3
+获取旧ID的list。获取sample.sort.gff3第九列中的ID值。cat sample.new.gff3 | awk '$3=="gene" {print $9}'|sed -e "s/;.*//g" -e "s/ID=//g" >old.name
+获取新ID的list。for i in $(seq -w 1
cat old.name|wc -l); do echo scaf$i; done >new.name
+合并旧的和新的ID。paste -d "/" old.name new.name > old2new.name
+生成替换脚本old2new.sh。sed -e "s/^/sed -i \"s\//g" -e "s/$/\/g sample.new.gff3/g\"" old2new.name >old2new.sh
+运行替换脚本,会直接替换sample.new.gff3文件的旧ID为新ID,可能会运行较长时间。sh old2new.sh
+ps:这部分代码可实现,但是是非常冗余的代码量(水平有限),且未必适用所有注释文件,谨慎参考。
+2.3. 从注释文件提取序列 用gffread根据注释文件从基因组提取基因序列:
-文件中可以提取预测的最终倍性结果:“* Proposed ploidy: 2”
-
-5. KMC/jellyfish结果用于GenomeScope进行基因组调查
-通过KMC/jellyfish获得的频数分布表结果kmcdb_k21.hist可用于GenomeScope进行基因组调查
+从基因组genome.fa和注释文件sample.gff3获取cds序列gffread -x sample.cds.fa -g genome.fa sample.gff3
+从基因组genome.fa和注释文件sample.gff3获取exon序列gffread -w sample.exon.fa -g genome.fa sample.gff3
+从基因组genome.fa和注释文件sample.gff3获取protein序列gffread -y sample.protein.fa -g genome.fa sample.gff3
-Rscript genomescope.R kmcdb_k21.hist <k-mer_length> <read_length> <output_dir> [kmer_max] [verbose]
-6. 批量运行脚本 如果样品数量非常多,可以用脚本自动遍历每个样品来运行。
-把样品名称整理成样品列表(sample.list),修改下面脚本中的/path/to/data/为数据所在路径,即可运行。
-for i in sample.list do mkdir $i cd $i mkdir tmp # 运行KMC,获得频数分布表sample_k21.hist ls /path/to/data/$i* > FILES kmc -k21 -t8 -m64 -ci1 -cs10000 @FILES $i tmp kmc_tools transform $i histogram "$i"_k21.hist -cx10000 rm -rf tmp # 运行genomescope2.0,估计基因组特征(默认是二倍体-p 2) genomescope.R -i "$i"_k21.hist -o ./ -k 21 -n "$i"_genomescope -p 2 >"$i"_genomescope.log 2>&1 & # 运行smudgeplot,估计 L=$(smudgeplot.py cutoff "${i}"_k21.hist L) U=$(smudgeplot.py cutoff "${i}"_k21.hist U) echo $L $U kmc_tools transform $i -ci"$L" -cx"$U" dump -s "$i"_L"$L"_U"$U".dump smudgeplot.py hetkmers -o "$i"_L"$L"_U"$U" < "$i"_L"$L"_U"$U".dump # 耗时步骤,约1h smudgeplot.py plot "$i"_L"$L"_U"$U"_coverages.tsv -o $i -t $i cd .. done
-
-7. references
-GenomeScope 2.0 + Smudgeplot paper:https://www.nature.com/articles/s41467-020-14998-3
-Smudgeplot github:https://github.com/KamilSJaron/smudgeplot
-genomescope2.0 github:https://github.com/tbenavi1/genomescope2.0
-
+2.4. 从注释文件提取intron信息 脚本extract_intron_info.pl
欢迎关注微信公众号:生信技工
@@ -14693,15 +14559,14 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
omics
genome
- genome survey
- genome survey
genome
- k-mer
- KMC
- GenomeScope
- Smudgeplot
+ genome annotation
+ sort
+ rename
+ combine
+ extract
@@ -14825,239 +14690,79 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 用k-mer分析进行基因组调查:(四)用KMC进行k-mer频数统计
- /2022/06/05/omics_genome.survey_04.KMC/
-
-
-用k-mer分析进行基因组调查系列:
-
-【推荐】用Smudgeplot评估物种倍性后,用组合jellyfish+GenomeScope1.0做二倍体物种的基因组调查,用组合KMC+GenomeScope2.0做多倍体物种的基因组调查。
-1. k-mer进行基因组调查的软件概况 k-mer进行基因组调查分为k-mer频数统计 和基因组特征评估 两步。
-
-KMC可以实现第一步k-mer频数统计。
-KMC的结果sample.histo可以用在GenomeScope上,实现第二步基因组特征评估。
-
-2. KMC 简介
-KMC是一个用来从FASTQ/FASTA文件中计算k-mers的基于KMC二进制数据库的程序。
-KMC是波兰的Silesian University of Technology的算法和软件学院的REFRESH Bioinformatics Group 开发的工具。
-2017年发布了第三个版本,KMC3。
-KMC是主要基于C语言的程序。
-
-3. KMC 安装
-版本 有两个版本的KMC,一般使用第一个版本,Smudgeplot评估物种倍性时用到了第二个版本。
-
-
-
-下载 在KMC download 找对应系统的最新版本KMC软件,下载解压缩即可使用。
-
-mkdir KMC && cd KMC wget https://github.com/refresh-bio/KMC/releases/download/v3.2.1/KMC3.2.1.linux.tar.gz #下载最新版本的KMC tar -xzf KMC3.2.1.linux.tar.gz #解压缩和解包,生成bin文件夹和include文件夹
-
-
-使用 解压缩后bin目录下会包含可执行文件,可直接使用,建议加入环境变量,包括:
-
-
-bin/kmc:计算k-mer频数的主程序
-bin/kmc_dump:在kmc生成数据库中列出k-mers的程序
-bin/kmc_tools:允许操作kmc数据库的程序
-
-4. KMC 运行 用KMC计算k-mer频率,生成k-mer频数直方表和k-mer直方图。
-
-运行
-mkdir tmp #创建临时文件夹 ls *.fastq.gz > FILES #用于分析的clean reads路径保存到文件FILES中 kmc -k21 -t16 -m64 -ci1 -cs10000 @FILES kmcdb tmp #计算k-mer频率 kmc_tools transform kmcdb histogram sample.histo -cx10000 #生成k-mer频数直方表sample.histo和k-mer直方图
-
-kmc命令参数
-
-
-
--k21:k-mer长度设置为21
--t16:线程16
--m64:内存64G,设置使用RAM的大致数量,范围1-1024。
--ci1 -cs10000:统计k-mer coverages覆盖度范围在[1-10000]的。
-@FILES:保存了输入文件列表的文件名为FILES
-kmcdb:KMC数据库的输出文件名前缀
-tmp:临时目录
-
-
-kmc_tools命令参数
-
-
--cx10000:储存在直方图文件中counter的最大值。
-
-
-结果 生成的sample.histo可用于第二步GenomeScope的分析。
-
-5. 基因组特征评估 获得k-mer频数分布表sample.histo后
-
-5.1. GenomeScope 网页版 5.1.1. GenomeScope1.0 网页版 —— 适用于二倍体物种
-在GenomeScope1.0 网页版 上传前一步获得的k-mer频数分布表sample.histo文件。
-设置参数k-mer length为第一步选择的k-mer长度值,这里是17;参数Read length为序列读长,一般为150;最后一个参数Max kmer coverage建议修改成更大的10000,以统计更多的k-mers。
-结果显示预估的基因组大小,杂合度,重复率等信息。
-
-5.1.2. GenomeScope2.0 网页版 —— 适用于多倍体物种 GenomeScope2.0 网页版 也是类似的步骤。
-5.2. R绘制
-R绘制k-mer频数分布曲线初步查看基因组特征。
-获得kmer_plot.png为频数分布曲线,可根据曲线峰值对基因组大小进行计算和预估。
-
-kmer <- read.table( 'sample.histo' ) kmer <- subset( kmer, V1 >= 5 & V1 <= 500 ) Frequency <- kmer$ V1 Number <- kmer$ V2 png( 'kmer_plot.png' ) plot( Frequency, Number, type = 'l' , col = 'blue' ) dev.off( )
-
-6. references
-KMC3 paper:https://academic.oup.com/bioinformatics/article/33/17/2759/3796399
-refresh-bio/KMC:https://github.com/refresh-bio/KMC
-tbenavi1/KMC github:https://github.com/tbenavi1/KMC
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- omics
- genome
- genome survey
-
-
- genome survey
- genome
- k-mer
- KMC
- GenomeScope
-
-
-
- 用k-mer分析进行基因组调查:(五)用GenomeScope评估基因组特征
- /2022/06/05/omics_genome.survey_05.GenomeScope/
-
-
-用k-mer分析进行基因组调查系列:
-
-【推荐】用Smudgeplot评估物种倍性后,用组合jellyfish+GenomeScope1.0做二倍体物种的基因组调查,用组合KMC+GenomeScope2.0做多倍体物种的基因组调查。
-1. k-mer进行基因组调查的软件概况 k-mer进行基因组调查分为k-mer频数统计 和基因组特征评估 两步。
-
-GenomeScope可以实现第二步基因组特征评估。
-需要在jellyfish/KMC等软件的第一步结果k-mer频数分布表的基础上,GenomeScope才可实现。
-
-推荐第一步获取k-mer频数分布表的命令:
-
-jellyfish
-jellyfish count -C -m 21 -s 1000000000 -t 10 *.fastq -o sample.jf #计算k-mer频率,生成sample.jf jellyfish histo -t 10 sample.jf > sample.histo #生成k-mer频数直方表sample.histo和k-mer直方图
-
-KMC
-mkdir tmp ls *.fastq.gz > FILES kmc -k21 -t16 -m64 -ci1 -cs10000 @FILES kmcdb tmp #计算k-mer频率 kmc_tools transform kmcdb histogram sample.histo -cx10000 #生成k-mer直方图
-
-2. GenomeScope概况
-GenomeScope可以利用第一步jellyfish或KMC等其他软件分析得到k-mer频数分布表(sample.histo文件)实现第二步基因组特征评估 。
-GenomeScope1.0在2017年发表,用于二倍体物种的基因组调查;2020年又发表了GenomeScope 2.0版本,用于多倍体物种的基因组调查,并发布了用于判断物种倍性的Smudgeplot。
-GenomeScope1.0 的基因组特征结果包括基因组大小(genome size),杂合度(heterozygosity),重复序列比例,GC含量等。
-GenomeScope2.0 的基因组特征结果包括基因组大小(genome size),杂合度(heterozygosity),重复序列比例,GC含量,基因型比例,和基因组结构(同源/异源多倍体)等。
-GenomeScope有网页版和Linux本地版,功能一样;推荐网页版,免去安装的麻烦。
-
-3. GenomeScope1.0 网页版【推荐】—— 适用于二倍体物种 GenomeScope1.0 网页版 :http://qb.cshl.edu/genomescope
-
-上传第一步获得的k-mer频数分布表sample.histo文件;
-
-设置参数Kmer length为第一步选择的k-mer长度值,这里是17;
-
-参数Read length为序列读长,一般为150;
-
-参数Max kmer coverage默认是1000。
- 建议按照物种情况修改,比如10000,以统计更准确。
- 这个参数太小,可能造成过滤过多的Kmer,导致估计的基因组大小偏小的情况。
- 这个参数太大则可能把高拷贝数量的DNA,比如叶绿体DNA,包括进Kmer的统计,造成GenomeScope算法的误差,所以还是不推荐使用-1或太大的值。
-
-提交后几分钟就可以得到结果,保存结果图片可用于发表。
-
-
-
-
-Figure 1. GenomeScope1.0结果示例
-4. GenomeScope2.0 网页版 【推荐】 —— 适用于多倍体物种 GenomeScope2.0 网页版 :http://qb.cshl.edu/genomescope/genomescope2.0
-GenomeScope2.0版本相较于1.0,进行了许多改进,主要是增加了多倍体物种的基因组调查,并提出Smudgeplot方法来估计基因组的倍性和基因组结构。
-4.1. GenomeScope 2.0 使用步骤
-上传第一步获得的k-mer频数分布表histo文件;
-设置参数Kmer length为第一步选择的k-mer长度值,这里是17;
-参数倍性Ploidy根据物种的倍性设定,默认是二倍体,设置成2;
-参数Max k-mer coverage默认是-1,即不限制最大k-mer深度。建议按照物种情况修改,比如10000,以统计更准确。这个参数太小,可能造成过滤过多的Kmer,导致估计的基因组大小偏小的情况。这个参数太大则可能把高拷贝数量的DNA,比如叶绿体DNA,包括进Kmer的统计,造成GenomeScope算法的误差,所以还是不推荐使用-1或太大的值。
-参数Average k-mer coverage for polyploid genome默认是-1,即不进行筛选,可以根据情况调整。
-提交后几分钟就可以得到结果,保存结果图片可用于发表。
-
-4.2. GenomeScope 2.0 结果 4.2.1. 二倍体 结果 二倍体的GenomeScope 2.0 结果与GenomeScope 1.0 结果的主要不同之处在于杂合度结果(het)变成了2.0版本的代表基因型的aa和ab的比例,其中杂合基因型ab的比例即为杂合度。2.0结果中的p值代表设置的物种倍性。
-
-
-Figure 2. GenomeScope2.0 二倍体结果示例
-4.2.2. 区分异源四倍体 和同源四倍体 GenomeScope2.0添加了参数倍性Ploidy ,可以评估多倍体的基因组特征。
+ 三代基因组测序PacBio CLR和CCS模式下机数据的预处理
+ /2024/06/04/omics_genome.sequencing_TGS_data.preprocessing/
+
+
+1. SMRT测序模式 PacBio sequel II平台支持CLR(Continuous Long Reads)和CCS(Circular Consensus Sequencing)两种测序模式。 (sequel平台好像只支持CLR模式)
-四倍体共有两种可能的拓扑结构,代表着同源四倍体和异源四倍体,每种拓扑包含三种杂合基因型和一种纯合基因型,共有五种基因型。(五倍体有五种可能的拓扑,六倍体有十六种)
-根据结果中杂合基因型的分布模式可以区分异源四倍体和同源四倍体。
+CLR模式适用超长插入片段文库(>20kb),存储有效数据的文件一般命名为* .subreads.bam。对subreads不再进行后续处理。
+CCS模式则适用于普通长度插入片段文库(1-20kb),存储数据的* .subreads.bam文件(subreads )需要一致性校正后生成CCS reads或HiFi reads用于下游分析。
-
-
-Figure 3. 四倍体的两种拓扑结构可能性 a异源四倍体,b同源四倍体。 图片来源:GenomeScope 2.0 paper
+2. CLR模式
+CLR模式下机数据
+
+
+*subreads.bam是以bam格式存储CLR测序数据的下机原始数据。
+因为每条插入片段只测了一次,不需要进行reads的一致性校正,生成consenses reads这一步骤(Pacbio CCS模式生成的subreads则需要合并生成CCS reads才能用于下游分析)。
+
+
+CLR模式数据文件命名规则
+
+
+文件名:P01TYD19110566-1_r64031_20191018_094227_2_B01.subreads.bam的含义
+P01TYD19110566-1:文库号,即library ID。
+r64031_20191018_094227:样本所在run的ID号码,编号唯一,格式为”r机器号_日期_时间”。
+2_B01:cell编号。
+
-GenomeScope2.0的四倍体 结果
+CLR模式数据预处理
-在GenomeScope 2.0 的结果中,如果杂合基因型aaab的比例大于aabb,则认为该物种是异源四倍体;如果杂合基因型aaab的比例小于aabb,则认为该物种是同源四倍体。
-
-
-Figure 4. GenomeScope2.0 多倍体结果示例 a异源四倍体,b同源四倍体。 图片来源:GenomeScope 2.0 paper
-5. GenomeScope1.0本地版 —— 适用于二倍体物种 GenomeScope1.0的本地版是用一个R脚本实现的,在GenomeScope github 可以下载genomescope.R脚本,下载后把genomescope.R文件加入环境变量即可使用。。
-Rscript genomescope.R sample.histo k-mer_length read_length output_dir [kmer_max] [verbose]
-必需参数:
-sample.histo:频数分布直方表,jellyfish的结果。
-k-mer_length:k-mer长度,通常是17,21,与jellyfish一致。
-read_length:reads长度,这里是150bp的PE reads,所以是150。
-output_dir:输出目录,结果图和文本都输出到这个目录。
+CLR的subreads没有单碱基质量数据,所以bam文件转化为fa文件即可(而不必转为fq文件)。
+可以用bam2fasta
直接把*subreads.bam转换成fasta格式文件用于后续分析。bam2fasta sample.subreads.bam -c 9 -o sample.subreads
命令会生成sample.subreads.fasta.gz文件,-c 9
代表压缩程度为9。
-6. GenomeScope2.0本地版 —— 适用于多倍体物种 6.1. 下载和安装 git clone https://github.com/tbenavi1/genomescope2.0.git #下载 cd genomescope2.0/ mkdir ~/R_libs #创建主目录下的R_libs文件夹用于安装本地R库 echo "R_LIBS=~/R_libs/" >> ~/.Renviron #创建/编辑.Renviron文件,使得R在创建的R_libs文件夹加载库 Rscript install.R #安装
+3. CCS模式
+CCS模式下机数据
+
+
+拿到PacBio CCS模式测序数据时,例如下载公共数据尤其是早期数据时,一定要弄清楚是subreads,还是HiFi reads。
+对于近期从测序服务商那里得到的数据一般都是运行完CCS软件后的HiFi reads。(文件为下机的ccs.bam或者hifi_reads.bam),可直接用于下游分析。
+需要注意的是,如果拿到的是subreads.bam数据,则subreads数据需要通过一致性校正后(intra-molecular consensus),得到一条唯一的read,称为CCS read ,再用于下游分析。这个校正过程会显著提升测序准确率。
+
+
+CCS模式数据的几种类型reads
+
+
+polymerase reads:对环状的SMRTbell文库分子测序得到的reads,可能多次读取环状分子。(保存在zmws.bam文件)
+subreads:从polymerase reads序列中去掉哑铃状的测序接头序列,可以得到多条subreads序列。(保存在subreads.bam文件,被废弃的adapter和低质量序列保存在scraps.bam文件)
+CCS reads:环状一致性序列,从一个polymerase reads上的多条subreads序列,进行一致性校正得到的一条准确率更高的序列。(保存在CCS.bam文件)
+HiFi reads (High fidelity reads):质量值大于Q20的CCS reads,即为HiFi reads。(保存在hifi_reads.bam文件)
+
+
-安装后把目录下的genomescope.R文件加入环境变量即可使用。
-6.2. 使用 genomescope.R -i histogram_file -o output_dir -k k-mer_length
-参数:
+Figure 1. CCS reads处理,图片来源: https://cehs.mit.edu/pacific-biosciences-sequel
+
+一致性校正(subreads to CCS reads)
+
--i histogram_file:频数分布直方表,jellyfish或KMC的结果。
--k k-mer_length:k-mer长度,通常是17,21,与jellyfish/KMC的设置一致。
--o output_dir:输出目录,结果图和文本都输出到这个目录。
--p ploidy:设置倍性。
--l lambda:设置测序的平均k-mer覆盖率的初始猜测。
--n name_prefix:设置输出文件的前缀。
--m max_kmercov:设置从分析中排除高频k-mers的截止值,根据物种情况确定,推荐1000或10000。
+如果拿到的是subreads数据,则需要进行一致性校正,把数据转化为CCS reads。
+PacBio官方smrtlink软件中的CCS工具可将subrads.bam转换为ccs.bam,命令如下:ccs *.subreads.bam *.ccs.bam
。
+分割文件并行转换可以加速,下面代码示例为分成10份运行::
-7. GenomeScope实践经验
-实际使用中发现,GenomeScope1.0和2.0常常估算差异较大。建议二倍体还是使用GenomeScope1.0。
+ccs *.subreads.bam *.ccs.1.bam --chunk 1/10 -j <THREADS> ccs *.subreads.bam *.ccs.2.bam --chunk 2/10 -j <THREADS> ... ccs *.subreads.bam *.ccs.10.bam --chunk 10/10 -j <THREADS> pbmerge -o *.ccs.bam movie.ccs.*.bam
+
+
+CCS模式数据预处理
-在估算一个约300Mb的二倍体基因组时,GenomeScope1.0估算出来267Mb,GenomeScope2.0估算出来149Mb。
-在估算一个约6Gb的四倍体基因组时发现,GenomeScope1.0估算出来5.5Gb,GenomeScope2.0估算出来2.7Gb。
+使用CCS read或HiFi reads(通常做一致性校正后reads质量都大于Q20,所以CCS reads就是HiFi reads)可以进行下游分析,有时下游分析需要fa格式。
+CCS reads没有单碱基质量数据,所以bam文件转化为fa文件即可(而不必转为fq文件)。
+可以用bam2fasta
直接把*ccs.bam转换成fasta格式文件用于后续分析。bam2fasta sample.ccs.bam -c 9 -o sample.ccs
命令会生成sample.ccs.fasta.gz文件,-c 9
代表压缩程度为9。
-8. references
-GenomeScope 1.0 github:https://github.com/schatzlab/genomescope
-GenomeScope 2.0 github:https://github.com/tbenavi1/genomescope2.0
-GenomeScope 1.0 paper:https://academic.oup.com/bioinformatics/article/33/14/2202/3089939
-GenomeScope 2.0 + Smudgeplot paper:https://www.nature.com/articles/s41467-020-14998-3
-Smudgeplot github:https://github.com/KamilSJaron/smudgeplot
+references
+一致性校正:https://freewechat.com/a/MzA3MjM5NTE4Mg==/2247483719/1
+CCS模式测序:https://cloud.tencent.com/developer/article/2346853
@@ -15068,15 +14773,23 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
omics
genome
- genome survey
+ genome sequencing
+ third generation sequencing
- genome survey
- genome
- k-mer
- KMC
- GenomeScope
- Smudgeplot
+ fasta
+ third generation sequencing
+ TGS
+ PacBio
+ genome sequencing
+ data preprocessing
+ long read sequencing
+ continuous long reads
+ CLR
+ circular consensus sequencing
+ CCS
+ SMRT
+ subreads
@@ -15236,6 +14949,147 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
kmerfreq
+
+ 用k-mer分析进行基因组调查:(五)用GenomeScope评估基因组特征
+ /2022/06/05/omics_genome.survey_05.GenomeScope/
+
+
+用k-mer分析进行基因组调查系列:
+
+【推荐】用Smudgeplot评估物种倍性后,用组合jellyfish+GenomeScope1.0做二倍体物种的基因组调查,用组合KMC+GenomeScope2.0做多倍体物种的基因组调查。
+1. k-mer进行基因组调查的软件概况 k-mer进行基因组调查分为k-mer频数统计 和基因组特征评估 两步。
+
+GenomeScope可以实现第二步基因组特征评估。
+需要在jellyfish/KMC等软件的第一步结果k-mer频数分布表的基础上,GenomeScope才可实现。
+
+推荐第一步获取k-mer频数分布表的命令:
+
+jellyfish
+jellyfish count -C -m 21 -s 1000000000 -t 10 *.fastq -o sample.jf #计算k-mer频率,生成sample.jf jellyfish histo -t 10 sample.jf > sample.histo #生成k-mer频数直方表sample.histo和k-mer直方图
+
+KMC
+mkdir tmp ls *.fastq.gz > FILES kmc -k21 -t16 -m64 -ci1 -cs10000 @FILES kmcdb tmp #计算k-mer频率 kmc_tools transform kmcdb histogram sample.histo -cx10000 #生成k-mer直方图
+
+2. GenomeScope概况
+GenomeScope可以利用第一步jellyfish或KMC等其他软件分析得到k-mer频数分布表(sample.histo文件)实现第二步基因组特征评估 。
+GenomeScope1.0在2017年发表,用于二倍体物种的基因组调查;2020年又发表了GenomeScope 2.0版本,用于多倍体物种的基因组调查,并发布了用于判断物种倍性的Smudgeplot。
+GenomeScope1.0 的基因组特征结果包括基因组大小(genome size),杂合度(heterozygosity),重复序列比例,GC含量等。
+GenomeScope2.0 的基因组特征结果包括基因组大小(genome size),杂合度(heterozygosity),重复序列比例,GC含量,基因型比例,和基因组结构(同源/异源多倍体)等。
+GenomeScope有网页版和Linux本地版,功能一样;推荐网页版,免去安装的麻烦。
+
+3. GenomeScope1.0 网页版【推荐】—— 适用于二倍体物种 GenomeScope1.0 网页版 :http://qb.cshl.edu/genomescope
+
+上传第一步获得的k-mer频数分布表sample.histo文件;
+
+设置参数Kmer length为第一步选择的k-mer长度值,这里是17;
+
+参数Read length为序列读长,一般为150;
+
+参数Max kmer coverage默认是1000。
+ 建议按照物种情况修改,比如10000,以统计更准确。
+ 这个参数太小,可能造成过滤过多的Kmer,导致估计的基因组大小偏小的情况。
+ 这个参数太大则可能把高拷贝数量的DNA,比如叶绿体DNA,包括进Kmer的统计,造成GenomeScope算法的误差,所以还是不推荐使用-1或太大的值。
+
+提交后几分钟就可以得到结果,保存结果图片可用于发表。
+
+
+
+
+Figure 1. GenomeScope1.0结果示例
+4. GenomeScope2.0 网页版 【推荐】 —— 适用于多倍体物种 GenomeScope2.0 网页版 :http://qb.cshl.edu/genomescope/genomescope2.0
+GenomeScope2.0版本相较于1.0,进行了许多改进,主要是增加了多倍体物种的基因组调查,并提出Smudgeplot方法来估计基因组的倍性和基因组结构。
+4.1. GenomeScope 2.0 使用步骤
+上传第一步获得的k-mer频数分布表histo文件;
+设置参数Kmer length为第一步选择的k-mer长度值,这里是17;
+参数倍性Ploidy根据物种的倍性设定,默认是二倍体,设置成2;
+参数Max k-mer coverage默认是-1,即不限制最大k-mer深度。建议按照物种情况修改,比如10000,以统计更准确。这个参数太小,可能造成过滤过多的Kmer,导致估计的基因组大小偏小的情况。这个参数太大则可能把高拷贝数量的DNA,比如叶绿体DNA,包括进Kmer的统计,造成GenomeScope算法的误差,所以还是不推荐使用-1或太大的值。
+参数Average k-mer coverage for polyploid genome默认是-1,即不进行筛选,可以根据情况调整。
+提交后几分钟就可以得到结果,保存结果图片可用于发表。
+
+4.2. GenomeScope 2.0 结果 4.2.1. 二倍体 结果 二倍体的GenomeScope 2.0 结果与GenomeScope 1.0 结果的主要不同之处在于杂合度结果(het)变成了2.0版本的代表基因型的aa和ab的比例,其中杂合基因型ab的比例即为杂合度。2.0结果中的p值代表设置的物种倍性。
+
+
+Figure 2. GenomeScope2.0 二倍体结果示例
+4.2.2. 区分异源四倍体 和同源四倍体 GenomeScope2.0添加了参数倍性Ploidy ,可以评估多倍体的基因组特征。
+
+四倍体共有两种可能的拓扑结构,代表着同源四倍体和异源四倍体,每种拓扑包含三种杂合基因型和一种纯合基因型,共有五种基因型。(五倍体有五种可能的拓扑,六倍体有十六种)
+根据结果中杂合基因型的分布模式可以区分异源四倍体和同源四倍体。
+
+
+
+Figure 3. 四倍体的两种拓扑结构可能性 a异源四倍体,b同源四倍体。 图片来源:GenomeScope 2.0 paper
+
+GenomeScope2.0的四倍体 结果
+
+在GenomeScope 2.0 的结果中,如果杂合基因型aaab的比例大于aabb,则认为该物种是异源四倍体;如果杂合基因型aaab的比例小于aabb,则认为该物种是同源四倍体。
+
+
+Figure 4. GenomeScope2.0 多倍体结果示例 a异源四倍体,b同源四倍体。 图片来源:GenomeScope 2.0 paper
+5. GenomeScope1.0本地版 —— 适用于二倍体物种 GenomeScope1.0的本地版是用一个R脚本实现的,在GenomeScope github 可以下载genomescope.R脚本,下载后把genomescope.R文件加入环境变量即可使用。。
+Rscript genomescope.R sample.histo k-mer_length read_length output_dir [kmer_max] [verbose]
+必需参数:
+
+sample.histo:频数分布直方表,jellyfish的结果。
+k-mer_length:k-mer长度,通常是17,21,与jellyfish一致。
+read_length:reads长度,这里是150bp的PE reads,所以是150。
+output_dir:输出目录,结果图和文本都输出到这个目录。
+
+6. GenomeScope2.0本地版 —— 适用于多倍体物种 6.1. 下载和安装 git clone https://github.com/tbenavi1/genomescope2.0.git #下载 cd genomescope2.0/ mkdir ~/R_libs #创建主目录下的R_libs文件夹用于安装本地R库 echo "R_LIBS=~/R_libs/" >> ~/.Renviron #创建/编辑.Renviron文件,使得R在创建的R_libs文件夹加载库 Rscript install.R #安装
+
+安装后把目录下的genomescope.R文件加入环境变量即可使用。
+6.2. 使用 genomescope.R -i histogram_file -o output_dir -k k-mer_length
+参数:
+
+-i histogram_file:频数分布直方表,jellyfish或KMC的结果。
+-k k-mer_length:k-mer长度,通常是17,21,与jellyfish/KMC的设置一致。
+-o output_dir:输出目录,结果图和文本都输出到这个目录。
+-p ploidy:设置倍性。
+-l lambda:设置测序的平均k-mer覆盖率的初始猜测。
+-n name_prefix:设置输出文件的前缀。
+-m max_kmercov:设置从分析中排除高频k-mers的截止值,根据物种情况确定,推荐1000或10000。
+
+7. GenomeScope实践经验
+实际使用中发现,GenomeScope1.0和2.0常常估算差异较大。建议二倍体还是使用GenomeScope1.0。
+
+
+在估算一个约300Mb的二倍体基因组时,GenomeScope1.0估算出来267Mb,GenomeScope2.0估算出来149Mb。
+在估算一个约6Gb的四倍体基因组时发现,GenomeScope1.0估算出来5.5Gb,GenomeScope2.0估算出来2.7Gb。
+
+8. references
+GenomeScope 1.0 github:https://github.com/schatzlab/genomescope
+GenomeScope 2.0 github:https://github.com/tbenavi1/genomescope2.0
+GenomeScope 1.0 paper:https://academic.oup.com/bioinformatics/article/33/14/2202/3089939
+GenomeScope 2.0 + Smudgeplot paper:https://www.nature.com/articles/s41467-020-14998-3
+Smudgeplot github:https://github.com/KamilSJaron/smudgeplot
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ omics
+ genome
+ genome survey
+
+
+ genome survey
+ genome
+ k-mer
+ KMC
+ GenomeScope
+ Smudgeplot
+
+
用k-mer分析进行基因组调查:(七)用KmerGenie一步实现
/2022/06/19/omics_genome.survey_07.KmerGenie/
@@ -15364,132 +15218,6 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
KmerGenie
-
- 基因组质量评估:(三)用BUSCO评估基因组的完整性
- /2021/07/24/omics_genome_quality.assessment_BUSCO/
-
-
-1. busco简介 Benchmarking Universal Single-Copy Orthologs (BUSCO)是用于评估基因组组装和注释的完整性的工具。通过与已有单拷贝直系同源数据库的比较,得到有多少比例的数据库能够有比对,比例越高代表基因组完整度越好。
-可以评估三种数据类型:
-
-组装的基因组;
-转录组;
-蛋白组(或者基因组注释基因对应的氨基酸序列)。
-
-使用需要评估的生物类别所属的数据库(从busco数据库下载)比对,得出比对上数据库的完整性比例的信息。
-
-2. busco安装
-conda安装
-
-conda install -c conda-forge -c bioconda busco=5.3.2
#安装版本是5.3.2
-
-手动安装
-
-git clone https://gitlab.com/ezlab/busco.git cd busco python3 setup.py install --user ./bin/busco -h
-
-3. busco数据库下载 busco --list-datasets
#查看busco可用的数据库。
-下载对应的busco数据库;目前有v1-v5版本,根据需要评估的物种,尽量选用最新版本的最多基因的数据库。
-wget https://busco-data.ezlab.org/v5/data/lineages/eudicots_odb10.2020-09-10.tar.gz tar -xzf eudicots_odb10.2020-09-10.tar.gz #会生成eudicots_odb10,这个就可以直接用了,注意不要修改后缀,必需是_odb10
-
-植物相关的数据库有:
-
-4. busco使用 4.1. 直接在命令中设定参数【需设置的参数较少时】 nohup busco -i genome.fa -c 10 -o busco -m geno -l busco_downloads/eudicots_odb10 --offline &
-
--i:指定需要分析的数据,组装的genome或者注释的蛋白序列或者组装的转录组dna序列;
--m:geno/prot/tran模式;
--c:指定线程;
--o:指定输出文件目录名;
--l:指定数据库
-使用–offline离线模式
-
-非常不建议用busco的–auto-lineage模式,这个模式在运行busco时下载数据库,网络不好时连接的失败率非常高。推荐用-l busco_downloads/eudicots_odb10 --offline
指定下载好的本地数据库,并使用离线模式。
-4.2. 在设置文件中给出参数【需设置的参数较多时】 nohup busco --config config.ini
通过conda安装的config.ini配置文件在/path/to/miniconda3/envs/busco5/config/目录下;直接复制一份到工作目录,修改使用即可。
-把config.ini的示例文件中行首的分号;去掉,并把等号后的内容修改成设置的内容。
-# This is the BUSCOv5 configuration file template. # It is not necessary to use this, as BUSCO will use the dependencies available on your PATH by default. # The busco run parameters can all be set on the command line. See the help prompt (busco -h) for details. # # To use this file for an alternative configuration, or to specify particular versions of dependencies: # 1) edit the path and command values to match your desired dependency versions. # WARNING: passing a parameter through the command line overrides the value specified in this file. # # 2) Enable a parameter by removing ";" # # 3) Make this config file available to BUSCO either by setting an environment variable # # export BUSCO_CONFIG_FILE="/path/to/myconfig.ini" # # or by passing it as a command line argument # # busco <args> --config /path/to/config.ini # [busco_run] # Input file ;in = /path/to/input_file.fna # Run name, used in output files and folder ;out = BUSCO_run # Where to store the output directory ;out_path = /path/to/output_folder # Path to the BUSCO dataset ;lineage_dataset = bacteria # Which mode to run (genome / proteins / transcriptome) ;mode = genome # Run lineage auto selector ;auto-lineage = True # Run auto selector only for non-eukaryote datasets ;auto-lineage-prok = True # Run auto selector only for eukaryote datasets ;auto-lineage-euk = True # How many threads to use for multithreaded steps ;cpu = 16 # Force rewrite if files already exist (True/False) ;force = False # Restart a previous BUSCO run (True/False) ;restart = False # Blast e-value ;evalue = 1e-3 # How many candidate regions (contigs, scaffolds) to consider for each BUSCO ;limit = 3 # Metaeuk parameters for initial run ;metaeuk_parameters='--param1=value1,--param2=value2' # Metaeuk parameters for rerun ;metaeuk_rerun_parameters="" # Augustus parameters ;augustus_parameters='--param1=value1,--param2=value2' # Quiet mode (True/False) ;quiet = False # Local destination path for downloaded lineage datasets ;download_path = ./busco_downloads/ # Run offline ;offline=True # Ortho DB Datasets version ;datasets_version = odb10 # URL to BUSCO datasets ;download_base_url = https://busco-data.ezlab.org/v4/data/ # Download most recent BUSCO data and files ;update-data = True # Use Augustus gene predictor instead of metaeuk ;use_augustus = True [tblastn] path = /ncbi-blast-2.10.1+/bin/ command = tblastn [makeblastdb] path = /ncbi-blast-2.10.1+/bin/ command = makeblastdb [metaeuk] path = /metaeuk/build/bin/ command = metaeuk [augustus] path = /augustus/bin/ command = augustus [etraining] path = /augustus/bin/ command = etraining [gff2gbSmallDNA.pl] path = /augustus/scripts/ command = gff2gbSmallDNA.pl [new_species.pl] path = /augustus/scripts/ command = new_species.pl [optimize_augustus.pl] path = /augustus/scripts/ command = optimize_augustus.pl [hmmsearch] path = /usr/local/bin/ command = hmmsearch [sepp] path = /home/biodocker/sepp/ command = run_sepp.py [prodigal] path = /usr/local/bin/ command = prodigal
-
-5. busco结果 结果在short_summary.txt后缀文件中。
-一个例子
- --------------------------------------------------
- |Results from dataset eudicots_odb10 |
- --------------------------------------------------
- |C:92.9%[S:72.4%,D:20.5%],F:1.8%,M:5.3%,n:2326 |
- |2162 Complete BUSCOs (C) |
- |1685 Complete and single-copy BUSCOs (S) |
- |477 Complete and duplicated BUSCOs (D) |
- |41 Fragmented BUSCOs (F) |
- |123 Missing BUSCOs (M) |
- |2326 Total BUSCO groups searched |
- --------------------------------------------------
-
-结果的解释: 使用的eudicots_odb10真双子叶植物数据库中共有2326个BUSCO groups,其中2162(92.9%)个BUSCO groups被完整比对上(包括1685个单拷贝和477个多拷贝),41个部分比对上,123个没有比对上。
-通常用完整比对上的占总共的BUSCO groups的比例作为BUSCO的重要结果,越高越好,这里是92.9%=2162/2326。
-6. busco结果画图 在执行完毕之后,可以使用generate_plot.py画条形图,可以进行多个物种间同一个库结果的比较。
-
-首先把所有的经过BUSCO检测的物种结果short_summary.txt后缀文件放到一个文件夹(result)下;
-然后运行python busco/scripts/generate_plot.py –wd result
;
-generate_plot.py会在指定的目录下识别short_summary.specific/genetic前缀文件,载入所有符合这个模式的文件,然后在result下生成busco_figure.R脚本。
-然后运行这个脚本调用ggplot2生成图。如果当前环境的R中没有安装ggplot2,可以安装后自行运行脚本生成图。
-可以修改busco_figure.R脚本以适应需要,比如修改标题(my_title),基因数量标签的尺寸(labsize)。
-
-7. 调用augustus【optional】 AUGUSTUS运行的时候需要额外设定2个环境变量,AUGUSTUS_CONFIG_PATH和BUSCO_CONFIG_FILE, 通过conda安装的这两个配置文件都在/path/to/miniconda3/envs/busco5/config目录下。
-所以需要在.bashrc或.zshrc中加入下面这一行:
-export AUGUSTUS_CONFIG_PATH="/path/to/anaconda3/envs/busco5/config export BUSCO_CONFIG_FILE="/path/to/anaconda3/envs/busco5/config/config.ini
-实现AUGUSTUS和BUSCO的设置。
-8. notes 2021年06月23日开始写,07月24日今天终于完结。
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- omics
- genome
- quality assessment
-
-
- biosoft
- genome
- quality assessment
- BUSCO
-
-
基因组质量评估:(四)用LAI评估基因组组装的连贯性
/2022/07/20/omics_genome_quality.assessment_LAI/
@@ -15716,6 +15444,132 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
QUAST
+
+ 基因组质量评估:(三)用BUSCO评估基因组的完整性
+ /2021/07/24/omics_genome_quality.assessment_BUSCO/
+
+
+1. busco简介 Benchmarking Universal Single-Copy Orthologs (BUSCO)是用于评估基因组组装和注释的完整性的工具。通过与已有单拷贝直系同源数据库的比较,得到有多少比例的数据库能够有比对,比例越高代表基因组完整度越好。
+可以评估三种数据类型:
+
+组装的基因组;
+转录组;
+蛋白组(或者基因组注释基因对应的氨基酸序列)。
+
+使用需要评估的生物类别所属的数据库(从busco数据库下载)比对,得出比对上数据库的完整性比例的信息。
+
+2. busco安装
+conda安装
+
+conda install -c conda-forge -c bioconda busco=5.3.2
#安装版本是5.3.2
+
+手动安装
+
+git clone https://gitlab.com/ezlab/busco.git cd busco python3 setup.py install --user ./bin/busco -h
+
+3. busco数据库下载 busco --list-datasets
#查看busco可用的数据库。
+下载对应的busco数据库;目前有v1-v5版本,根据需要评估的物种,尽量选用最新版本的最多基因的数据库。
+wget https://busco-data.ezlab.org/v5/data/lineages/eudicots_odb10.2020-09-10.tar.gz tar -xzf eudicots_odb10.2020-09-10.tar.gz #会生成eudicots_odb10,这个就可以直接用了,注意不要修改后缀,必需是_odb10
+
+植物相关的数据库有:
+
+4. busco使用 4.1. 直接在命令中设定参数【需设置的参数较少时】 nohup busco -i genome.fa -c 10 -o busco -m geno -l busco_downloads/eudicots_odb10 --offline &
+
+-i:指定需要分析的数据,组装的genome或者注释的蛋白序列或者组装的转录组dna序列;
+-m:geno/prot/tran模式;
+-c:指定线程;
+-o:指定输出文件目录名;
+-l:指定数据库
+使用–offline离线模式
+
+非常不建议用busco的–auto-lineage模式,这个模式在运行busco时下载数据库,网络不好时连接的失败率非常高。推荐用-l busco_downloads/eudicots_odb10 --offline
指定下载好的本地数据库,并使用离线模式。
+4.2. 在设置文件中给出参数【需设置的参数较多时】 nohup busco --config config.ini
通过conda安装的config.ini配置文件在/path/to/miniconda3/envs/busco5/config/目录下;直接复制一份到工作目录,修改使用即可。
+把config.ini的示例文件中行首的分号;去掉,并把等号后的内容修改成设置的内容。
+# This is the BUSCOv5 configuration file template. # It is not necessary to use this, as BUSCO will use the dependencies available on your PATH by default. # The busco run parameters can all be set on the command line. See the help prompt (busco -h) for details. # # To use this file for an alternative configuration, or to specify particular versions of dependencies: # 1) edit the path and command values to match your desired dependency versions. # WARNING: passing a parameter through the command line overrides the value specified in this file. # # 2) Enable a parameter by removing ";" # # 3) Make this config file available to BUSCO either by setting an environment variable # # export BUSCO_CONFIG_FILE="/path/to/myconfig.ini" # # or by passing it as a command line argument # # busco <args> --config /path/to/config.ini # [busco_run] # Input file ;in = /path/to/input_file.fna # Run name, used in output files and folder ;out = BUSCO_run # Where to store the output directory ;out_path = /path/to/output_folder # Path to the BUSCO dataset ;lineage_dataset = bacteria # Which mode to run (genome / proteins / transcriptome) ;mode = genome # Run lineage auto selector ;auto-lineage = True # Run auto selector only for non-eukaryote datasets ;auto-lineage-prok = True # Run auto selector only for eukaryote datasets ;auto-lineage-euk = True # How many threads to use for multithreaded steps ;cpu = 16 # Force rewrite if files already exist (True/False) ;force = False # Restart a previous BUSCO run (True/False) ;restart = False # Blast e-value ;evalue = 1e-3 # How many candidate regions (contigs, scaffolds) to consider for each BUSCO ;limit = 3 # Metaeuk parameters for initial run ;metaeuk_parameters='--param1=value1,--param2=value2' # Metaeuk parameters for rerun ;metaeuk_rerun_parameters="" # Augustus parameters ;augustus_parameters='--param1=value1,--param2=value2' # Quiet mode (True/False) ;quiet = False # Local destination path for downloaded lineage datasets ;download_path = ./busco_downloads/ # Run offline ;offline=True # Ortho DB Datasets version ;datasets_version = odb10 # URL to BUSCO datasets ;download_base_url = https://busco-data.ezlab.org/v4/data/ # Download most recent BUSCO data and files ;update-data = True # Use Augustus gene predictor instead of metaeuk ;use_augustus = True [tblastn] path = /ncbi-blast-2.10.1+/bin/ command = tblastn [makeblastdb] path = /ncbi-blast-2.10.1+/bin/ command = makeblastdb [metaeuk] path = /metaeuk/build/bin/ command = metaeuk [augustus] path = /augustus/bin/ command = augustus [etraining] path = /augustus/bin/ command = etraining [gff2gbSmallDNA.pl] path = /augustus/scripts/ command = gff2gbSmallDNA.pl [new_species.pl] path = /augustus/scripts/ command = new_species.pl [optimize_augustus.pl] path = /augustus/scripts/ command = optimize_augustus.pl [hmmsearch] path = /usr/local/bin/ command = hmmsearch [sepp] path = /home/biodocker/sepp/ command = run_sepp.py [prodigal] path = /usr/local/bin/ command = prodigal
+
+5. busco结果 结果在short_summary.txt后缀文件中。
+一个例子
+ --------------------------------------------------
+ |Results from dataset eudicots_odb10 |
+ --------------------------------------------------
+ |C:92.9%[S:72.4%,D:20.5%],F:1.8%,M:5.3%,n:2326 |
+ |2162 Complete BUSCOs (C) |
+ |1685 Complete and single-copy BUSCOs (S) |
+ |477 Complete and duplicated BUSCOs (D) |
+ |41 Fragmented BUSCOs (F) |
+ |123 Missing BUSCOs (M) |
+ |2326 Total BUSCO groups searched |
+ --------------------------------------------------
+
+结果的解释: 使用的eudicots_odb10真双子叶植物数据库中共有2326个BUSCO groups,其中2162(92.9%)个BUSCO groups被完整比对上(包括1685个单拷贝和477个多拷贝),41个部分比对上,123个没有比对上。
+通常用完整比对上的占总共的BUSCO groups的比例作为BUSCO的重要结果,越高越好,这里是92.9%=2162/2326。
+6. busco结果画图 在执行完毕之后,可以使用generate_plot.py画条形图,可以进行多个物种间同一个库结果的比较。
+
+首先把所有的经过BUSCO检测的物种结果short_summary.txt后缀文件放到一个文件夹(result)下;
+然后运行python busco/scripts/generate_plot.py –wd result
;
+generate_plot.py会在指定的目录下识别short_summary.specific/genetic前缀文件,载入所有符合这个模式的文件,然后在result下生成busco_figure.R脚本。
+然后运行这个脚本调用ggplot2生成图。如果当前环境的R中没有安装ggplot2,可以安装后自行运行脚本生成图。
+可以修改busco_figure.R脚本以适应需要,比如修改标题(my_title),基因数量标签的尺寸(labsize)。
+
+7. 调用augustus【optional】 AUGUSTUS运行的时候需要额外设定2个环境变量,AUGUSTUS_CONFIG_PATH和BUSCO_CONFIG_FILE, 通过conda安装的这两个配置文件都在/path/to/miniconda3/envs/busco5/config目录下。
+所以需要在.bashrc或.zshrc中加入下面这一行:
+export AUGUSTUS_CONFIG_PATH="/path/to/anaconda3/envs/busco5/config export BUSCO_CONFIG_FILE="/path/to/anaconda3/envs/busco5/config/config.ini
+实现AUGUSTUS和BUSCO的设置。
+8. notes 2021年06月23日开始写,07月24日今天终于完结。
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ omics
+ genome
+ quality assessment
+
+
+ biosoft
+ genome
+ quality assessment
+ BUSCO
+
+
基因组质量评估:(一)概述
/2022/07/10/omics_genome_quality.assessment_intro/
@@ -15831,110 +15685,106 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
quality assessment
- genome
organelle
+ genome
quality assessment
transcriptome
- 基因组质量评估:(五)mapping法:5. 用软件QualiMap统计BAM文件
- /2022/07/31/omics_genome_quality.assessment_mapping_QualiMap/
-
+ 用k-mer分析进行基因组调查:(四)用KMC进行k-mer频数统计
+ /2022/06/05/omics_genome.survey_04.KMC/
+
-1. QualiMap简介
-QualiMap是用于统计bam文件的基于java的软件,结果包含详细的统计信息和可视化图形,以及每条contig的mapping情况。
-官网(http://qualimap.conesalab.org/)有软件的详细介绍。
-每个模块运行的输入输出文件的案例都可以在这里查看:http://qualimap.conesalab.org/doc_html/samples.html#bam-samples
+用k-mer分析进行基因组调查系列:
+
-2. QualiMap的模块
-bamqc模块 (BAM QC):用于单个NGS样本bam文件的QC统计。
-rnaseq模块 (RNA-seq QC):用于转录组RNA-seq样本bam文件的QC统计。
-multi-bamqc模块 (Multi-sample BAM QC):用于多样本NGS的bam文件的分组QC统计,即包含个体数据,又包含分组比较。
-counts模块 (Counts QC):可用于转录组数据计数的统计,用于量化表达水平。
-clustering模块 :用于表观基因组(例如甲基化)特征的聚类。
-comp-counts模块 :输入bam文件和注释文件,计算映射到每个区域的reads数量。
-
-3. 下载安装 下载解压即可使用
-wget https://bitbucket.org/kokonech/qualimap/downloads/qualimap_v2.2.1.zip unzip qualimap_v2.2.1.zip cd qualimap_v2.2.1 ./qualimap -h
-
-4. 使用 4.1. bamqc模块 bamqc模块用于单个NGS样本bam文件的统计。
-
-运行
-
-qualimap bamqc -bam sample.bam -outformat PDF:HTML -outdir out -nt 12 --java-mem-size=10G
-
-参数
+【推荐】用Smudgeplot评估物种倍性后,用组合jellyfish+GenomeScope1.0做二倍体物种的基因组调查,用组合KMC+GenomeScope2.0做多倍体物种的基因组调查。
+1. k-mer进行基因组调查的软件概况 k-mer进行基因组调查分为k-mer频数统计 和基因组特征评估 两步。
+
+KMC可以实现第一步k-mer频数统计。
+KMC的结果sample.histo可以用在GenomeScope上,实现第二步基因组特征评估。
+
+2. KMC 简介
+KMC是一个用来从FASTQ/FASTA文件中计算k-mers的基于KMC二进制数据库的程序。
+KMC是波兰的Silesian University of Technology的算法和软件学院的REFRESH Bioinformatics Group 开发的工具。
+2017年发布了第三个版本,KMC3。
+KMC是主要基于C语言的程序。
+
+3. KMC 安装
+版本 有两个版本的KMC,一般使用第一个版本,Smudgeplot评估物种倍性时用到了第二个版本。
+
+下载 在KMC download 找对应系统的最新版本KMC软件,下载解压缩即可使用。
+
+mkdir KMC && cd KMC wget https://github.com/refresh-bio/KMC/releases/download/v3.2.1/KMC3.2.1.linux.tar.gz #下载最新版本的KMC tar -xzf KMC3.2.1.linux.tar.gz #解压缩和解包,生成bin文件夹和include文件夹
+
-结果
+使用 解压缩后bin目录下会包含可执行文件,可直接使用,建议加入环境变量,包括:
-所有结果下载后,可以用浏览器打开qualimapReport.html或者打开report.pdf,可以参考给出的结果例子:https://rawgit.com/kokonech/kokonech.github.io/master/qualimap/HG00096.chr20_bamqc/qualimapReport.html。
-包括以下几部分内容:
-globals:reads的mapping情况
-ACGT content:四种碱基和N的含量
-Coverage:深度
-Mapping Quality:平均值
-Insert Size:平均值和标准差
-Mismatches and indels:统计值
-Chromosome stats:每条染色体的长度,mapped bases,mean coverage,standard deviation。
-Coverage across reference:贯穿整个基因组的深度(coverage)和GC含量
-Coverage Histogram:深度分布
-genome fraction coverage
-duplication rate histogram
-mapped reads nucleotide content
-mapped reads GC-content distribution
-mapped reads clipping profile
-homopolymer indels
-mapping quality across reference
-mapping quality histogram
-insert size across reference
-insert size histogram
+bin/kmc:计算k-mer频数的主程序
+bin/kmc_dump:在kmc生成数据库中列出k-mers的程序
+bin/kmc_tools:允许操作kmc数据库的程序
-QualiMap的所有coverage都是深度,而不是覆盖度。
-4.2. rnaseq模块 与bamqc模块相似,用于RNA-seq数据的bam文件的统计。
+4. KMC 运行 用KMC计算k-mer频率,生成k-mer频数直方表和k-mer直方图。
-运行
-
-qualimap rnaseq -bam rnaseq_sample.bam -outdir rnaseq_out -outformat PDF:HTML --java-mem-size=10G
-
-参数
+运行
+mkdir tmp #创建临时文件夹 ls *.fastq.gz > FILES #用于分析的clean reads路径保存到文件FILES中 kmc -k21 -t16 -m64 -ci1 -cs10000 @FILES kmcdb tmp #计算k-mer频率 kmc_tools transform kmcdb histogram sample.histo -cx10000 #生成k-mer频数直方表sample.histo和k-mer直方图
+
+kmc命令参数
+
--bam rnaseq_sample.bam:输入的bam文件。
--outdir rnaseq_out:输出文件的目录。
--outformat PDF:HTML:输出文件格式PDF和HTML,默认是HTML。
-–java-mem-size=10G:设置最大内存为10G。
+-k21:k-mer长度设置为21
+-t16:线程16
+-m64:内存64G,设置使用RAM的大致数量,范围1-1024。
+-ci1 -cs10000:统计k-mer coverages覆盖度范围在[1-10000]的。
+@FILES:保存了输入文件列表的文件名为FILES
+kmcdb:KMC数据库的输出文件名前缀
+tmp:临时目录
-4.3. multi-bamqc模块 多样本NGS的bam文件的统计和比较。
-
-运行
+
+kmc_tools命令参数
-qualimap multi-bamqc -r -d qualimap.list -outdir out -outformat PDF:HTML --java-mem-size=10G
-
-参数
+
+-cx10000:储存在直方图文件中counter的最大值。
+
+
+结果 生成的sample.histo可用于第二步GenomeScope的分析。
+5. 基因组特征评估 获得k-mer频数分布表sample.histo后
--r:multi-bamqc
模块可以输入bam文件或者bamqc
模块的结果,如果输入bam文件则需加-r参数。
--d qualimap.list:输入文件列表,qualimap有三列,每行一个样本,第一列样品名称,第二列包含路径的bam文件/bamqc结果目录,第三列组名。
-如果用-r,qualimap.list的第二列则应为bam文件,此时multi-bamqc模块会先对每个样本运行bamqc,bamqc的结果存放在bam文件所在目录下,再进行multi-bamqc的统计。默认是用4个线程,一个样本一个样本单独跑bamqc。
--outdir out:结果文件输出目录。
--outformat PDF:HTML:结果文件格式,pdf和html都要。
-–java-mem-size=10G:设置最大内存为10G。
+推荐用GenomeScope1.0 或者GenomeScope2.0 或者GenomeScope的R脚本来做基因组特征评估和画图。
+也可直接用R绘制sample.histo的频率分布直方图/频率分布曲线。
-4.4. counts,clustering,comp-counts模块 此外,还有counts,clustering,comp-counts模块。
-… …
-5. tips 如果遇到报错RAM不足,可以加上参数--java-mem-size=10G
指定内存上限。
+5.1. GenomeScope 网页版 5.1.1. GenomeScope1.0 网页版 —— 适用于二倍体物种
+在GenomeScope1.0 网页版 上传前一步获得的k-mer频数分布表sample.histo文件。
+设置参数k-mer length为第一步选择的k-mer长度值,这里是17;参数Read length为序列读长,一般为150;最后一个参数Max kmer coverage建议修改成更大的10000,以统计更多的k-mers。
+结果显示预估的基因组大小,杂合度,重复率等信息。
+
+5.1.2. GenomeScope2.0 网页版 —— 适用于多倍体物种 GenomeScope2.0 网页版 也是类似的步骤。
+5.2. R绘制
+R绘制k-mer频数分布曲线初步查看基因组特征。
+获得kmer_plot.png为频数分布曲线,可根据曲线峰值对基因组大小进行计算和预估。
+
+kmer <- read.table( 'sample.histo' ) kmer <- subset( kmer, V1 >= 5 & V1 <= 500 ) Frequency <- kmer$ V1 Number <- kmer$ V2 png( 'kmer_plot.png' ) plot( Frequency, Number, type = 'l' , col = 'blue' ) dev.off( )
+
6. references
-http://qualimap.conesalab.org/
+KMC3 paper:https://academic.oup.com/bioinformatics/article/33/17/2759/3796399
+refresh-bio/KMC:https://github.com/refresh-bio/KMC
+tbenavi1/KMC github:https://github.com/tbenavi1/KMC
@@ -15945,17 +15795,14 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
omics
genome
- quality assessment
+ genome survey
- biosoft
+ genome survey
genome
- quality assessment
- mapping
- sam
- bam
- depth
- QualiMap
+ k-mer
+ KMC
+ GenomeScope
@@ -16017,119 +15864,36 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
uncover.bed
-文件包含sample.bam在sample.bed上bad covered或uncovered region的区域。示例:
-
-MCscaf062 3308 3324 MCscaf062 13172 13219 MCscaf063 1966 1988 MCscaf064 154 177 MCscaf065 4380 4388 MCscaf065 15265 15278 MCscaf065 49992 50000
-
-
-depth_distribution.plot
-
-
-0 1080969 0.004219 255137234 0.995781 1 375560 0.001466 254761674 0.994315 2 376656 0.001470 254385018 0.992845 3 420120 0.001640 253964898 0.991206 4 471142 0.001839 253493756 0.989367 5 548760 0.002142 252944996 0.987225
-
-
-depth.tsv.gz
-
-文件包含输入的sample.bed的每个位置的三种深度:
-
-raw depth:没有过滤的从bam文件直接提取的深度。coverage.report文件是用raw depth统计得到的。
-rmdup depth:过滤掉duplicated reads,secondary alignment reads,low map quality reads(mapQ<20)后计算的depth。开发者说类似samtools depth
的结果,但应该是raw depth类似samtools depth
,rmdup depth类似samtools mpileup
才更准确。如果想用rmdup depth统计coverage.report,运行时加上参数“–use_rmdup”。
-coverage depth:考虑deletion区域的raw depth,所以值会大于或等于raw depth的值。
-
-
-region.tsv.gz
-
-
-文件包含输入的sample.bed的每个区域的average depth,median depth,coverage。
-
-4. references
-https://github.com/shiquan/bamdst
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- omics
- genome
- quality assessment
-
-
- biosoft
- genome
- quality assessment
- mapping
- sam
- bam
- depth
- bamdst
-
-
-
- 基因组质量评估:(五)mapping法:4. 观察mapped reads的深度分布
- /2022/07/27/omics_genome_quality.assessment_mapping_depth_observe/
-
-
-1. 前情提要:mapping和depth 此篇博客在已经通过mapping获得SAM/BAM文件,且进行深度统计获得深度分布文件的基础上进行分析,
-
-关于mapping获得SAM/BAM文件的操作可以参考博客:
-
-基因组质量评估:(五)mapping法:1. 简介
-
-关于通过SAM/BAM文件统计深度分布可以参考博客:
-
-基因组质量评估:(五)mapping法:3. 统计mapped reads的深度分布
-2. 深度分布
-在测序是随机分布的情况下,期望在基因组的所有染色体上,mapped reads的depth是均匀分布的。
-把reads回mapping到组装好的基因组,通过计算depth,观察depth在基因组上的分布来判断组装的质量。
-
-3. 评估对象 用clean reads映射(mapping)回组装好的初始基因组,然后查看mapping的效果。
-
-如果是长度不长的细胞器基因组,或者核基因组的特定位置,可以在IGV直接查看mapping情况。
-如果是大的核基因组,则考虑过滤mapping得到的sam/bam文件,然后计算深度和其他统计值来评估质量。
-
-4. 查看深度 4.1. 背景
-由于叶绿体基因组 结构稳定,较少需要用这种方式评估组装质量;核基因组 较大,肉眼观察不可实现,所以此方法多用于线粒体基因组 组装质量和核基因组部分区域的评估。
-在核与细胞器同时测序情况下,由于数量分布差异,期望测序深度是叶绿体>线粒体>核基因,且三者差异是数量级级别的。
-评估线粒体基因组时,可以考虑是否有叶绿体/核的reads映射到基因组上,并同时考虑水平基因转移的可能性。
-
-线粒体基因组的mapping注意事项
-如果担心叶绿体派生的reads影响重组率的计算,可以把叶绿体基因组和线粒体基因组一起做reference做mapping,这样叶绿体的reads会被mapping到叶绿体上,从而起到过滤叶绿体派生reads的作用。
-如果担心核基因派生的reads影响,可以用一个cutoff值(比如100bp),小于100bp的mapping被筛除。同时在深度分布查看做进一步肉眼判断和筛除。
-
-4.2. 深度分布的查看 可以在IGV等bam文件可视化的软件里直观地查看mapped reads的深度分布。
-期望深度在全基因组范围保持相当,如果有极端高/低的深度,则怀疑组装错误,或者映射了错误的reads,反映了错误或者特定特征的mapped reads。
-
-重复序列
+文件包含sample.bam在sample.bed上bad covered或uncovered region的区域。示例:
+
+MCscaf062 3308 3324 MCscaf062 13172 13219 MCscaf063 1966 1988 MCscaf064 154 177 MCscaf065 4380 4388 MCscaf065 15265 15278 MCscaf065 49992 50000
+
+
+depth_distribution.plot
-如果基因组上存在重复序列,组装时只得到其中一个拷贝,则在这个拷贝处的mapped reads深度会是附近序列的两倍(三个拷贝就三倍)。
-重复序列一般只分析超过100bp(或者>50bp)的情况,这可以和核基因转移到线粒体的情况区别开。
-重复序列之间非常接近,但不一定是完美匹配。
+示例:
-
-水平基因转移【线粒体】
+0 1080969 0.004219 255137234 0.995781 1 375560 0.001466 254761674 0.994315 2 376656 0.001470 254385018 0.992845 3 420120 0.001640 253964898 0.991206 4 471142 0.001839 253493756 0.989367 5 548760 0.002142 252944996 0.987225
+
+
+depth.tsv.gz
+文件包含输入的sample.bed的每个位置的三种深度:
-显著高的深度可能是叶绿体的reads。
-显著低的深度可能是核的reads。
-轻微高的深度可能是核转移到线粒体的情况(一般这种情况映射到的序列不长,<100bp)。可以调整参数,只保留映射超过100bp的reads即可排除这种情况。
+raw depth:没有过滤的从bam文件直接提取的深度。coverage.report文件是用raw depth统计得到的。
+rmdup depth:过滤掉duplicated reads,secondary alignment reads,low map quality reads(mapQ<20)后计算的depth。开发者说类似samtools depth
的结果,但应该是raw depth类似samtools depth
,rmdup depth类似samtools mpileup
才更准确。如果想用rmdup depth统计coverage.report,运行时加上参数“–use_rmdup”。
+coverage depth:考虑deletion区域的raw depth,所以值会大于或等于raw depth的值。
-
-异质性【线粒体】 由于一个细胞中有多个细胞器,细胞器之间还可能存在不同构象或不同碱基的位点。这种情况的存在称为细胞器的异质性 (不常见)。
+
+region.tsv.gz
-具有异质位点的细胞器基因组的证据:
-排除重复序列映射的可能性。
-异质位点映射的reads包含两种(也可能多种,以下同)碱基,一般少数种的占比超过5%就可能算异质性了。
-异质位点映射的reads的两种碱基的深度加起来应该与周围位点的深度相当。
-异质位点映射的reads不全都很短(>100bp),双端测序的最好是成对映射。
-异质位点周围的位点映射了同一read,且周围位点的mapping效果很好(单一碱基,均匀深度)。
+文件包含输入的sample.bed的每个区域的average depth,median depth,coverage。
+4. references
+https://github.com/shiquan/bamdst
+
欢迎关注微信公众号:生信技工
@@ -16142,16 +15906,14 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
quality assessment
- mitogenome
+ biosoft
genome
- organelle
- samtools
quality assessment
mapping
sam
bam
depth
- plastome
+ bamdst
@@ -16246,8 +16008,8 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
mitogenome
- genome
organelle
+ genome
samtools
quality assessment
mapping
@@ -16441,8 +16203,8 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
mitogenome
- genome
organelle
+ genome
quality assessment
transcriptome
mapping
@@ -16455,76 +16217,66 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 基因组质量评估:(五)mapping法:7. 用软件mosdepth统计BAM文件的深度
- /2022/07/31/omics_genome_quality.assessment_mapping_mosdepth/
-
+ 基因组质量评估:(五)mapping法:4. 观察mapped reads的深度分布
+ /2022/07/27/omics_genome_quality.assessment_mapping_depth_observe/
+
-1. mosdepth简介 mosdepth(https://github.com/brentp/mosdepth)是用于WGS,exome,targeted sequencing的BAM/CRAM文件的测序深度计算的软件,主要是用Nim语言写的(第一次听说这种语言)。
-2. mosdepth可以得到的数据包括
-每个碱基深度的计算速度是samtools depth的约2倍。——对于 30X 基因组,大约需要 25 分钟的 CPU 时间。
-给定窗口大小的平均每个窗口深度,可用于 CNV calling。
-给定区域的 BED 文件的每个区域的平均值。
-给定窗口大小的每个区域累积覆盖率(cumulative coverage)直方图的平均值或中值。
-对于每个染色体和全基因组,在给定阈值或以上覆盖的碱基比例分布。
-合并相邻碱基的量化输出,只要它们落在相同的覆盖范围内,例如(10-20)。
-阈值输出以指示在给定阈值下每个区域中有多少个碱基被覆盖。
-每条染色体和每条染色体指定区域内的平均深度的总结。
-一个d4文件(比bigwig好)。
+1. 前情提要:mapping和depth 此篇博客在已经通过mapping获得SAM/BAM文件,且进行深度统计获得深度分布文件的基础上进行分析,
+
+关于mapping获得SAM/BAM文件的操作可以参考博客:
-3. 下载安装 直接下载已编译文件,修改权限即可使用。
-wget https://github.com/brentp/mosdepth/releases/download/v0.3.3/mosdepth chmod +x mosdepth ./mosdepth -h
-
-4. 使用
-准备
+基因组质量评估:(五)mapping法:1. 简介
+
+关于通过SAM/BAM文件统计深度分布可以参考博客:
-
-samtools index sample.bam
# 生成bam文件的索引文件sample.bam.bai
+基因组质量评估:(五)mapping法:3. 统计mapped reads的深度分布
+2. 深度分布
+在测序是随机分布的情况下,期望在基因组的所有染色体上,mapped reads的depth是均匀分布的。
+把reads回mapping到组装好的基因组,通过计算depth,观察depth在基因组上的分布来判断组装的质量。
-
-计算深度
-
+3. 评估对象 用clean reads映射(mapping)回组装好的初始基因组,然后查看mapping的效果。
-mosdepth -t 4 out sample.bam
+如果是长度不长的细胞器基因组,或者核基因组的特定位置,可以在IGV直接查看mapping情况。
+如果是大的核基因组,则考虑过滤mapping得到的sam/bam文件,然后计算深度和其他统计值来评估质量。
-
-参数
+4. 查看深度 4.1. 背景
+由于叶绿体基因组 结构稳定,较少需要用这种方式评估组装质量;核基因组 较大,肉眼观察不可实现,所以此方法多用于线粒体基因组 组装质量和核基因组部分区域的评估。
+在核与细胞器同时测序情况下,由于数量分布差异,期望测序深度是叶绿体>线粒体>核基因,且三者差异是数量级级别的。
+评估线粒体基因组时,可以考虑是否有叶绿体/核的reads映射到基因组上,并同时考虑水平基因转移的可能性。
-
--t 4:线程,需要<=4
-out:输出文件的前缀
-sample.bam:待分析的bam文件
-–by sample.bed:指定区域的bed文件,我分析整个基因组,没加这个参数。
-
-还有许多参数等着探索…
-5. 结果
-out.mosdepth.summary.txt
+线粒体基因组的mapping注意事项
+如果担心叶绿体派生的reads影响重组率的计算,可以把叶绿体基因组和线粒体基因组一起做reference做mapping,这样叶绿体的reads会被mapping到叶绿体上,从而起到过滤叶绿体派生reads的作用。
+如果担心核基因派生的reads影响,可以用一个cutoff值(比如100bp),小于100bp的mapping被筛除。同时在深度分布查看做进一步肉眼判断和筛除。
+
+4.2. 深度分布的查看 可以在IGV等bam文件可视化的软件里直观地查看mapped reads的深度分布。
+期望深度在全基因组范围保持相当,如果有极端高/低的深度,则怀疑组装错误,或者映射了错误的reads,反映了错误或者特定特征的mapped reads。
+
+重复序列
-文件包含每条染色体和整个基因组的信息,长度,mapped 碱基数量,平均深度,最小深度和最大深度。示例:
+如果基因组上存在重复序列,组装时只得到其中一个拷贝,则在这个拷贝处的mapped reads深度会是附近序列的两倍(三个拷贝就三倍)。
+重复序列一般只分析超过100bp(或者>50bp)的情况,这可以和核基因转移到线粒体的情况区别开。
+重复序列之间非常接近,但不一定是完美匹配。
-chrom length bases mean min max MCscaf001 12541575 440858440 35.15 0 3561 MCscaf002 20211832 749371193 37.08 0 8181 ... ... MCscaf265 25000 897138 35.89 0 84 MCscaf266 25000 913514 36.54 0 82 total 256218469 10404013912 40.61 0 92318
-
-out.mosdepth.global.dist.txt
+水平基因转移【线粒体】
-文件包含累积分布,指示给定覆盖率阈值下覆盖的总碱基的比例。包含三列:染色体/total,覆盖水平,该级别覆盖的碱基比例。示例:
+显著高的深度可能是叶绿体的reads。
+显著低的深度可能是核的reads。
+轻微高的深度可能是核转移到线粒体的情况(一般这种情况映射到的序列不长,<100bp)。可以调整参数,只保留映射超过100bp的reads即可排除这种情况。
-MCscaf001 1961 0.00 MCscaf001 1960 0.00 MCscaf001 1957 0.00 ... ... total 2 0.99 total 1 1.00 total 0 1.00
-
-还可以用脚本python scripts/plot-dist.py \*global.dist.txt
画图,输出dist.html
,可以看出整个基因组的覆盖度的分布。
-out.per-base.bed.gz
+异质性【线粒体】 由于一个细胞中有多个细胞器,细胞器之间还可能存在不同构象或不同碱基的位点。这种情况的存在称为细胞器的异质性 (不常见)。
+具有异质位点的细胞器基因组的证据:
-每个碱基的输出数据。
+排除重复序列映射的可能性。
+异质位点映射的reads包含两种(也可能多种,以下同)碱基,一般少数种的占比超过5%就可能算异质性了。
+异质位点映射的reads的两种碱基的深度加起来应该与周围位点的深度相当。
+异质位点映射的reads不全都很短(>100bp),双端测序的最好是成对映射。
+异质位点周围的位点映射了同一read,且周围位点的mapping效果很好(单一碱基,均匀深度)。
-
-out.per-base.bed.gz.csi
-
-6. references
-https://github.com/brentp/mosdepth
-
欢迎关注微信公众号:生信技工
@@ -16537,97 +16289,116 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
quality assessment
- biosoft
+ mitogenome
+ organelle
genome
+ samtools
quality assessment
mapping
sam
bam
depth
- mosdepth
+ plastome
- 基因组质量评估:(五)mapping法:2. samtools计算mapping rate
- /2022/07/23/omics_genome_quality.assessment_mapping_rate_samtools/
-
-
-1. mapping rate 通过mapping把reads与组装好的基因组进行alignment,然后分析mapped reads的sam/bam格式文件,统计mapping rate来评估基因组组装质量。期望mapping rate越接近100%,组装质量越高。
-2. Hisat2统计的mapping rate 运行Hisat2对RNA-seq进行mapping时生成的log文件hisat.log
会保存着比对的mapping rate信息。
-
-hisat2比对统计结果hisat.log示例
-
-19429766 reads; of these: # reads总数 19429766 (100.00%) were paired; of these: # 配对的reads数量 1066192 (5.49%) aligned concordantly 0 times # 一致地比对了0次的reads数量 14853850 (76.45%) aligned concordantly exactly 1 time # 一致地比对了1次的reads数量 3509724 (18.06%) aligned concordantly >1 times # 一致地比对了大于1次的reads数量 ---- 1066192 pairs aligned concordantly 0 times; of these: # 一致地比对了0次的reads数量中: 54954 (5.15%) aligned discordantly 1 time # 不一致地比对了1次的reads数量 ---- 1011238 pairs aligned 0 times concordantly or discordantly; of these: #一致或不一致地比对了0次的reads数量中: 2022476 mates make up the pairs; of these: # 配对的reads数量中: 1211647 (59.91%) aligned 0 times #比对0次的数量 607196 (30.02%) aligned exactly 1 time #比对1次的数量 203633 (10.07%) aligned >1 times #比对大于1次的数量 96.88% overall alignment rate # mapping rate,由mapped reads number/total reads number的比例计算得到 [bam_sort_core] merging from 20 files and 4 in-memory blocks...
+ 基因组质量评估:(五)mapping法:5. 用软件QualiMap统计BAM文件
+ /2022/07/31/omics_genome_quality.assessment_mapping_QualiMap/
+
-
-hisat2结果解释
-
-
-hisat.log结果中,19429766 reads; of these:
及大部分包含的信息中,双端测序的reads是只统计一次的。比如19429766 reads代表的是有19429766对双端测序的reads,总reads数量是$19429766*2=38859532$条。
-在2022476 mates make up the pairs; of these:
及之后包含的信息中,代表配对的reads数量,双端测序的reads是统计了配对的所有reads,总reads数量就是2022476条。
+1. QualiMap简介
-
-hisat2的mapping rate的计算
+2. QualiMap的模块
+bamqc模块 (BAM QC):用于单个NGS样本bam文件的QC统计。
+rnaseq模块 (RNA-seq QC):用于转录组RNA-seq样本bam文件的QC统计。
+multi-bamqc模块 (Multi-sample BAM QC):用于多样本NGS的bam文件的分组QC统计,即包含个体数据,又包含分组比较。
+counts模块 (Counts QC):可用于转录组数据计数的统计,用于量化表达水平。
+clustering模块 :用于表观基因组(例如甲基化)特征的聚类。
+comp-counts模块 :输入bam文件和注释文件,计算映射到每个区域的reads数量。
-96.88%的overall alignment rate即为mapping rate,计算方法是:
-$$mapping rate=mapped reads number/total reads number$$
-
-total reads number用的$19429766*2$。
-mapped reads number包含:concordantly exactly 1 time(14853850*2),aligned concordantly >1 times(3509724*2),aligned discordantly 1 time(54954*2),mates make up the pairs中的aligned exactly 1 time(607196)和aligned >1 times(203633)。
-
- $$mapping rate=((14853850+3509724+54954)*2+607196+203633)/(19429766*2) = 37647885/38859532*100%=96.88%$$
-
-mapped reads number的另一种计算方法:concordantly exactly 1 time(14853850),aligned concordantly >1 times(3509724),aligned concordantly 0 times(1066192)中aligned到的所有reads,即除了aligned concordantly 0 times(1066192)中的aligned 0 times(1211647/2)以外的所有reads。
-
- $$mapping rate=(14853850+3509724+54954+1066192-(1211647/2))/19429766*100%=96.88%$$
-3. samtools flagstat统计mapping rate
-samtools flagstat
+3. 下载安装 下载解压即可使用
+wget https://bitbucket.org/kokonech/qualimap/downloads/qualimap_v2.2.1.zip unzip qualimap_v2.2.1.zip cd qualimap_v2.2.1 ./qualimap -h
+
+4. 使用 4.1. bamqc模块 bamqc模块用于单个NGS样本bam文件的统计。
+
+运行
-
-如果hisat2运行时未保存log文件,也可以用samtools flagstat
来计算reads的mapping统计值。
-illumina reads和Pacbio reads等的sam/bam文件也可以用这种方式统计mapping rate。
-flagstat统计结果中,记录的是sam/bam文件中reads的记录数量,即mapping record rate(双端测序包含配对的所有reads)。
-
+qualimap bamqc -bam sample.bam -outformat PDF:HTML -outdir out -nt 12 --java-mem-size=10G
-samtools flagstat统计
+参数
-samtools flagstat output.bam > output.flagstat
+-bam sample.bam:指定bam文件。
+-outformat PDF:HTML:输出文件格式PDF和HTML,默认是HTML。
+-outdir out:输出文件的目录,不指定则生成sample_stats目录。
+-nt 12:线程12,默认是144。
+–java-mem-size=10G:设置最大内存为10G,建议每个模块都设置。
-output.flagstat的结果示例
-
-51231959 + 0 in total (QC-passed reads + QC-failed reads) #共有51231959条reads通过QC+0条reads未通过QC,后面的信息行中+后的都是代表QC没通过的reads的数量。 12372427 + 0 secondary 0 + 0 supplementary 0 + 0 duplicates 50020312 + 0 mapped (97.63% : N/A) # 97.63%比例的reads mapping到参考序列上,这就是mapping record rate 38859532 + 0 paired in sequencing 19429766 + 0 read1 # 双端reads中read1的总数 19429766 + 0 read2 # 双端reads中read2的总数 36727148 + 0 properly paired (94.51% : N/A) # 94.51%比例的reads成对的映射上 37160066 + 0 with itself and mate mapped # read映射上但配对read没映射上的数量 487819 + 0 singletons (1.26% : N/A) # 1.26%比例的read没映射上的同时,配对read映射上了 289948 + 0 with mate mapped to a different chr # reads和配对reads映射到不同染色体的情况下的reads数量 205767 + 0 with mate mapped to a different chr (mapQ>=5) # reads和配对reads映射到不同染色体,且映射质量大于等于5的情况下的reads数量
-
-
-samtools flagstat的mapping record rate的计算方法
+结果
-$$mapping record rate=mapped recorder number/total recorder number=((primary) mapped reads number + secondary mapped reads number)/(total reads number + secondary mapped reads number)$$
-其中,recorder number代表sam文件中去除header部分的比对记录数量(每行一条比对记录,即行数)。
-同一reads可能多次mapping,有多条记录,所以recorder number的数量会比reads number多。
+所有结果下载后,可以用浏览器打开qualimapReport.html或者打开report.pdf,可以参考给出的结果例子:https://rawgit.com/kokonech/kokonech.github.io/master/qualimap/HG00096.chr20_bamqc/qualimapReport.html。
+包括以下几部分内容:
-mapped recorder number用的是50020312;
-total recorder number用的是51231959;
-secondary mapped reads number是12372427;
+globals:reads的mapping情况
+ACGT content:四种碱基和N的含量
+Coverage:深度
+Mapping Quality:平均值
+Insert Size:平均值和标准差
+Mismatches and indels:统计值
+Chromosome stats:每条染色体的长度,mapped bases,mean coverage,standard deviation。
+Coverage across reference:贯穿整个基因组的深度(coverage)和GC含量
+Coverage Histogram:深度分布
+genome fraction coverage
+duplication rate histogram
+mapped reads nucleotide content
+mapped reads GC-content distribution
+mapped reads clipping profile
+homopolymer indels
+mapping quality across reference
+mapping quality histogram
+insert size across reference
+insert size histogram
-$$mapping record rate=50020312/51231959*100%=97.63%$$
-有文章直接用mapping record rate,但建议用mapping rate来代表mapped reads的比例。
-
-与hisat2的统计结果的不同
+QualiMap的所有coverage都是深度,而不是覆盖度。
+4.2. rnaseq模块 与bamqc模块相似,用于RNA-seq数据的bam文件的统计。
+
+运行
+
+qualimap rnaseq -bam rnaseq_sample.bam -outdir rnaseq_out -outformat PDF:HTML --java-mem-size=10G
+
+参数
-samtools flagstat的mapping record rate(97.63%)比hisat2的mapping rate(96.88%)高一些,原因在于计算方式的区别。
+-bam rnaseq_sample.bam:输入的bam文件。
+-outdir rnaseq_out:输出文件的目录。
+-outformat PDF:HTML:输出文件格式PDF和HTML,默认是HTML。
+–java-mem-size=10G:设置最大内存为10G。
-
-计算mapping rate
+4.3. multi-bamqc模块 多样本NGS的bam文件的统计和比较。
+
+运行
+
+qualimap multi-bamqc -r -d qualimap.list -outdir out -outformat PDF:HTML --java-mem-size=10G
+
+参数
-通常我们在文章中使用reads的比例来代表mapping rate(即hisat2的计算方式),通过计算公式,可以利用samtools flagsta的统计数据计算mapping rate。
+-r:multi-bamqc
模块可以输入bam文件或者bamqc
模块的结果,如果输入bam文件则需加-r参数。
+-d qualimap.list:输入文件列表,qualimap有三列,每行一个样本,第一列样品名称,第二列包含路径的bam文件/bamqc结果目录,第三列组名。
+如果用-r,qualimap.list的第二列则应为bam文件,此时multi-bamqc模块会先对每个样本运行bamqc,bamqc的结果存放在bam文件所在目录下,再进行multi-bamqc的统计。默认是用4个线程,一个样本一个样本单独跑bamqc。
+-outdir out:结果文件输出目录。
+-outformat PDF:HTML:结果文件格式,pdf和html都要。
+–java-mem-size=10G:设置最大内存为10G。
-$$mapping rate = mapped reads number/total reads number = (mapped recorder number - secondary mapped reads number)/(total recorder number - secondary mapped reads number) = (50020312-12372427)/(51231959-12372427) = 37647885/38859532*100% = 96.88%$$
-这样计算得到的mapping rate就和hisat2的log文件一致了。
-4. references
-hisat2和samtools flagstat计算的mapping rate不同的解释:https://zhuanlan.zhihu.com/p/73208822
+4.4. counts,clustering,comp-counts模块 此外,还有counts,clustering,comp-counts模块。
+… …
+5. tips 如果遇到报错RAM不足,可以加上参数--java-mem-size=10G
指定内存上限。
+6. references
+http://qualimap.conesalab.org/
@@ -16641,16 +16412,14 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
quality assessment
+ biosoft
genome
- samtools
quality assessment
- transcriptome
mapping
sam
bam
- HiSat2
- mapping rate
- samtools flagstat
+ depth
+ QualiMap
@@ -16881,7 +16650,7 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
SEQ_FEAT.TransLen
SEQ_FEAT.BadInternalCharacter
@@ -17321,126 +17090,6 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
GATK
-
- 用SPAdes对Illumina二代测序数据进行基因组预组装
- /2024/11/05/omics_genome.assembly_NGS_SPAdes/
-
-
-1. SPAdes简介 SPAdes (St. Petersburg genome assembler) 是2012年首次开发的一个多功能工具包,用于组装和分析测序数据,并包括校错功能。
-
-SPAdes 主要针对 Illumina 测序数据开发,但也可用于 IonTorrent。 大多数 SPAdes 管道都支持二代三代reads混合组装,即允许使用长读数(PacBio 和 Oxford Nanopore)作为补充数据。
-SPAdes 软件包为分离株、单细胞细菌、元基因组和转录组数据的DNA组装提供了管道。
-附加模式允许恢复细菌质粒和 RNA 病毒,以及执行 HMM 引导的组装。
-此外,SPAdes软件包还包括辅助工具,用于高效的k-mer计数和基于k-mer的读数过滤、组装图构建和简化、序列到图的比对以及元基因组分选细化。
-
-最新的SPAdes v4.0.0版本支持NCBI的SRA文件作为输入。
-2. SPAdes安装
-下载预安装的二进制文件
-
-wget https://github.com/ablab/spades/releases/download/v4.0.0/SPAdes-4.0.0-Linux.tar.gz # 下载 tar -xzf SPAdes-4.0.0-Linux.tar.gz # 解压缩 ./SPAdes-4.0.0-Linux/bin/spades.py -h # 查看参数 ./SPAdes-4.0.0-Linux/bin/spades.py --test # 测试运行
-
-
-conda安装:conda install bioconda::spades
-
-3. SPAdes运行
-命令
-
-
-nohup spades.py -o /path/to/output_directory/ -t 32 -1 /path/to/sample_clean_R1.fq.gz -2 /path/to/sample_clean_R2.fq.gz --careful 2>&1 > spades.log &
-
-
-基本参数
-
-
--o :指定输出文件目录
--1, -2:指定paired-end测序文件
-–merged:指定合并的paired-end测序文件
--s:指定single-end测序文件
--t:指定运行线程
--m int:设定内存的限制,单位为 Gb。如果程序使用的内存达到此值,则程序会终止运行。默认值是 250 。
--k:kmer数,一次可以输入多个,用逗号分隔,数值从小到大排列,kmer最大为127,数值必须是奇数,一般自动选择即可,–sc参数,则默认值为 21,33,55。若没有 –sc参数,则程序会根据 reads长度自动选择 k-mer参数。
-
-
-运行模式参数
-
-
-–isolate:对于高覆盖率的分离和多细胞 Illumina 数据,强烈建议使用此参数;它能提高组装质量并缩短运行时间。 我们还建议在组装前对reads进行QC和trim。 该选项与–only-error-correction 或–careful 选项不兼容。
-–sc:对于MDA扩增单细胞(single-cell)数据使用此参数。假设覆盖范围极不均匀且存在扩增伪影。
-–meta:运行metaSPAdes模式,在组装元基因组数据集时使用此参数,同metaspades.py。 目前,metaSPAdes 只支持单个短读数文库,而且必须是成对的短读数文库(我们希望尽快取消这一限制)。 此外,您还可以提供长读数(例如使用–pacbio 或–nanopore 选项),但是元基因组的混合组装仍然是一个实验管道,无法保证最佳性能。 它不支持careful mode(不提供错配校正)。 此外,您不能为 metaSPAdes 指定覆盖率截止值。 请注意,metaSPAdes 可能对数据中残留的技术序列(比如接头序列)非常敏感,因此请对原始数据进行质量控制并对数据进行相应的预处理后再使用。
-–plasmid:运行plasmidSPAdes模式,在用WGS数据集组装质粒时用此参数,同plasmidspades.py。与单细胞模式(–sc)不兼容。不推荐在一个以上的库中运行此模式。
-–metaplasmid和–metaviral:这些参数专门用于从元基因组组装中提取染色体外的元素。 它们运行类似的管道,但在简化步骤上略有不同;一个区别是,在metaviral模式下,我们输出线性的推断的染色体外contigs,而在metaplasmid模式下,我们不输出线性的推断的染色体外contigs。 此外,对于plasmidSPAdes、metaplasmidSPAdes和metaviralSPAdes,我们建议使用viralVerify工具验证生成的contigs。
-–bio:生物合成模式。
-–rna:RNA-seq数据模式。
-–rnaviral:病毒RNA数据模式。
-–corona:启用HMM引导的冠状病毒组装模块。
-–iontorrent:IonTorrent数据模式,允许BAM格式文件作为输入。
-–sevage:SARS-CoV-2废水样本模式。
-
-
-管道运行参数
-
-
-–careful:通过运行 MismatchCorrector模块进行基因组上 mismatches和 short indels的修正。推荐使用此参数。
-–only-error-correction:仅仅执行 reads error correction 步骤
-–only-assembler:仅仅运行组装模块
-–continue:从上一次终止处继续运行程序。
-–restart-from :从指定的位置重新开始运行程序。和上一个参数相比,此参数可以用于改变一些组装参数。可选的值有:ec 从 error correction 处开始;as 从 assembly module 处开始;k 从指定的 k 值处开始;mc 从 mismatch correction 处开始;last从最后可用的check-point开始,类似–continue。
-–checkpoints :生成一些checkpoints,允许SPAdes从运行中间阶段重新开始运行。可用的mode包括none(默认),all(生成所有checkpoints),last(只在SPAdes报错时生成一个checkpoint)。
-
-
-其他参数
-
-
-–phred-offset:碱基质量格式, 33 或 64。默认自动检测。
-
-
-运行时间:32个线程,34Gb Illumina paired-end clean reads,9:40-
-
-4. SPAdes输出结果
-结果文件
-
-
-/corrected/:directory contains reads corrected by BayesHammer in *.fastq.gz files; if compression is disabled, reads are stored in uncompressed *.fastq files
-/scaffolds.fasta:即组装结果scaffolds文件,推荐作为结果文件或下一步分析使用。
-/contigs.fasta:即组装结果contigs文件
-/assembly_graph_with_scaffolds.gfa:contains SPAdes assembly graph and scaffolds paths in GFA 1.2 format
-/assembly_graph.fastg:contains SPAdes assembly graph in FASTG format
-/contigs.paths:contains paths in the assembly graph corresponding to contigs.fasta
-/scaffolds.paths:contains paths in the assembly graph corresponding to scaffolds.fasta
-
-tips
-内存不够报错:如果默认的250Gb内存不够,会在log文件出现报错信息:
-
-
-ERROR General (mmapped_reader.hpp : 52) mmap(2) failed. Reason: Cannot allocate memory. Error code: 12。
-
-
-这时,用nohup spades.py -o /path/to/output_directory/ -t 16 -m 500 --restart-from last --checkpoints last 2>&1 > spades.log &
命令重新运行,并指定500Gb内存。(不能用–continue而用–restart-from last是因为要改变参数,–continue不接受-o参数以外的其他所有参数)
-
-5. reference
-github:https://github.com/ablab/spades
-官方教程:http://ablab.github.io/spades/
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- omics
- genome
- genome assembly
-
-
- genome assembly
- NGS
- SPAdes
- Illumina
- contig
- scaffold
-
-
线粒体的重复介导重组的鉴定和计算重组频率
/2023/03/14/omics_organelle_recombination.frequency/
@@ -17639,102 +17288,11 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
mitogenome
repeat
- recombination
- rearrangement
- insert size
- recombination frequency
- ROUSFinder
-
-
-
- 用miniprot做蛋白序列和基因组序列间的比对
- /2024/09/30/bioinfo_alignment_prot_miniprot/
-
-
-1. miniprot介绍 需要进行蛋白序列与基因组序列的比对,可以用李恒团队开发的miniprot。
-2. miniprot安装
-conda安装:conda install miniprot
-下载安装:仅依赖zlib
-
-git clone https://github.com/lh3/miniprot cd miniprot && make
-
-3. miniprot使用 基因组genome.fna和蛋白序列protein.faa进行比对
-3.1. 先建索引,再比对【推荐】
-建立索引:会将基因组genome.fna翻译成氨基酸序列,费时。
-
-
-miniprot -d genome.mpi genome.fna
-
-
-比对:翻译的基因组氨基酸序列与指定的蛋白序列进行比对
-
--miniprot --gff -It16 --gff genome.mpi protein.faa > aln.gff
-3.2. 建索引和比对一步完成
-miniprot -Iut16 --gff genome.fna protein.faa > aln.gff
-
-references
-github:https://github.com/lh3/miniprot
-
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- bioinfo
- alignment
- prot
-
-
- miniprot
- align
-
-
-
- scripts
- /2021/04/01/programming_scripts/
-
-
-1. 我写的脚本 1.1. 多个RNA-seq数据,基于参考基因组的转录本组装和ORF预测 multi-transcriptome_assembly_with_ref.sh
-1.2. 提取,合并,和比对单拷贝基因和蛋白 extract_single_copy_genes.sh
-1.3. 合并不同物种数量的多序列比对文件,保持序列的比对 concat_msa_with_differenct_species.sh
-2. 我修改的脚本(其他人写的) 2.1. 从包含mRNA和CDS的gff注释文件中提取intron的位置和长度信息 extract_intron_info.pl
-3. 保存的脚本 3.1. batch_run.sh —— 多线程并行运行批量化命令 batch_run.sh
-# !/bin/bash # batch_run.sh脚本用于多线程并行批量化循环命令,并控制并行数量始终为${thread} 。 # usage: 修改thread=后的值为想要设定的并行线程数,把需要并行的命令替换23行的run something。运行脚本batch_run.sh,实现并行运行循环任务。 # ref:网上找的脚本,来源找不到了,侵删。 thread=16 start_time=`date +%s` # 定义脚本运行的开始时间 echo ${start_time} tmpFifo=/tmp/$$.fifo # 声明管道名称,$$表示脚本当前运行的进程PID mkfifo ${tmpFifo} # 创建有名管道 exec 3<>${tmpFifo} #创建文件描述符,以可读(<)可写(>)的方式关联管道文件,这时候文件描述符3就有了有名管道文件的所有特性 rm -rf ${tmpFifo} #关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除,我们留下文件描述符来用就可以了 for ((i=1;i<=${thread};i++)) do echo "" >&3 #&3代表引用文件描述符3,这条命令代表往管道里面放入了一个"令牌" done for sample in $(cat sample_list.txt) #并行运行的循环 do read -u3 #代表从管道中读取一个令牌 { echo ${sample} run something # 需要并行运行的真实命令 echo 'success' ${sample} echo "" >&3 #代表我这一次命令执行到最后,把令牌放回管道 } & done # wait stop_time=`date +%s` #定义脚本运行的结束时间 echo "TIME:`expr $stop_time - $start_time`" exec 3<&- #关闭文件描述符的读 exec 3>&- #关闭文件描述符的写
-
-3.2. infernal-tblout2gff.pl —— 基因组ncRNA的infernal注释结果tblout格式转换成gff格式
-背景 用Infernal注释基因组的ncRNA,得到的结果可以用脚本整理成gff3格式。
-
-脚本来源:https://www.cnblogs.com/jessepeng/p/15392809.html
-
-脚本
-
-use strict;use warnings;use Getopt::Long;my $in_tblout = "" ; my $usage;$usage = "infernal-tblout2gff.pl\n\n" ; $usage .= "Usage:\n\n" ; $usage .= "infernal-tblout2gff.pl [OPTIONS] <cmsearch tblout file>\n\tOR\n" ; $usage .= "infernal-tblout2gff.pl --cmscan [OPTIONS] <cmscan tblout file>\n\tOR\n" ; $usage .= "infernal-tblout2gff.pl --cmscan --fmt2 [OPTIONS] <cmscan --fmt 2 tblout file>\n\n" ; $usage .= "\tOPTIONS:\n" ; $usage .= "\t\t-T <n> : minimum bit score to include is <n>\n" ; $usage .= "\t\t-E <x> : maximum E-value to include is <x>\n" ; $usage .= "\t\t--cmscan : tblout file was created by cmscan\n" ; $usage .= "\t\t--source <s> : specify 'source' field should be <s> (e.g. tRNAscan-SE)\n" ; $usage .= "\t\t--fmt2 : tblout file was created with cmscan --fmt 2 option\n" ; $usage .= "\t\t--all : output all info in 'attributes' column [default: E-value]\n" ; $usage .= "\t\t--none : output no info in 'attributes' column [default: E-value]\n" ; $usage .= "\t\t--desc : output desc field in 'attributes' column [default: E-value]\n" ; $usage .= "\t\t--version <s>: append \"-<s>\" to 'source' column\n" ; $usage .= "\t\t--extra <s> : append \"<s>;\" to 'attributes' column\n" ; $usage .= "\t\t--hidedesc : do not includ \"desc\:\" prior to desc value in 'attributes' column\n" ; my $do_minscore = 0 ; my $do_maxevalue = 0 ; my $minscore = undef ; my $maxevalue = undef ; my $do_cmscan = 0 ; my $do_fmt2 = 0 ; my $do_all_attributes = 0 ; my $do_no_attributes = 0 ; my $do_de_attributes = 0 ; my $version = undef ; my $extra = undef ; my $do_hidedesc = 0 ; my $opt_source = undef ; &GetOptions( "T=s" => \$minscore, "E=s" => \$maxevalue, "cmscan" => \$do_cmscan, "source=s" => \$opt_source, "fmt2" => \$do_fmt2, "all" => \$do_all_attributes, "none" => \$do_no_attributes, "desc" => \$do_de_attributes, "version=s" => \$version, "extra=s" => \$extra, "hidedesc" => \$do_hidedesc); if (scalar (@ARGV) != 1 ) { die $usage; }my ($tblout_file) = @ARGV;if (defined $minscore) { $do_minscore = 1 ; }if (defined $maxevalue) { $do_maxevalue = 1 ; }if ($do_minscore && $do_maxevalue) { die "ERROR, -T and -E cannot be used in combination. Pick one." ; } if (($do_all_attributes) && ($do_no_attributes)) { die "ERROR, --all and --none cannot be used in combination. Pick one." ; } if (($do_all_attributes) && ($do_de_attributes)) { die "ERROR, --all and --desc cannot be used in combination. Pick one." ; } if (($do_no_attributes) && ($do_de_attributes)) { die "ERROR, --none and --desc cannot be used in combination. Pick one." ; } if (($do_fmt2) && (! $do_cmscan)) { die "ERROR, --fmt2 only makes sense in combination with --cmscan" ; } if ((defined $opt_source) && (defined $version)) { die "ERROR, --source and --version are incompatible" ; } if (! -e $tblout_file) { die "ERROR tblout file $tblout_file does not exist" ; }if (! -s $tblout_file) { die "ERROR tblout file $tblout_file is empty" ; }my $source = ($do_cmscan) ? "cmscan" : "cmsearch" ;if (defined $version) { $source .= "-" . $version; }if (defined $opt_source) { $source = $opt_source; }open (IN, $tblout_file) || die "ERROR unable to open $tblout_file for reading" ; my $line;my $i;while ($line = <IN>) { if ($line !~ m/^\#/ ) { chomp $line; my @el_A = split (/\s+/ , $line); my $nfields = scalar (@el_A); if ((! $do_fmt2) && ($nfields < 18 )) { die "ERROR expected at least 18 space delimited fields in tblout line (fmt 1, default) but got $nfields on line:\n$line\n" ; } if (($do_fmt2) && ($nfields < 27 )) { die "ERROR expected at least 27 space delimited fields in tblout line (fmt 2, --fmt2) but got $nfields on line:\n$line\n" ; } my $idx = undef ; my $seqname = undef ; my $seqaccn = undef ; my $mdlname = undef ; my $mdlaccn = undef ; my $clan = undef ; my $mdl = undef ; my $mdlfrom = undef ; my $mdlto = undef ; my $seqfrom = undef ; my $seqto = undef ; my $strand = undef ; my $trunc = undef ; my $pass = undef ; my $gc = undef ; my $bias = undef ; my $score = undef ; my $evalue = undef ; my $inc = undef ; my $olp = undef ; my $anyidx = undef ; my $anyfrct1= undef ; my $anyfrct2= undef ; my $winidx = undef ; my $winfrct1= undef ; my $winfrct2= undef ; my $desc = undef ; if ($do_fmt2) { $idx = $el_A[0 ]; $seqname = ($do_cmscan) ? $el_A[3 ] : $el_A[1 ]; $seqaccn = ($do_cmscan) ? $el_A[4 ] : $el_A[2 ]; $mdlname = ($do_cmscan) ? $el_A[1 ] : $el_A[3 ]; $mdlaccn = ($do_cmscan) ? $el_A[2 ] : $el_A[4 ]; $clan = $el_A[5 ]; $mdl = $el_A[6 ]; $mdlfrom = $el_A[7 ]; $mdlto = $el_A[8 ]; $seqfrom = $el_A[9 ]; $seqto = $el_A[10 ]; $strand = $el_A[11 ]; $trunc = $el_A[12 ]; $pass = $el_A[13 ]; $gc = $el_A[14 ]; $bias = $el_A[15 ]; $score = $el_A[16 ]; $evalue = $el_A[17 ]; $inc = $el_A[18 ]; $olp = $el_A[19 ]; $anyidx = $el_A[20 ]; $anyfrct1= $el_A[21 ]; $anyfrct2= $el_A[22 ]; $winidx = $el_A[23 ]; $winfrct1= $el_A[24 ]; $winfrct2= $el_A[25 ]; $desc = $el_A[26 ]; for ($i = 27 ; $i < $nfields; $i++) { $desc .= "_" . $el_A[$i]; } } else { $seqname = ($do_cmscan) ? $el_A[2 ] : $el_A[0 ]; $seqaccn = ($do_cmscan) ? $el_A[3 ] : $el_A[1 ]; $mdlname = ($do_cmscan) ? $el_A[0 ] : $el_A[2 ]; $mdlaccn = ($do_cmscan) ? $el_A[1 ] : $el_A[3 ]; $mdl = $el_A[4 ]; $mdlfrom = $el_A[5 ]; $mdlto = $el_A[6 ]; $seqfrom = $el_A[7 ]; $seqto = $el_A[8 ]; $strand = $el_A[9 ]; $trunc = $el_A[10 ]; $pass = $el_A[11 ]; $gc = $el_A[12 ]; $bias = $el_A[13 ]; $score = $el_A[14 ]; $evalue = $el_A[15 ]; $inc = $el_A[16 ]; $desc = $el_A[17 ]; for ($i = 18 ; $i < $nfields; $i++) { $desc .= "_" . $el_A[$i]; } } if (($strand ne "+" ) && ($strand ne "-" )) { if (($do_fmt2) && (($seqfrom eq "+" ) || ($seqfrom eq "-" ))) { die "ERROR problem parsing, you specified --fmt2 but tblout file appears to have NOT been created with --fmt 2, retry without --fmt2\nproblematic line:\n$line\n" ; } if ((! $do_fmt2) && (($pass eq "+" ) || ($pass eq "-" ))) { die "ERROR problem parsing, you did not specify --fmt2 but tblout file appears to have been created with --fmt 2, retry with --fmt2\nproblematic line:\n$line\n" ; } die "ERROR unable to parse, problematic line:\n$line\n" ; } if (($do_minscore) && ($score < $minscore)) { ; } elsif (($do_maxevalue) && ($evalue > $maxevalue)) { ; } else { my $attributes = "evalue=" . $evalue; if ($do_all_attributes) { if ($do_fmt2) { $attributes .= sprintf (";idx=$idx;seqaccn=$seqaccn;mdlaccn=$mdlaccn;clan=$clan;mdl=$mdl;mdlfrom=$mdlfrom;mdlto=$mdlto;trunc=$trunc;pass=$pass;gc=$gc;bias=$bias;inc=$inc;olp=$olp;anyidx=$anyidx;anyfrct1=$anyfrct1;anyfrct2=$anyfrct2;winidx=$winidx;winfrct1=$winfrct1;winfrct2=$winfrct2;%s$desc" , ($do_hidedesc ? "" : "desc=" )); } else { $attributes .= sprintf (";seqaccn=$seqaccn;mdlaccn=$mdlaccn;mdl=$mdl;mdlfrom=$mdlfrom;mdlto=$mdlto;trunc=$trunc;pass=$pass;gc=$gc;bias=$bias;inc=$inc;%s$desc" , ($do_hidedesc ? "" : "desc=" )); } } elsif ($do_no_attributes) { $attributes = "-" ; } elsif ($do_de_attributes) { $attributes = $desc; } if (defined $extra) { if ($attributes eq "-" ) { $attributes = "" ; } elsif ($attributes !~ m/\;$/ ) { $attributes .= ";" ; } $attributes .= $extra . ";" ; } printf ("%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t%s\t%s\n" , $seqname, $source, $mdlname, ($strand eq "+" ) ? $seqfrom : $seqto, ($strand eq "+" ) ? $seqto : $seqfrom, $score, $strand, "." , $attributes); } } }
-
-
-运行perl infernal-tblout2gff.pl --cmscan --fmt2 genome.tblout >genome.infernal.ncRNA.gff3
-
-输入是Infernal的table格式输出文件,输出是gff3格式的ncRNA注释文件。
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
- ]]>
-
- programming
- scripts
-
-
- biosoft
- scripts
- batch_run.sh
- ROUSFinder2.0.py
- extract_intron_info.pl
- multi-transcriptome_assembly_with_ref.sh
- extract_single_copy_genes.sh
- concat_msa_with_differenct_species.sh
+ recombination
+ rearrangement
+ insert size
+ recombination frequency
+ ROUSFinder
@@ -17923,75 +17481,285 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- 参考文献管理软件EndNote的中英文混排技巧
- /2023/05/11/tools_academia_EndNote/
-
+ 基因组质量评估:(五)mapping法:2. samtools计算mapping rate
+ /2022/07/23/omics_genome_quality.assessment_mapping_rate_samtools/
+
-1. EndNote的中英文混排 1.1. 添加EndNote的【中文文献】类型
-在EndNote中选择【Edit】-【References】,找到【Reference Types】选项;
-【Default Reference Type】选择【unused】1/2/3中的任意一个之前未被修改过的,然后选择【Modify Reference Types】;
-在弹出的【Modify Reference Types】对话框中按照下面的图片输入每项内容。包括【Generic】命名为【中文文献】,【Author】填入【Author】,【Year】填入【Year】,【Title】填入【Title】,【Secondary Author】填入【Secondary Author】,【Secondary Title】要填入【Journal】,【Volume】填入【Volume】,【Number of Volumes】填入【Issue】,【Pages】填入【Pages】,其他都一致,点击【OK】后就添加了【中文文献】的参考文献类型。
+1. mapping rate 通过mapping把reads与组装好的基因组进行alignment,然后分析mapped reads的sam/bam格式文件,统计mapping rate来评估基因组组装质量。期望mapping rate越接近100%,组装质量越高。
+2. Hisat2统计的mapping rate 运行Hisat2对RNA-seq进行mapping时生成的log文件hisat.log
会保存着比对的mapping rate信息。
+
+hisat2比对统计结果hisat.log示例
+
+19429766 reads; of these: # reads总数 19429766 (100.00%) were paired; of these: # 配对的reads数量 1066192 (5.49%) aligned concordantly 0 times # 一致地比对了0次的reads数量 14853850 (76.45%) aligned concordantly exactly 1 time # 一致地比对了1次的reads数量 3509724 (18.06%) aligned concordantly >1 times # 一致地比对了大于1次的reads数量 ---- 1066192 pairs aligned concordantly 0 times; of these: # 一致地比对了0次的reads数量中: 54954 (5.15%) aligned discordantly 1 time # 不一致地比对了1次的reads数量 ---- 1011238 pairs aligned 0 times concordantly or discordantly; of these: #一致或不一致地比对了0次的reads数量中: 2022476 mates make up the pairs; of these: # 配对的reads数量中: 1211647 (59.91%) aligned 0 times #比对0次的数量 607196 (30.02%) aligned exactly 1 time #比对1次的数量 203633 (10.07%) aligned >1 times #比对大于1次的数量 96.88% overall alignment rate # mapping rate,由mapped reads number/total reads number的比例计算得到 [bam_sort_core] merging from 20 files and 4 in-memory blocks...
+
+
+hisat2结果解释
+
+
+hisat.log结果中,19429766 reads; of these:
及大部分包含的信息中,双端测序的reads是只统计一次的。比如19429766 reads代表的是有19429766对双端测序的reads,总reads数量是$19429766*2=38859532$条。
+在2022476 mates make up the pairs; of these:
及之后包含的信息中,代表配对的reads数量,双端测序的reads是统计了配对的所有reads,总reads数量就是2022476条。
-
+
+hisat2的mapping rate的计算
+
+96.88%的overall alignment rate即为mapping rate,计算方法是:
+$$mapping rate=mapped reads number/total reads number$$
+
+total reads number用的$19429766*2$。
+mapped reads number包含:concordantly exactly 1 time(14853850*2),aligned concordantly >1 times(3509724*2),aligned discordantly 1 time(54954*2),mates make up the pairs中的aligned exactly 1 time(607196)和aligned >1 times(203633)。
+
+ $$mapping rate=((14853850+3509724+54954)*2+607196+203633)/(19429766*2) = 37647885/38859532*100%=96.88%$$
+
+mapped reads number的另一种计算方法:concordantly exactly 1 time(14853850),aligned concordantly >1 times(3509724),aligned concordantly 0 times(1066192)中aligned到的所有reads,即除了aligned concordantly 0 times(1066192)中的aligned 0 times(1211647/2)以外的所有reads。
+
+ $$mapping rate=(14853850+3509724+54954+1066192-(1211647/2))/19429766*100%=96.88%$$
+3. samtools flagstat统计mapping rate
+samtools flagstat
+
+
+如果hisat2运行时未保存log文件,也可以用samtools flagstat
来计算reads的mapping统计值。
+illumina reads和Pacbio reads等的sam/bam文件也可以用这种方式统计mapping rate。
+flagstat统计结果中,记录的是sam/bam文件中reads的记录数量,即mapping record rate(双端测序包含配对的所有reads)。
+
+
+samtools flagstat统计
+
+
+samtools flagstat output.bam > output.flagstat
+
+
+output.flagstat的结果示例
+
+51231959 + 0 in total (QC-passed reads + QC-failed reads) #共有51231959条reads通过QC+0条reads未通过QC,后面的信息行中+后的都是代表QC没通过的reads的数量。 12372427 + 0 secondary 0 + 0 supplementary 0 + 0 duplicates 50020312 + 0 mapped (97.63% : N/A) # 97.63%比例的reads mapping到参考序列上,这就是mapping record rate 38859532 + 0 paired in sequencing 19429766 + 0 read1 # 双端reads中read1的总数 19429766 + 0 read2 # 双端reads中read2的总数 36727148 + 0 properly paired (94.51% : N/A) # 94.51%比例的reads成对的映射上 37160066 + 0 with itself and mate mapped # read映射上但配对read没映射上的数量 487819 + 0 singletons (1.26% : N/A) # 1.26%比例的read没映射上的同时,配对read映射上了 289948 + 0 with mate mapped to a different chr # reads和配对reads映射到不同染色体的情况下的reads数量 205767 + 0 with mate mapped to a different chr (mapQ>=5) # reads和配对reads映射到不同染色体,且映射质量大于等于5的情况下的reads数量
-图 1. Modify Reference Types 对话框 图源:https://zhuanlan.zhihu.com/p/312093759
-1.2. EndNote的文献目录(Bibliography)的中英文混排 1.2.1. 文献目录(Bibliography)的中英文顺序
-在EndNote中选择【Edit】-【Output Styles】-【Edit **】,选择需要编辑的参考文献Styles;
-在【Bibliography】- 【Sort Order】中选择文献目录(Bibliography)的显示排序规则;
-需要英文在前,中文在后的,则选择【Other…】,然后依次选择排序标准,推荐选择【Language】+【Author】+【Title】,然后保存设置。
-注意每一条参考文献的【Language】字段,中文可以设置成【Chinese】,英文设置成【English】或不设置。
+
+samtools flagstat的mapping record rate的计算方法
+
+$$mapping record rate=mapped recorder number/total recorder number=((primary) mapped reads number + secondary mapped reads number)/(total reads number + secondary mapped reads number)$$
+其中,recorder number代表sam文件中去除header部分的比对记录数量(每行一条比对记录,即行数)。
+同一reads可能多次mapping,有多条记录,所以recorder number的数量会比reads number多。
+
+mapped recorder number用的是50020312;
+total recorder number用的是51231959;
+secondary mapped reads number是12372427;
-1.2.2. 文献目录(Bibliography)的作者的et al. 和**等.**混排
-基于已添加【中文文献】类型下操作;
-在EndNote中选择【Edit】-【Output Styles】-【Edit **】,选择需要编辑的参考文献Styles;
-在【Bibliography】-【Templates】的【Reference Type】中添加【中文文献】的类型;
+$$mapping record rate=50020312/51231959*100%=97.63%$$
+有文章直接用mapping record rate,但建议用mapping rate来代表mapped reads的比例。
+
+与hisat2的统计结果的不同
+
+
+samtools flagstat的mapping record rate(97.63%)比hisat2的mapping rate(96.88%)高一些,原因在于计算方式的区别。
-
+
+计算mapping rate
+
+
+通常我们在文章中使用reads的比例来代表mapping rate(即hisat2的计算方式),通过计算公式,可以利用samtools flagsta的统计数据计算mapping rate。
+
+$$mapping rate = mapped reads number/total reads number = (mapped recorder number - secondary mapped reads number)/(total recorder number - secondary mapped reads number) = (50020312-12372427)/(51231959-12372427) = 37647885/38859532*100% = 96.88%$$
+这样计算得到的mapping rate就和hisat2的log文件一致了。
+4. references
+hisat2和samtools flagstat计算的mapping rate不同的解释:https://zhuanlan.zhihu.com/p/73208822
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ omics
+ genome
+ quality assessment
+
+
+ genome
+ samtools
+ quality assessment
+ transcriptome
+ mapping
+ sam
+ bam
+ HiSat2
+ mapping rate
+ samtools flagstat
+
+
+
+ scripts
+ /2021/04/01/programming_scripts/
+
-图 2. 在Templates中添加中文文献类型 图源:https://zhuanlan.zhihu.com/p/312093759
+1. 我写的脚本 1.1. 多个RNA-seq数据,基于参考基因组的转录本组装和ORF预测 multi-transcriptome_assembly_with_ref.sh
+1.2. 提取,合并,和比对单拷贝基因和蛋白 extract_single_copy_genes.sh
+1.3. 合并不同物种数量的多序列比对文件,保持序列的比对 concat_msa_with_differenct_species.sh
+2. 我修改的脚本(其他人写的) 2.1. 从包含mRNA和CDS的gff注释文件中提取intron的位置和长度信息 extract_intron_info.pl
+3. 保存的脚本 3.1. batch_run.sh —— 多线程并行运行批量化命令 batch_run.sh
+# !/bin/bash # batch_run.sh脚本用于多线程并行批量化循环命令,并控制并行数量始终为${thread} 。 # usage: 修改thread=后的值为想要设定的并行线程数,把需要并行的命令替换23行的run something。运行脚本batch_run.sh,实现并行运行循环任务。 # ref:网上找的脚本,来源找不到了,侵删。 thread=16 start_time=`date +%s` # 定义脚本运行的开始时间 echo ${start_time} tmpFifo=/tmp/$$.fifo # 声明管道名称,$$表示脚本当前运行的进程PID mkfifo ${tmpFifo} # 创建有名管道 exec 3<>${tmpFifo} #创建文件描述符,以可读(<)可写(>)的方式关联管道文件,这时候文件描述符3就有了有名管道文件的所有特性 rm -rf ${tmpFifo} #关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除,我们留下文件描述符来用就可以了 for ((i=1;i<=${thread};i++)) do echo "" >&3 #&3代表引用文件描述符3,这条命令代表往管道里面放入了一个"令牌" done for sample in $(cat sample_list.txt) #并行运行的循环 do read -u3 #代表从管道中读取一个令牌 { echo ${sample} run something # 需要并行运行的真实命令 echo 'success' ${sample} echo "" >&3 #代表我这一次命令执行到最后,把令牌放回管道 } & done # wait stop_time=`date +%s` #定义脚本运行的结束时间 echo "TIME:`expr $stop_time - $start_time`" exec 3<&- #关闭文件描述符的读 exec 3>&- #关闭文件描述符的写
+
+3.2. infernal-tblout2gff.pl —— 基因组ncRNA的infernal注释结果tblout格式转换成gff格式
+背景 用Infernal注释基因组的ncRNA,得到的结果可以用脚本整理成gff3格式。
+
+脚本来源:https://www.cnblogs.com/jessepeng/p/15392809.html
+
+脚本
+
+use strict;use warnings;use Getopt::Long;my $in_tblout = "" ; my $usage;$usage = "infernal-tblout2gff.pl\n\n" ; $usage .= "Usage:\n\n" ; $usage .= "infernal-tblout2gff.pl [OPTIONS] <cmsearch tblout file>\n\tOR\n" ; $usage .= "infernal-tblout2gff.pl --cmscan [OPTIONS] <cmscan tblout file>\n\tOR\n" ; $usage .= "infernal-tblout2gff.pl --cmscan --fmt2 [OPTIONS] <cmscan --fmt 2 tblout file>\n\n" ; $usage .= "\tOPTIONS:\n" ; $usage .= "\t\t-T <n> : minimum bit score to include is <n>\n" ; $usage .= "\t\t-E <x> : maximum E-value to include is <x>\n" ; $usage .= "\t\t--cmscan : tblout file was created by cmscan\n" ; $usage .= "\t\t--source <s> : specify 'source' field should be <s> (e.g. tRNAscan-SE)\n" ; $usage .= "\t\t--fmt2 : tblout file was created with cmscan --fmt 2 option\n" ; $usage .= "\t\t--all : output all info in 'attributes' column [default: E-value]\n" ; $usage .= "\t\t--none : output no info in 'attributes' column [default: E-value]\n" ; $usage .= "\t\t--desc : output desc field in 'attributes' column [default: E-value]\n" ; $usage .= "\t\t--version <s>: append \"-<s>\" to 'source' column\n" ; $usage .= "\t\t--extra <s> : append \"<s>;\" to 'attributes' column\n" ; $usage .= "\t\t--hidedesc : do not includ \"desc\:\" prior to desc value in 'attributes' column\n" ; my $do_minscore = 0 ; my $do_maxevalue = 0 ; my $minscore = undef ; my $maxevalue = undef ; my $do_cmscan = 0 ; my $do_fmt2 = 0 ; my $do_all_attributes = 0 ; my $do_no_attributes = 0 ; my $do_de_attributes = 0 ; my $version = undef ; my $extra = undef ; my $do_hidedesc = 0 ; my $opt_source = undef ; &GetOptions( "T=s" => \$minscore, "E=s" => \$maxevalue, "cmscan" => \$do_cmscan, "source=s" => \$opt_source, "fmt2" => \$do_fmt2, "all" => \$do_all_attributes, "none" => \$do_no_attributes, "desc" => \$do_de_attributes, "version=s" => \$version, "extra=s" => \$extra, "hidedesc" => \$do_hidedesc); if (scalar (@ARGV) != 1 ) { die $usage; }my ($tblout_file) = @ARGV;if (defined $minscore) { $do_minscore = 1 ; }if (defined $maxevalue) { $do_maxevalue = 1 ; }if ($do_minscore && $do_maxevalue) { die "ERROR, -T and -E cannot be used in combination. Pick one." ; } if (($do_all_attributes) && ($do_no_attributes)) { die "ERROR, --all and --none cannot be used in combination. Pick one." ; } if (($do_all_attributes) && ($do_de_attributes)) { die "ERROR, --all and --desc cannot be used in combination. Pick one." ; } if (($do_no_attributes) && ($do_de_attributes)) { die "ERROR, --none and --desc cannot be used in combination. Pick one." ; } if (($do_fmt2) && (! $do_cmscan)) { die "ERROR, --fmt2 only makes sense in combination with --cmscan" ; } if ((defined $opt_source) && (defined $version)) { die "ERROR, --source and --version are incompatible" ; } if (! -e $tblout_file) { die "ERROR tblout file $tblout_file does not exist" ; }if (! -s $tblout_file) { die "ERROR tblout file $tblout_file is empty" ; }my $source = ($do_cmscan) ? "cmscan" : "cmsearch" ;if (defined $version) { $source .= "-" . $version; }if (defined $opt_source) { $source = $opt_source; }open (IN, $tblout_file) || die "ERROR unable to open $tblout_file for reading" ; my $line;my $i;while ($line = <IN>) { if ($line !~ m/^\#/ ) { chomp $line; my @el_A = split (/\s+/ , $line); my $nfields = scalar (@el_A); if ((! $do_fmt2) && ($nfields < 18 )) { die "ERROR expected at least 18 space delimited fields in tblout line (fmt 1, default) but got $nfields on line:\n$line\n" ; } if (($do_fmt2) && ($nfields < 27 )) { die "ERROR expected at least 27 space delimited fields in tblout line (fmt 2, --fmt2) but got $nfields on line:\n$line\n" ; } my $idx = undef ; my $seqname = undef ; my $seqaccn = undef ; my $mdlname = undef ; my $mdlaccn = undef ; my $clan = undef ; my $mdl = undef ; my $mdlfrom = undef ; my $mdlto = undef ; my $seqfrom = undef ; my $seqto = undef ; my $strand = undef ; my $trunc = undef ; my $pass = undef ; my $gc = undef ; my $bias = undef ; my $score = undef ; my $evalue = undef ; my $inc = undef ; my $olp = undef ; my $anyidx = undef ; my $anyfrct1= undef ; my $anyfrct2= undef ; my $winidx = undef ; my $winfrct1= undef ; my $winfrct2= undef ; my $desc = undef ; if ($do_fmt2) { $idx = $el_A[0 ]; $seqname = ($do_cmscan) ? $el_A[3 ] : $el_A[1 ]; $seqaccn = ($do_cmscan) ? $el_A[4 ] : $el_A[2 ]; $mdlname = ($do_cmscan) ? $el_A[1 ] : $el_A[3 ]; $mdlaccn = ($do_cmscan) ? $el_A[2 ] : $el_A[4 ]; $clan = $el_A[5 ]; $mdl = $el_A[6 ]; $mdlfrom = $el_A[7 ]; $mdlto = $el_A[8 ]; $seqfrom = $el_A[9 ]; $seqto = $el_A[10 ]; $strand = $el_A[11 ]; $trunc = $el_A[12 ]; $pass = $el_A[13 ]; $gc = $el_A[14 ]; $bias = $el_A[15 ]; $score = $el_A[16 ]; $evalue = $el_A[17 ]; $inc = $el_A[18 ]; $olp = $el_A[19 ]; $anyidx = $el_A[20 ]; $anyfrct1= $el_A[21 ]; $anyfrct2= $el_A[22 ]; $winidx = $el_A[23 ]; $winfrct1= $el_A[24 ]; $winfrct2= $el_A[25 ]; $desc = $el_A[26 ]; for ($i = 27 ; $i < $nfields; $i++) { $desc .= "_" . $el_A[$i]; } } else { $seqname = ($do_cmscan) ? $el_A[2 ] : $el_A[0 ]; $seqaccn = ($do_cmscan) ? $el_A[3 ] : $el_A[1 ]; $mdlname = ($do_cmscan) ? $el_A[0 ] : $el_A[2 ]; $mdlaccn = ($do_cmscan) ? $el_A[1 ] : $el_A[3 ]; $mdl = $el_A[4 ]; $mdlfrom = $el_A[5 ]; $mdlto = $el_A[6 ]; $seqfrom = $el_A[7 ]; $seqto = $el_A[8 ]; $strand = $el_A[9 ]; $trunc = $el_A[10 ]; $pass = $el_A[11 ]; $gc = $el_A[12 ]; $bias = $el_A[13 ]; $score = $el_A[14 ]; $evalue = $el_A[15 ]; $inc = $el_A[16 ]; $desc = $el_A[17 ]; for ($i = 18 ; $i < $nfields; $i++) { $desc .= "_" . $el_A[$i]; } } if (($strand ne "+" ) && ($strand ne "-" )) { if (($do_fmt2) && (($seqfrom eq "+" ) || ($seqfrom eq "-" ))) { die "ERROR problem parsing, you specified --fmt2 but tblout file appears to have NOT been created with --fmt 2, retry without --fmt2\nproblematic line:\n$line\n" ; } if ((! $do_fmt2) && (($pass eq "+" ) || ($pass eq "-" ))) { die "ERROR problem parsing, you did not specify --fmt2 but tblout file appears to have been created with --fmt 2, retry with --fmt2\nproblematic line:\n$line\n" ; } die "ERROR unable to parse, problematic line:\n$line\n" ; } if (($do_minscore) && ($score < $minscore)) { ; } elsif (($do_maxevalue) && ($evalue > $maxevalue)) { ; } else { my $attributes = "evalue=" . $evalue; if ($do_all_attributes) { if ($do_fmt2) { $attributes .= sprintf (";idx=$idx;seqaccn=$seqaccn;mdlaccn=$mdlaccn;clan=$clan;mdl=$mdl;mdlfrom=$mdlfrom;mdlto=$mdlto;trunc=$trunc;pass=$pass;gc=$gc;bias=$bias;inc=$inc;olp=$olp;anyidx=$anyidx;anyfrct1=$anyfrct1;anyfrct2=$anyfrct2;winidx=$winidx;winfrct1=$winfrct1;winfrct2=$winfrct2;%s$desc" , ($do_hidedesc ? "" : "desc=" )); } else { $attributes .= sprintf (";seqaccn=$seqaccn;mdlaccn=$mdlaccn;mdl=$mdl;mdlfrom=$mdlfrom;mdlto=$mdlto;trunc=$trunc;pass=$pass;gc=$gc;bias=$bias;inc=$inc;%s$desc" , ($do_hidedesc ? "" : "desc=" )); } } elsif ($do_no_attributes) { $attributes = "-" ; } elsif ($do_de_attributes) { $attributes = $desc; } if (defined $extra) { if ($attributes eq "-" ) { $attributes = "" ; } elsif ($attributes !~ m/\;$/ ) { $attributes .= ";" ; } $attributes .= $extra . ";" ; } printf ("%s\t%s\t%s\t%d\t%d\t%.1f\t%s\t%s\t%s\n" , $seqname, $source, $mdlname, ($strand eq "+" ) ? $seqfrom : $seqto, ($strand eq "+" ) ? $seqto : $seqfrom, $score, $strand, "." , $attributes); } } }
+
+
+运行perl infernal-tblout2gff.pl --cmscan --fmt2 genome.tblout >genome.infernal.ncRNA.gff3
+
+输入是Infernal的table格式输出文件,输出是gff3格式的ncRNA注释文件。
+
-将【Journal Article】里的参考格式复制到【中文文献】里,再在Author前面加上Secondary,注意Secondary和Author之间打一个空格,显示为一个点.。
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
+ ]]>
+
+ programming
+ scripts
+
+
+ biosoft
+ scripts
+ batch_run.sh
+ ROUSFinder2.0.py
+ extract_intron_info.pl
+ multi-transcriptome_assembly_with_ref.sh
+ extract_single_copy_genes.sh
+ concat_msa_with_differenct_species.sh
+
+
+
+ 基因组质量评估:(五)mapping法:7. 用软件mosdepth统计BAM文件的深度
+ /2022/07/31/omics_genome_quality.assessment_mapping_mosdepth/
+
+
+1. mosdepth简介 mosdepth(https://github.com/brentp/mosdepth)是用于WGS,exome,targeted sequencing的BAM/CRAM文件的测序深度计算的软件,主要是用Nim语言写的(第一次听说这种语言)。
+2. mosdepth可以得到的数据包括
+每个碱基深度的计算速度是samtools depth的约2倍。——对于 30X 基因组,大约需要 25 分钟的 CPU 时间。
+给定窗口大小的平均每个窗口深度,可用于 CNV calling。
+给定区域的 BED 文件的每个区域的平均值。
+给定窗口大小的每个区域累积覆盖率(cumulative coverage)直方图的平均值或中值。
+对于每个染色体和全基因组,在给定阈值或以上覆盖的碱基比例分布。
+合并相邻碱基的量化输出,只要它们落在相同的覆盖范围内,例如(10-20)。
+阈值输出以指示在给定阈值下每个区域中有多少个碱基被覆盖。
+每条染色体和每条染色体指定区域内的平均深度的总结。
+一个d4文件(比bigwig好)。
+
+3. 下载安装 直接下载已编译文件,修改权限即可使用。
+wget https://github.com/brentp/mosdepth/releases/download/v0.3.3/mosdepth chmod +x mosdepth ./mosdepth -h
+
+4. 使用
+准备
+
+
+samtools index sample.bam
# 生成bam文件的索引文件sample.bam.bai
+
+
+计算深度
+
+
+mosdepth -t 4 out sample.bam
+
+
+参数
+
+
+-t 4:线程,需要<=4
+out:输出文件的前缀
+sample.bam:待分析的bam文件
+–by sample.bed:指定区域的bed文件,我分析整个基因组,没加这个参数。
+
+还有许多参数等着探索…
+5. 结果
+out.mosdepth.summary.txt
+
+
+文件包含每条染色体和整个基因组的信息,长度,mapped 碱基数量,平均深度,最小深度和最大深度。示例:
+
+chrom length bases mean min max MCscaf001 12541575 440858440 35.15 0 3561 MCscaf002 20211832 749371193 37.08 0 8181 ... ... MCscaf265 25000 897138 35.89 0 84 MCscaf266 25000 913514 36.54 0 82 total 256218469 10404013912 40.61 0 92318
+
+
+out.mosdepth.global.dist.txt
+
+
+文件包含累积分布,指示给定覆盖率阈值下覆盖的总碱基的比例。包含三列:染色体/total,覆盖水平,该级别覆盖的碱基比例。示例:
+
+MCscaf001 1961 0.00 MCscaf001 1960 0.00 MCscaf001 1957 0.00 ... ... total 2 0.99 total 1 1.00 total 0 1.00
+
+还可以用脚本python scripts/plot-dist.py \*global.dist.txt
画图,输出dist.html
,可以看出整个基因组的覆盖度的分布。
+
+out.per-base.bed.gz
+
+
+
+out.per-base.bed.gz.csi
+
+6. references
+https://github.com/brentp/mosdepth
+
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+ ]]>
+
+ omics
+ genome
+ quality assessment
+
+
+ biosoft
+ genome
+ quality assessment
+ mapping
+ sam
+ bam
+ depth
+ mosdepth
+
+
+
+ python脚本中字符串内的引号需要转义
+ /2024/06/05/python_syntax_string_quetos/
+
-图 3. 在Templates中添加中文文献类型2 图源:https://zhuanlan.zhihu.com/p/312093759
-
-在【Bibliography】-【Author List】中,对于显示作者人数进行设置,多作者的缩写默认为【,et al.】,这里代表英文文献多作者在文献目录(Bibliography)中的显示规则;
-在【Bibliography】-【Editor List】中,对于显示作者人数进行设置,多作者的缩写改为【,等.】,这里代表中文文献多作者在文献目录(Bibliography)中的显示规则;
-
-
+记录使用python脚本时发现的一个语法错误
+python脚本的语法错误的报错记录
+
+File "/soft/Cp-hap/scripts/parse.py", line 86 o.write('Haven't detected reads which are long enough to support the structures') ^ SyntaxError: invalid syntax
-图 4. 修改中文文献的多作者显示 图源:https://zhuanlan.zhihu.com/p/312093759
-
-EndNote导入的中文文献可选择【中文文献】这种类型,然后把【Author】这项内容复制到【Secondary Author】,这样就会遵循【中文文献】的引用的显示规则。
-
-ref:https://zhuanlan.zhihu.com/p/312093759
-1.3. EndNote的正文引用的中英文混排 1.3.1. 作者的et al. 和**等.**混排
-手动修改中文文献的et al.成 等.
+
+python脚本的单引号
-在Word正文的EndNote引用文献(张三 et al. 2023)中右键,选择【edit citations】-【more】;
-然后在【Edit & Manage Citations】对话框中把这一条参考文献的【Formatting】从【Default】改成【Exclude Author】,这样正文会不显示作者;
-继续在【Prefix】中手动添加前缀,这里填写【张三等,】,则正文会显示(张三等,2023);
-依次修改正文中每一条参考文献。
+这样的报错是因为,在python脚本中,用单引号引起来的字符串中间不能再有单引号了,而脚本parse.py中错误的使用了Haven’t 在单引号内。
+修改的办法很简单,把Haven’t 改成Have not ;或者在字符串中的单引号前面加上转义字符反斜杠,改为Haven't ;或者把字符串外面的单引号改成双引号,改为**”Haven’t detected reads which are long enough to support the structures”**。
-ref:https://www.baishujun.com/archives/7634.html
欢迎关注微信公众号:生信技工
公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
-
-]]>
+ ]]>
- tools
- academia
- EndNote
+ programming
+ python
+ syntax
+ string
- tools
- EndNote
- 中英文混排
+ python
+ syntax
+ error
+ quotes
+ string
@@ -18206,146 +17974,438 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
let person = new Proxy(Person,{ get(target,key){ return target[key] }, set(target,key,value){ if(key!==’sex’){ target[key]=value; } } }) 通过Proxy对象代理实现保护Person的sex属性,使其不能修改。
]]>
- web
+ web
+
+
+ ES6
+
+
+
+ bootstrap
+ /2018/06/11/web_bootstrap/
+ 1. bootstrap简介bootstrap是一个用于快速开发web应用和网站的前端框架。 它能用于开发响应式布局、移动设备优先的web项目。
+2. bootstrap的安装 需要在html的link标签引入bootstrap的css插件bootstrap.css,并在script标签中引用bootstrap的js插件bootstrap.js(bootstrap的js插件使用需要先引入jQuery),有两种方式:
+2.0.0.1. 通过CDN(内容分发网络)引用bootstrap,多个CDN可以使用。比如bootCDN 。 2.0.0.2. 在bootstrap中文网 下载bootstrap,是一个文件夹,下有css、js、fonts三个目录。 在link标签中引入文件夹的css目录下的bootstrap.min.css文件
+<link href="css/bootstrap.min.css" rel="stylesheet">
+在script标签中引用文件夹的js目录下的bootstrap.min.js文件(bootstrap的js插件使用需要先引入jQuery)
+3. bootstrap的css
+使用<img src="" class="img-responsive">
使图像对响应式布局更友好地支持。
+
+Bootstrap 排版、链接样式设置了基本的全局样式。分别是:
+
+为 body 元素设置 background-color: #fff
;
+使用 @font-family-base
、@font-size-base
和 @line-height-base a
变量作为排版的基本参数
+为所有链接设置了基本颜色 @link-color
,并且当链接处于 :hover 状态时才添加下划线
+这些样式都能在 scaffolding.less 文件中找到对应的源码。
+
+
+使用normalize.css 来建立跨浏览器的一致性。
+
+.container 类用于固定宽度并支持响应式布局的容器。.container-fluid 类用于 100% 宽度,占据全部视口(viewport)的容器。
+
+
+]]>
+
+ web
+
+
+ bootstrap
+
+
+
+ flex
+ /2018/06/12/web_flex/
+ 1. flex基础知识以下是学习阮一峰老师教程 后的笔记。 传统布局解决方案基于盒模型 ,常使用display
、position
和float
属性来实现,但对某些特殊布局非常不方便,比如垂直居中。 使用**display:flex
**可以方便地实现多个元素的优雅排版,居中对齐也很方便。
+1.1. flex基本概念
+任何元素都可以指定为flex布局。
+
+块级元素 display:flex;
+行内元素 display:inline-flex;
+
+注意:设置flex布局后,子元素的float
、clear
和vertical-align
属性就会失效。
+
+对元素采用flex布局后,此元素被称为flex容器 ,它的所有子元素成为容器成员,被称为flex项目 。 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start
,结束位置叫做main end
;交叉轴开始位置叫做cross start
,结束位置叫做cross end
。 项目默认沿主轴排列。单个项目占据的主轴空间叫main size
,占据的交叉轴空间叫cross size
。
+
+
+1.1.1. 容器的属性
+flex-flow
+
+flex-flow
属性是flex-direction
和flex-wrap
两个属性的简写,默认值为row nowrap
。
+
+
+对齐方式
+
+
+justify-content justify-centent
属性定义了项目在主轴上的对齐方式,与定义的主轴方向flex-direction
有关,下面假设主轴从左到右,有四个可选的值。
+
+flex-start(default):左对齐
+flex-end:右对齐
+center: 居中
+space-between:两端对齐,项目之间的间隔都相等。
+space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
+
+
+align-items align-items
属性定义了项目在交叉轴上的对齐方式,与定义的主轴方向flex-direction
有关,下面假设交叉轴从上到下,有五个可选的值。
+
+stretch(default):如果项目未设置高度或设为auto,将占满整个容器的高度。
+flex-start:交叉轴的起点对齐。
+flex-end:交叉轴的终点对齐。
+center:交叉轴的中点对齐。
+baseline: 项目的第一行文字的基线对齐。
+
+
+align-content align-content
属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。有六个可选的值。
+
+stretch(default):轴线占满整个交叉轴。
+flex-start:与交叉轴的起点对齐。
+flex-end:与交叉轴的终点对齐。
+center:与交叉轴的中点对齐。
+space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
+space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
+
+
+
+1.1.2. 项目属性
+order
+
+order
属性定义项目的排列顺序,数值越小,排列越靠前,默认为0。
+
+align-self
+
+align-selff
属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items
属性,默认为auto,表示继承父元素的align-items
属性,如果没有父元素,则等同于stretch
。有六个可选的值,除了auto,其他都与align-items属性完全一致。
+
+auto(default)
+flex-start
+flex-end
+center
+baseline
+stretch
+
+
+flex
+
+flex
属性是flex-grow
、flex-shrink
、flex-basis
三个属性的简写,默认值为0 1 auto
,后两个属性可选。 flex属性有两个快捷键:auto(1 1 auto)
和none(0 0 auto)
。
+
+flex-grow flex-grow
属性定义如果存在剩余空间,项目的放大比例,默认为0,即不放大。 如果容器存在多余空间,多余空间分配给各个项目的比例按各个项目的flex-grow的值占容器内所有项目的flex-grow值的和的比例来确定。
+flex-shrink flex-shrink
属性定义了如果容器空间不足,项目的缩小比例,默认为1,负值无效。 如果容器的空间不足,需要缩小的空间会分配给各个项目,并按各个项目的flex-shrink值占容器内所有项目的flex-shrink值和的比例来确定。
+flex-basis flex-basis
属性定义了在放大和缩小之前,项目占据的主轴空间(main size),值为长度值,默认值为auto
,即项目本来大小。s
+
+]]>
+
+ web
+
+
+ flex
+
+
+
+ 参考文献管理软件EndNote的中英文混排技巧
+ /2023/05/11/tools_academia_EndNote/
+
+
+1. EndNote的中英文混排 1.1. 添加EndNote的【中文文献】类型
+在EndNote中选择【Edit】-【References】,找到【Reference Types】选项;
+【Default Reference Type】选择【unused】1/2/3中的任意一个之前未被修改过的,然后选择【Modify Reference Types】;
+在弹出的【Modify Reference Types】对话框中按照下面的图片输入每项内容。包括【Generic】命名为【中文文献】,【Author】填入【Author】,【Year】填入【Year】,【Title】填入【Title】,【Secondary Author】填入【Secondary Author】,【Secondary Title】要填入【Journal】,【Volume】填入【Volume】,【Number of Volumes】填入【Issue】,【Pages】填入【Pages】,其他都一致,点击【OK】后就添加了【中文文献】的参考文献类型。
+
+
+
+图 1. Modify Reference Types 对话框 图源:https://zhuanlan.zhihu.com/p/312093759
+1.2. EndNote的文献目录(Bibliography)的中英文混排 1.2.1. 文献目录(Bibliography)的中英文顺序
+在EndNote中选择【Edit】-【Output Styles】-【Edit **】,选择需要编辑的参考文献Styles;
+在【Bibliography】- 【Sort Order】中选择文献目录(Bibliography)的显示排序规则;
+需要英文在前,中文在后的,则选择【Other…】,然后依次选择排序标准,推荐选择【Language】+【Author】+【Title】,然后保存设置。
+注意每一条参考文献的【Language】字段,中文可以设置成【Chinese】,英文设置成【English】或不设置。
+
+1.2.2. 文献目录(Bibliography)的作者的et al. 和**等.**混排
+基于已添加【中文文献】类型下操作;
+在EndNote中选择【Edit】-【Output Styles】-【Edit **】,选择需要编辑的参考文献Styles;
+在【Bibliography】-【Templates】的【Reference Type】中添加【中文文献】的类型;
+
+
+
+图 2. 在Templates中添加中文文献类型 图源:https://zhuanlan.zhihu.com/p/312093759
+
+将【Journal Article】里的参考格式复制到【中文文献】里,再在Author前面加上Secondary,注意Secondary和Author之间打一个空格,显示为一个点.。
+
+
+
+图 3. 在Templates中添加中文文献类型2 图源:https://zhuanlan.zhihu.com/p/312093759
+
+在【Bibliography】-【Author List】中,对于显示作者人数进行设置,多作者的缩写默认为【,et al.】,这里代表英文文献多作者在文献目录(Bibliography)中的显示规则;
+在【Bibliography】-【Editor List】中,对于显示作者人数进行设置,多作者的缩写改为【,等.】,这里代表中文文献多作者在文献目录(Bibliography)中的显示规则;
+
+
+
+图 4. 修改中文文献的多作者显示 图源:https://zhuanlan.zhihu.com/p/312093759
+
+EndNote导入的中文文献可选择【中文文献】这种类型,然后把【Author】这项内容复制到【Secondary Author】,这样就会遵循【中文文献】的引用的显示规则。
+
+ref:https://zhuanlan.zhihu.com/p/312093759
+1.3. EndNote的正文引用的中英文混排 1.3.1. 作者的et al. 和**等.**混排
+手动修改中文文献的et al.成 等.
+
+
+在Word正文的EndNote引用文献(张三 et al. 2023)中右键,选择【edit citations】-【more】;
+然后在【Edit & Manage Citations】对话框中把这一条参考文献的【Formatting】从【Default】改成【Exclude Author】,这样正文会不显示作者;
+继续在【Prefix】中手动添加前缀,这里填写【张三等,】,则正文会显示(张三等,2023);
+依次修改正文中每一条参考文献。
+
+ref:https://www.baishujun.com/archives/7634.html
+
+
+欢迎关注微信公众号:生信技工
+公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+
+
+]]>
+
+ tools
+ academia
+ EndNote
- ES6
+ tools
+ EndNote
+ 中英文混排
- bootstrap
- /2018/06/11/web_bootstrap/
- 1. bootstrap简介bootstrap是一个用于快速开发web应用和网站的前端框架。 它能用于开发响应式布局、移动设备优先的web项目。
-2. bootstrap的安装 需要在html的link标签引入bootstrap的css插件bootstrap.css,并在script标签中引用bootstrap的js插件bootstrap.js(bootstrap的js插件使用需要先引入jQuery),有两种方式:
-2.0.0.1. 通过CDN(内容分发网络)引用bootstrap,多个CDN可以使用。比如bootCDN 。 2.0.0.2. 在bootstrap中文网 下载bootstrap,是一个文件夹,下有css、js、fonts三个目录。 在link标签中引入文件夹的css目录下的bootstrap.min.css文件
-<link href="css/bootstrap.min.css" rel="stylesheet">
-在script标签中引用文件夹的js目录下的bootstrap.min.js文件(bootstrap的js插件使用需要先引入jQuery)
-3. bootstrap的css
-使用<img src="" class="img-responsive">
使图像对响应式布局更友好地支持。
-
-Bootstrap 排版、链接样式设置了基本的全局样式。分别是:
-
-为 body 元素设置 background-color: #fff
;
-使用 @font-family-base
、@font-size-base
和 @line-height-base a
变量作为排版的基本参数
-为所有链接设置了基本颜色 @link-color
,并且当链接处于 :hover 状态时才添加下划线
-这些样式都能在 scaffolding.less 文件中找到对应的源码。
-
-
-使用normalize.css 来建立跨浏览器的一致性。
-
-.container 类用于固定宽度并支持响应式布局的容器。.container-fluid 类用于 100% 宽度,占据全部视口(viewport)的容器。
-
-
+ glup
+ /2018/06/12/web_gulp/
+ glup用来压缩打包html、css、img等。
+gulp的工作方式是流(stream) ,使用pipe作为传输管道。
+gulp的使用流程一般是 :首先通过gulp.src()方法获取到想要处理的文件流,然后把文件流通过pipe方法导入到gulp的插件中,最后把经过插件处理后的流再通过pipe方法导入到gulp.dest()中,gulp.dest()方法则把流中的内容写入到文件中。
+获取流 gulp.src(global[,options])
+写文件 gulp.dest(path[,options])
+监视文件 gulp.watch(global[,options],tasks) 或 gulp.watch(global[,options,cb])
+定义任务 gulp.task(name[, deps], fn) name为default的task会在执行gulp没有指定task的name时执行。
+执行任务 gulp.run()
]]>
web
- bootstrap
+ gulp
- flex
- /2018/06/12/web_flex/
- 1. flex基础知识以下是学习阮一峰老师教程 后的笔记。 传统布局解决方案基于盒模型 ,常使用display
、position
和float
属性来实现,但对某些特殊布局非常不方便,比如垂直居中。 使用**display:flex
**可以方便地实现多个元素的优雅排版,居中对齐也很方便。
-1.1. flex基本概念
-任何元素都可以指定为flex布局。
+ jquery
+ /2018/06/05/web_jquery/
+ 1. jQuery基础知识1.1. jquery的安装 只需要在html的script标签中引用jquery,两种方式:
-块级元素 display:flex;
-行内元素 display:inline-flex;
+通过CDN(内容分发网络)引用jquery,多个CDN可以使用。比如百度CDN,在html中按如下语法引用。
+<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
+
+在jquery.com 中下载jquery文本,它是一个js文件,在script标签中引用这个文件即可。<script type="text/javascript" src="flexible.js"></script>
+
-注意:设置flex布局后,子元素的float
、clear
和vertical-align
属性就会失效。
+1.2. jquery语法 1.2.1. 基础语法 $(selector).action()
+
+美元符号$
定义 jQuery
+选择符(selector)
“查询”和”查找” HTML 元素,选择器类似css选择器。
+jQuery 的 .action()
执行对元素的操作,主要通过方法的实现来达到jquery的目的。
+jQuery允许我们在相同元素上运行多条jQuery命令,一条接一条,这称为链接技术(chaining)。
+
+1.3. jquery基础知识 $.each(array/object,callback)
可以遍历数组或者对象
+$.trim(string)
用于去除字符串两端的空白字符
+$(selector).get([index])
get方法通过索引在获取的dom对象中查找元素,从0开始索引对象。
+$(selector).index(selector/element)
index方法通过已知的元素搜索对应的索引值。
+1.4. jquery动画 1.4.1. 三种隐藏元素的方式 1.4.1.1. 基础隐藏显示动画 (display:none)
+$(selector).hide([ duration ], [ easing ], [ complete ])
隐藏,只有元素的display
不为none
时才有效,options可以为隐藏的时长,就产生了动画效果。
-对元素采用flex布局后,此元素被称为flex容器 ,它的所有子元素成为容器成员,被称为flex项目 。 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start
,结束位置叫做main end
;交叉轴开始位置叫做cross start
,结束位置叫做cross end
。 项目默认沿主轴排列。单个项目占据的主轴空间叫main size
,占据的交叉轴空间叫cross size
。
+$(selector).show([ duration ], [ easing ], [ complete ])
显示,只有元素的display:none
时才有效,options可以为显示的时长。
+
+$(selector).toggle([ duration ], [ easing ], [ complete ])
hide和show的切换,动画效果是从右至左,横向动作。
+以上三种方法修改的是元素的display
属性,会影响元素的width
、height
和opacity
三个属性。
-1.1.1. 容器的属性
-flex-flow
+1.4.1.2. 上卷下拉效果 (height:0)
+$(selector).slideDown([ duration ], [ easing ], [ complete ])
下拉效果
+
+$(selector).slideUp([ duration ], [ easing ], [ complete ])
上卷效果
+
+$(selector).slideToggle([ duration ], [ easing ], [ complete ])
slideDown和slideUp的切换,动画效果是从下至上,竖向动作。
+以上三种方法修改的是元素的height
属性。
+
-flex-flow
属性是flex-direction
和flex-wrap
两个属性的简写,默认值为row nowrap
。
-
-
-对齐方式
+1.4.2. 自定义动画 $(selector).animate( properties ,[ duration ], [ easing ], [ complete ] )
+其中,properties
是不小于一个css属性的键值对构成的object对象,所有用于动画的属性必须是数字 的。duration
设置动画执行的时间。easing
规定每个动画的每一步完成后要执行的函数。progress
规定每一次动画调用时会执行这个回调,是一个进度的概念。complete
动画完成的回调函数。
+$(selector).stop( [clearQueue ], [ jumpToEnd ] ) .stop( [queue ], [ clearQueue ] ,[ jumpToEnd ] )
-justify-content justify-centent
属性定义了项目在主轴上的对齐方式,与定义的主轴方向flex-direction
有关,下面假设主轴从左到右,有四个可选的值。
-
-flex-start(default):左对齐
-flex-end:右对齐
-center: 居中
-space-between:两端对齐,项目之间的间隔都相等。
-space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
+.stop(); 停止当前动画,点击在暂停处继续开始
+.stop(true); 如果同一元素调用多个动画方法,尚未被执行的动画被放置在元素的效果队列中。这些动画不会开始,直到第一个完成。当调用.stop()的时候,队列中的下一个动画立即开始。如果clearQueue参数提供true值,那么在队列中的动画其余被删除并永远不会运行
+.stop(true,true); 当前动画将停止,但该元素上的 CSS 属性会被立刻修改成动画的目标值。
+
+1.5. jquery 操作html的DOM 1.5.1. 捕获
+.text() - 设置或返回所选元素的文本内容
+.html() - 设置或返回所选元素的内容(包括 HTML 标记)
+.val() - 设置或返回表单字段的值
+.attr() -设置或返回属性值 以上四种方法,如果没有参数,就返回相应值;如果有参数,参数为设置的值。
+
+1.5.2. 添加内容
+.append(“追加内容”) 在被选元素的结尾插入内容(仍然在该元素内部)
+.prepend(“追加内容”) 在被选元素开头插入内容(仍然在该元素内部)
+.after(“追加内容”) 在被选元素的后面插入内容(不在该元素内部)
+.before(“追加内容”) 在被选元素的前面插入内容(不在该元素内部) 以上四种方法都可以有多个参数,实现批量追加内容。
+
+1.5.3. 删除内容
+.remove() 删除被选元素及其子元素;接受一个jquery选择器语法的参数,用于过滤被删元素。
+.empty() 从被选元素中删除子元素
+
+1.5.4. 操作CSS
+addClass(“classname”) - 向被选元素添加一个或多个类
+removeClass(“classname”) - 从被选元素删除一个或多个类
+toggleClass(“classname”) - 对被选元素进行添加/删除类的切换操作
+css(“propertyname”,“value”) /css({“propertyname”:”value”,”propertyname”:”value”,…})- 若无设置value值,则返回指定样式属性;若设置value值,就设置样式属性。
+
+1.5.5. 控制尺寸
+width() 方法设置或返回元素的宽度(不包括内边距、边框或外边距)。
+height() 方法设置或返回元素的高度(不包括内边距、边框或外边距)。
+innerWidth() 方法返回元素的宽度(包括内边距)。
+innerHeight() 方法返回元素的高度(包括内边距)。
+outerWidth() 方法返回元素的宽度(包括内边距和边框)。
+outerHeight() 方法返回元素的高度(包括内边距和边框)。
+
+1.6. DOM遍历
+祖先
+parent() 方法返回被选元素的直接父元素。
+parents() 方法返回被选元素的所有祖先元素,它一路向上直到文档的根元素 ()。
+parentsUntil() 方法返回介于两个给定元素之间的所有祖先元素。
-align-items align-items
属性定义了项目在交叉轴上的对齐方式,与定义的主轴方向flex-direction
有关,下面假设交叉轴从上到下,有五个可选的值。
-
-align-selff
属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items
属性,默认为auto,表示继承父元素的align-items
属性,如果没有父元素,则等同于stretch
。有六个可选的值,除了auto,其他都与align-items属性完全一致。
+1.7. tips 使用jquery实现相同样式容器的批量导入。 从json文件中取数据并遍历数据,然后通过每条数据与重复项字符串的手动拼接,获得字符串格式的html结构,在把这个结果字符串通过$("selector").append(结果字符串)
到指定位置,即可实现导入相同样式容器到html中。
+]]>
+
+ web
+
+
+ jquery
+
+
+
+ react
+ /2018/06/14/web_react/
+ 1. react1.1. JSX react使用JSX代替javascript,JSX是有点像XML的javascript语法扩展。
+1.1.1. 基本语法 ReactDOM.render( div h1 react教程 /h1 h2 欢迎学习 React /h2 p 这是一个很不错的 JavaScript 库! /p /div document.getElementById(‘example’))
+多个html标签需要全包含在一个div中,以上代码表示在id=example的html标签位置渲染一个div,里面有两个标题和一个段落。
+1.1.2. 嵌入javascript表达式
+JSX中可以嵌入javascript表达式,但需要写在花括号{}内。
+注释也需要写在花括号中。
+花括号中的数组会自动展开所有成员。
+表达式不能使用if else
语句,但可以用conditional
三元运算表达式。<h1>{i == 1 ? 'True!' : 'False'}</h1>
+
+1.1.3. 内联样式 使用驼峰法设置内联样式
+ReactDOM.render( h1 style = {myStyle} 菜鸟教程 /h1 document.getElementById(‘example’))
+1.1.4. 渲染HTML标签(strings)和React组件(classes) React 可以渲染 HTML 标签 (strings) 或 React 组件 (classes)。
+要渲染 HTML 标签,只需在 JSX 里使用小写字母的标签名。
+要渲染 React 组件,只需创建一个大写字母开头的本地变量。
+1.1.5. tips 由于 JSX 就是 JavaScript,一些标识符像 class 和 for 不建议作为 XML 属性名。作为替代,React DOM 使用 className 和 htmlFor 来做对应的属性。
+1.2. 组件 组件API的7个方法:
-auto(default)
-flex-start
-flex-end
-center
-baseline
-stretch
+设置状态:setState
+替换状态:replaceState
+设置属性:setProps
+替换属性:replaceProps
+强制更新:forceUpdate
+获取DOM节点:findDOMNode
+判断组件挂载状态:isMounted
-
-flex
+react元素是DOM标签或者用户自定义组件,当是自定义组件时,会将JSX属性作为单个对象传递给该组件,这个对象是“props”。 组件名称必须以大写字母开头。 组件的返回值只能有一个根元素。 所有的React组件必须像纯函数(即不能改变输入值的函数)那样使用它们的props。 React应用中,按钮、表单、对话框、整个屏幕的内容等,这些通常都被表示为组件。
+1.3. 生命周期
+组件的生命周期可分成三个状态:
+
+
+Mounting:已插入真实 DOM
+Updating:正在被重新渲染
+Unmounting:已移出真实 DOM
+
+
+生命周期的方法有:
-flex
属性是flex-grow
、flex-shrink
、flex-basis
三个属性的简写,默认值为0 1 auto
,后两个属性可选。 flex属性有两个快捷键:auto(1 1 auto)
和none(0 0 auto)
。
-flex-grow flex-grow
属性定义如果存在剩余空间,项目的放大比例,默认为0,即不放大。 如果容器存在多余空间,多余空间分配给各个项目的比例按各个项目的flex-grow的值占容器内所有项目的flex-grow值的和的比例来确定。
-flex-shrink flex-shrink
属性定义了如果容器空间不足,项目的缩小比例,默认为1,负值无效。 如果容器的空间不足,需要缩小的空间会分配给各个项目,并按各个项目的flex-shrink值占容器内所有项目的flex-shrink值和的比例来确定。
-flex-basis flex-basis
属性定义了在放大和缩小之前,项目占据的主轴空间(main size),值为长度值,默认值为auto
,即项目本来大小。s
+componentWillMount 在渲染前调用,在客户端也在服务端。
+componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异部操作阻塞UI)。
+componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。
+shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
+可以在你确认不需要更新组件时使用。
+componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
+componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。
+componentWillUnmount在组件从 DOM 中移除的时候立刻被调用。
]]>
web
- flex
+ react
+
+
+
+ html
+ /2018/06/04/web_html/
+ HTML基础知识格式 html lang=”en” !–设置语言–! !–head部分开始–! head eta charset=”UTF-8” !–设置编码方式–! meta name=”viewport” content=”width=device-width, initial-scale=1.0” !–设置网页内容宽度为显示设备的宽度,初始比例为1.0–! meta http-equiv=”X-UA-Compatible” content=”ie=edge” !–兼容IE浏览器– link rel=”stylesheet” type=”text/css” href=”reset.css” !–链接重置样式的reset.css–! link rel=”stylesheet” type=”text/css” href=”index.css” !–链接应用于网页的样式–! script src=”index.js” /script !–链接应用于网页的js文件–! titleDocument/title !–title会显示在浏览器的顶部标签页–! /head !–head部分结束–! body !–网页的主体内容–! /body /html
+表单form 使用label来联系,
+tips
+设置多个<input type=radio>
时,需要把多个input的name设置成一样,才会实现在多个radio中单选的效果。
+
+]]>
+
+ web
+
+
+ html
@@ -18481,289 +18541,259 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
- glup
- /2018/06/12/web_gulp/
- glup用来压缩打包html、css、img等。
-gulp的工作方式是流(stream) ,使用pipe作为传输管道。
-gulp的使用流程一般是 :首先通过gulp.src()方法获取到想要处理的文件流,然后把文件流通过pipe方法导入到gulp的插件中,最后把经过插件处理后的流再通过pipe方法导入到gulp.dest()中,gulp.dest()方法则把流中的内容写入到文件中。
-获取流 gulp.src(global[,options])
-写文件 gulp.dest(path[,options])
-监视文件 gulp.watch(global[,options],tasks) 或 gulp.watch(global[,options,cb])
-定义任务 gulp.task(name[, deps], fn) name为default的task会在执行gulp没有指定task的name时执行。
-执行任务 gulp.run()
-]]>
-
- web
-
-
- gulp
-
-
-
- html
- /2018/06/04/web_html/
- HTML基础知识格式 html lang=”en” !–设置语言–! !–head部分开始–! head eta charset=”UTF-8” !–设置编码方式–! meta name=”viewport” content=”width=device-width, initial-scale=1.0” !–设置网页内容宽度为显示设备的宽度,初始比例为1.0–! meta http-equiv=”X-UA-Compatible” content=”ie=edge” !–兼容IE浏览器– link rel=”stylesheet” type=”text/css” href=”reset.css” !–链接重置样式的reset.css–! link rel=”stylesheet” type=”text/css” href=”index.css” !–链接应用于网页的样式–! script src=”index.js” /script !–链接应用于网页的js文件–! titleDocument/title !–title会显示在浏览器的顶部标签页–! /head !–head部分结束–! body !–网页的主体内容–! /body /html
-表单form 使用label来联系,
-tips
-设置多个<input type=radio>
时,需要把多个input的name设置成一样,才会实现在多个radio中单选的效果。
+ hexo建站,github.io发布,多终端同步
+ /2018/06/05/blog_hexo+github/
+
+
+
+markdown 是一种适用撰写文本的语法和文件格式,后缀是.md
+hexo 是把写的markdown文件生成blog网站的工具,hexo是不仅是博客引擎驱动,还是一个快速、简洁高效的博客框架,可生成静态网页。
+git 是目前世界上最先进的分布式版本控制系统,用于对开发程序或者其他需要长期追踪版本变更的项目/文件的版本控制。
+github 提供网络站点进行blog的展示和备份
-]]>
-
- web
-
-
- html
-
-
-
- jquery
- /2018/06/05/web_jquery/
- 1. jQuery基础知识1.1. jquery的安装 只需要在html的script标签中引用jquery,两种方式:
+github pages是github网站的一个功能,专门用于管理用户自行编写的静态网页,提供静态网页存储空间,许多人把它用于搭建独立博客。
+github pages需要相应的博客引擎驱动,主流的是jekyllrb 和hexo 。
+部署和发布blog有很多方法。这里介绍的是markdown撰写博客,hexo建立博客网站,通过git管理博客网站,发布博客网站到github平台和多终端同步的操作。
+部署本地blog的写作环境(git+hexo),并用github.io网站发布blog
+
+git和github的配置 新终端搭建博客撰写环境都需要配置
+hexo的安装和配置 多终端同步和单终端有一点差别,建议一开始就配置多终端同步并备份到githbu网站,一步到位,避免博客在单终端丢失。
+撰写与发布blog
+github两个分支实现多终端同步
+日常blog撰写和备份操作
+
+1. git和github的配置 notes:username和useremail替换成自己的github用户名和邮箱。
+
+下载安装git
+
+注册github网站
+ 注册github网站,并创建一个名为username.github.io的仓库
+ 这个特殊的名称直接关联了gitpages,gitpages服务器会自动把上传到这个仓库的文档进行部署发布,并可以通过分配的域名https://username.github.io/实现博客的访问。
+
+git配置和生成SSH key密钥对
+ git配置:打开git bash(任意位置右键选择git bash here)
+ 运行git config --global user.name username
和git config --global user.email useremail
+ cd ~进入用户主目录,运行ssh-keygen -t rsa -C useremail@example.com
,一路回车,完成后会在用户主目录(C/Users/you/)下生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,即SSH key密钥对,id_rsa是私钥,需要保密,id_rsa.pub是公钥,可分享。
+
+github添加终端的公钥
+ 打开网页,登录github,打开settings->SSH and GPG keys,点击new SSH key,填上任意title,在key文本框粘贴公钥,即id_rsa.pub文件的内容,添加。
+
+验证与github的添加
+ 在git bash下运行ssh -T git@github.com
。 输出You’ve successfully suthenicated.则代表github账户成功授权你当前使用的终端,本机可连接上github了。
+
+
+2. hexo的安装和配置
+下载安装node.js
+ 使用git bash或者cmd终端检查node的安装,node -v
和npm -v
出现版本号即node和npm 安装成功
+
+安装hexo
+npm install hexo-cli -g
命令安装hexo-cli(hexo的cli命令行模块)
+
+初始化目录hexo init
选定位置通过git bash进入,创建hexo文件夹并进入hexo,hexo init命令初始化hexo文件夹。 即生成一系列建站需要的文件:
-在jquery.com 中下载jquery文本,它是一个js文件,在script标签中引用这个文件即可。<script type="text/javascript" src="flexible.js"></script>
+安装组件npm install
,npm install hexo-server --save
,npm install hexo-deployer-git
+ npm install
安装依赖的组件,会更新node_modules目录
+ npm install hexo-server --save
安装hexo-server以使用服务器
+ npm install hexo-deployer-git
安装hexo-deployer-git,实现通过hexo -g
部署hexo网站到github端
+
+配置博客布署deploy参数
+修改hexo下的站点配置文件_config.yml中deploy参数。 repository修改成github.io库的网址,branch填master分支。
+ deploy: type: git repository: git@github.com:username/username.github.io.git branch: master
+
+hexo其他配置
+ 在创建的博客网站文件夹下的_config.yml
文件中进行网站的大部分配置。参考hexo配置
+
+更换主题【optional】
+ hexo网站https://hexo.io/themes/有许多主题可选,比如常被使用的NexT主题 在Hexo主题页面ctrl+F并输入next查找到NexT主题,然后点击进入到NexT主题的github页面,该页面存储了NexT主题的源码,复制next主题的github仓库位置,并在hexo/themes位置下运行命令git clone https://github.com/theme-next/hexo-theme-next.git next
克隆next主题
+ 然后修改hexo下的站点配置文件_config.yml中的主题行为theme: next
+网站其他配置【optional】
+ 更改站点配置文件_config.yml中其他参数,例如
+ # Site title: username's blog #网站标题 subtitle: '' #网站副标题 description: '' #网站描述(主要用于SEO) keywords: author: username #作者 language: en #网站使用语言 timezone: Asia/Shanghai #网站时区,要在时区列表中选取,Hexo默认使用您电脑的时区
-1.2. jquery语法 1.2.1. 基础语法 $(selector).action()
+
+
+3. 撰写与发布blog
+撰写blog
+blog文件存放在hexo/source/_posts下,markdown(.md)格式文件,在这个位置新建和编辑markdown文档,这就是写文章的地方。
+使用命令hexo new "newpostname"
可以在hexo/source/_posts下新建一个newpostname.md的文件,打开这个文件即可写作。
+
+发布blog
+ 使用git bash进入博客建站所在位置hexo目录下,使用hexo clean & hexo g -d
合并三条命令实现发布blog,或者一步一步实现
-美元符号$
定义 jQuery
-选择符(selector)
“查询”和”查找” HTML 元素,选择器类似css选择器。
-jQuery 的 .action()
执行对元素的操作,主要通过方法的实现来达到jquery的目的。
-jQuery允许我们在相同元素上运行多条jQuery命令,一条接一条,这称为链接技术(chaining)。
+hexo clean
【optional】 INFO Validating config INFO Deleted database. INFO Deleted public folder. 清除缓存文件(db.json)和已生成的静态文件(public目录)
+
+hexo generate
=hexo g
生成静态页面,静态网页会根据source>_posts目录下所有markdown文件编译成静态网页(html),并生成public目录存储生成的静态文件。
+
+hexo serve
=hexo s
生成静态文件后,可以使用hexo serve
命令启动本地服务器来预览博客网站。
+
+hexo deploy
=hexo d
部署public到github的master分支(部署位置:站点配置文件_config.yml的deploy参数设置的github账号和分支名),即部署到gitpages。
+ 部署之后,可以在githube的page项目中查看到变化。我的是https://github.com/yanzhongsino/yanzhongsino.github.io 。很快也可以在https://yanzhongsino.github.io/ 线上看到生成的博客。
+
-1.3. jquery基础知识 $.each(array/object,callback)
可以遍历数组或者对象
-$.trim(string)
用于去除字符串两端的空白字符
-$(selector).get([index])
get方法通过索引在获取的dom对象中查找元素,从0开始索引对象。
-$(selector).index(selector/element)
index方法通过已知的元素搜索对应的索引值。
-1.4. jquery动画 1.4.1. 三种隐藏元素的方式 1.4.1.1. 基础隐藏显示动画 (display:none)
-$(selector).hide([ duration ], [ easing ], [ complete ])
隐藏,只有元素的display
不为none
时才有效,options可以为隐藏的时长,就产生了动画效果。
-$(selector).show([ duration ], [ easing ], [ complete ])
显示,只有元素的display:none
时才有效,options可以为显示的时长。
+
+每次修改blog或新增blog内容后,可用hexo clean & g -d快速部署到github端master分支,从而实现github.io网站博客的更新。
+4. github两个分支实现多终端同步【推荐配置】 在进行hexo的安装和配置后,可以通过命令hexo clean & hexo g -d
发布博客网站到github.io网站,但需要备份博客源文件和多终端协作时,便有一些问题。
+
+单终端配置hexo的问题:
+ hexo建站部署文件框架为:blog原始md文件存放在hexo建站位置的/source/_posts下,发布blog的命令hexo clean & hexo g -d
会生成/public并把它部署到github端的master分支,但在source/_posts下的原始md文件和hexo建站部署文件只在当前电脑存放。
-$(selector).toggle([ duration ], [ easing ], [ complete ])
hide和show的切换,动画效果是从右至左,横向动作。
-以上三种方法修改的是元素的display
属性,会影响元素的width
、height
和opacity
三个属性。
+多终端同步的意义:
+ 把博客md源文件和hexo部署文件备份到github,实现多端共享,共享md源文件可以避免单终端md博客文件丢失,共享hexo部署文件可以在不同电脑上写blog,并部署到github终端,保持一致。
+
+多终端同步实现原理:
+ 在github上新建hexo分支,hexo分支用于同步博客md源文件和hexo配置文件(即同步整个hexo目录),master分支用于发布博客到github.io网站(即同步public目录)。两个分支相互独立,永远不要合并。
+
+多终端同步实现具体操作:
+ github网站新建hexo分支,并把hexo分支设为默认分支,git clone
克隆hexo分支到本地终端,把克隆的目录下的.git文件夹移动到hexo配置好的建站目录hexo下。 用三条命令git add .
,git commit -m "submit"
,git push origin hexo
同步.git文件夹所在目录到github端hexo分支,这样操作之后克隆github端hexo分支便包含了hexo部署文件和md源文件,从而实现多端共享,github端的master分支只用于发布blog(同步生成的public目录)。
+
+
+4.1. 多终端同步配置 多终端同步配置具体步骤如下:
+
+安装node.js
+
+在github网页新建hexo分支并设为default默认分支
+
+克隆hexo分支到本地
+ 在git bash下进入想创建存储blog文件的位置,运行git clone git@github.com:username/username.github.io.git
,在当前目录克隆github的github.io仓库的默认分支(应为hexo)。
+ 克隆的目录中的.git文件夹是github端hexo分支的版本库Repositor,.git文件夹所在目录(目前是username.github.io)对应github的hexo分支(把.git移动到哪hexo分支就定位到哪)。
+
+移动.git目录
+ .git目录是通过git命令与github端hexo分支同步的关键文件。
+
+git bash下进入github.io后缀文件夹
+进入git clone生成的github.io后缀目录,除.git目录外的文件可以不用保留,.git目录移动到hexo安装和建站的目录下。
+
+
+同步本地hexo部署文件和blog源文件到github端的hexo分支
+在hexo部署目录下通过git三步命令同步hexo部署目录到github端的hexo分支。
+以后有修改新增blog或更改配置都用这三步同步hexo分支。三条命令执行前建议通过hexo clean
清除缓存和public目录,以免备份不需要的文件。
+
+git add .
+ 添加所有工作区(即本地github.io文件夹)的修改到暂存区(即.git里的stage/index文件)
+
+git commit -m “commit notes”
+ 提交暂存区的所有更改到本地的默认分支(此时为hexo)。
+
+git push/git push origin hexo
+ 提交本地分支到github端的hexo分支,origin指本地默认分支(即.git文件夹所在目录),github端hexo是默认分支,所以可以省略origin hexo,直接用git push便会同步本地github.io仓库到github端的默认分支(即hexo)。
+ 从而实现github端hexo分支备份了本地hexo部署目录,包括目录下的source文件夹的blog源文件。
+
+
+
+blog撰写与发布
+blog撰写与发布单终端和多终端是一样的操作。 撰写在source/_posts下进行,推荐使用markdown语法撰写博客;发布使用hexo clean & hexo g -d
命令。
-1.4.1.2. 上卷下拉效果 (height:0)
-$(selector).slideDown([ duration ], [ easing ], [ complete ])
下拉效果
+4.2. 配置后新终端使用同步功能 按照以上进行多终端同步配置后,在新的终端或者本地文件丢失后,可以通过以下步骤快速搭建博客撰写环境并同步博客数据。
+
+git和github的安装配置同上
-$(selector).slideUp([ duration ], [ easing ], [ complete ])
上卷效果
+安装node.js
-$(selector).slideToggle([ duration ], [ easing ], [ complete ])
slideDown和slideUp的切换,动画效果是从下至上,竖向动作。
-以上三种方法修改的是元素的height
属性。
+克隆hexo分支到本地
+ 在git bash下进入想创建存储blog文件的位置,运行git clone git@github.com:username/username.github.io.git
,在当前目录克隆github的github.io仓库的默认分支(应为hexo)。
+
+安装组件
+通过git bash进入本地github.io文件夹下依次执行 npm install hexo-cli -g
命令安装hexo-cli(hexo的cli命令行模块),npm install
命令安装依赖的模块,npm install hexo-server --save
安装hexo-server以使用服务器,npm install hexo-deployer-git
命令安装部署模块hexo-deployer-git(注意不要 hexo init)。
+
+进行日常blog撰写和备份
-1.4.1.3. 淡入淡出效果 (opacity:0)
-$(selector).fadeOut([ duration ], [ easing ], [ complete ])
淡出效果
+5. 日常blog撰写和备份操作
+blog同步 养成习惯,每次开始撰写blog前都通过git bash进入工作区,进行git pull
命令把github端的hexo分支的更新(更新可能是其他终端上提交的)同步到本地,实现多终端的内容完全同步。
+但如果本地有未提交的更新,则千万不要用git pull
,否则会覆盖本地更新;直接进入下一步;直到使用git add .
,git commit -m "submit"
,git push origin hexo
提交备份本地更新到github端的hexo分支后才可以使用git pull
(一般是在其他终端,把github的hexo分支更新拉到其他终端设备使用)。
+
+blog撰写 使用命令hexo new "newpostname"
可以在hexo/source/_posts下新建一个newpostname.md的文件,打开这个文件即可写作。
+ 在本地source/_posts下添加和修改md文档实现blog的日常撰写和修改。
-$(selector).fadeIn([ duration ], [ easing ], [ complete ])
淡入效果
+blog备份 只要blog有更改或者新增,或者配置文件有修改,即工作区(即本地的hexo目录或github.io目录)有文件修改,则建议对文件进行备份到GitHub端的hexo分支。
+用三条命令git add .
,git commit -m "submit"
,git push origin hexo
备份工作区,包括md博客源文件和hexo部署到github端的hexo分支。三条命令执行前建议通过hexo clean
清除缓存和public目录,以免备份不需要的文件。
-$(selector).fadeToggle([ duration ], [ easing ], [ complete ])
fadeOut和fadeIn的切换。
+blog生成和预览 通过hexo g
生成博客网站静态文件后,可以用hexo serve
=hexo s
命令启动本地服务器来在网址http://localhost:4000
预览博客网站。没问题再进行博客发布。
-$(selector).fadeTo(duration,opacity,callback)
-以上四种方法修改的是元素的opacity
属性,不会影响元素的高度和宽度。
+blog发布 可根据自身需求决定是否发布blog到github.io网站,一般写的blog完整程度比较高时可以发布。使用hexo clean & hexo g -d
命令,根据source/_posts下的博客源文件生成public目录(网站html并同步到github端的master分支,即发布blog到github.io网站。
-1.4.2. 自定义动画 $(selector).animate( properties ,[ duration ], [ easing ], [ complete ] )
-其中,properties
是不小于一个css属性的键值对构成的object对象,所有用于动画的属性必须是数字 的。duration
设置动画执行的时间。easing
规定每个动画的每一步完成后要执行的函数。progress
规定每一次动画调用时会执行这个回调,是一个进度的概念。complete
动画完成的回调函数。
-$(selector).stop( [clearQueue ], [ jumpToEnd ] ) .stop( [queue ], [ clearQueue ] ,[ jumpToEnd ] )
-
-.stop(); 停止当前动画,点击在暂停处继续开始
-.stop(true); 如果同一元素调用多个动画方法,尚未被执行的动画被放置在元素的效果队列中。这些动画不会开始,直到第一个完成。当调用.stop()的时候,队列中的下一个动画立即开始。如果clearQueue参数提供true值,那么在队列中的动画其余被删除并永远不会运行
-.stop(true,true); 当前动画将停止,但该元素上的 CSS 属性会被立刻修改成动画的目标值。
-
-1.5. jquery 操作html的DOM 1.5.1. 捕获
-.text() - 设置或返回所选元素的文本内容
-.html() - 设置或返回所选元素的内容(包括 HTML 标记)
-.val() - 设置或返回表单字段的值
-.attr() -设置或返回属性值 以上四种方法,如果没有参数,就返回相应值;如果有参数,参数为设置的值。
-
-1.5.2. 添加内容
-.append(“追加内容”) 在被选元素的结尾插入内容(仍然在该元素内部)
-.prepend(“追加内容”) 在被选元素开头插入内容(仍然在该元素内部)
-.after(“追加内容”) 在被选元素的后面插入内容(不在该元素内部)
-.before(“追加内容”) 在被选元素的前面插入内容(不在该元素内部) 以上四种方法都可以有多个参数,实现批量追加内容。
-
-1.5.3. 删除内容
-.remove() 删除被选元素及其子元素;接受一个jquery选择器语法的参数,用于过滤被删元素。
-.empty() 从被选元素中删除子元素
-
-1.5.4. 操作CSS
-addClass(“classname”) - 向被选元素添加一个或多个类
-removeClass(“classname”) - 从被选元素删除一个或多个类
-toggleClass(“classname”) - 对被选元素进行添加/删除类的切换操作
-css(“propertyname”,“value”) /css({“propertyname”:”value”,”propertyname”:”value”,…})- 若无设置value值,则返回指定样式属性;若设置value值,就设置样式属性。
-
-1.5.5. 控制尺寸
-width() 方法设置或返回元素的宽度(不包括内边距、边框或外边距)。
-height() 方法设置或返回元素的高度(不包括内边距、边框或外边距)。
-innerWidth() 方法返回元素的宽度(包括内边距)。
-innerHeight() 方法返回元素的高度(包括内边距)。
-outerWidth() 方法返回元素的宽度(包括内边距和边框)。
-outerHeight() 方法返回元素的高度(包括内边距和边框)。
+总结一下,在配置好写作环境后的任意一台终端的日常工作流应该是:
+
+git pull
同步远程github库的更新
+hexo new "newblog"
在source/_posts/下添加md格式的blog,或者修改已有的blog
+git add .
,git commit -m "commit notes"
,git push
把修改备份到github端
+下次写作重复以上三个步骤
+用hexo g
-hexo s
来预览博客
+直至blog完善成熟后,用命令hexo clean & hexo g -d
生成网站并部署到github.io
-1.6. DOM遍历
-祖先
-parent() 方法返回被选元素的直接父元素。
-parents() 方法返回被选元素的所有祖先元素,它一路向上直到文档的根元素 ()。
-parentsUntil() 方法返回介于两个给定元素之间的所有祖先元素。
-
+6. next主题同步和更新 7. Issue&Solution 7.0.1. Issue 1:建站日记写好后,在另一个终端通过git clone,修改后部署发现githubio没有显示,检查后发现由于next主题也是通过git clone获取的,git不能直接管理两个git项目(有.git文件夹的被识别为一个git项目)中嵌套的其他git项目,即git add .
,git commit -m "commit notes"
,git push
命令对hexo项目下的next项目无效,themes/next主题没有被同步到github端hexo分支。
+Solution A 把next主题的git项目改为普通文件进行同步 删除themes/next目录(删除前备份next目录到其他位置),然后git add .
,git commit -m "delete theme next"
,git push
命令同步到github端的hexo分支。 把备份的next目录移回themes下,并把next目录下的.git目录删除,然后后git add .
,git commit -m "commit notes"
,git push
命令同步到github端的hexo分支。此时next目录不作为git项目被同步到github的hexo端,而是普通文件。 优点是操作简单,缺点是next主题的更新较为麻烦。
-后代
-children() 方法返回被选元素的所有直接子元素。
-find() 方法返回被选元素的后代元素,一路向下直到最后一个后代。
-
+ Solution B fork+subtree同步next主题 删除themes/next目录(删除前备份next目录下修改过的文件,比如主题配置文件_config.yml),然后git add .
,git commit -m "delete theme next"
,git push
命令同步到github端的hexo分支。
+ fork主题项目,访问next 主题,点击右上角fork,表示把next这个git项目完整的复制一份到自己的github下,你的github账号下会有一个hexo-theme-next的新仓库。
+ notes:注意fork的next版本与hexo版本相匹配,next V8与hexo v5,否则githubpages为空白(过来人踩过的坑~~)
+ git remote add -f next git@github.com:yanzhongsino/hexo-theme-next.git
#添加远程仓库hexo-theme-next到本地,仓库名设置为next,远程仓库网址粘贴你的github账号下fork的hexo-theme-next的网址。git remote
显示所有添加的远程仓库,此时便能看见next。
+ git subtree add --prefix=themes/next next master --squash
#添加subtree,把本地next仓库作为子仓库添加到本地themes/next目录下,分支为master,–squash的意思是把subtree的改动合并成一次commit提交。
+ 在本地替换themes/next目录下的主题配置文件_config.yml,把删除前修改好的放进themes/next目录,用git add .
,git commit -m "add theme next"
,git push
命令同步本地的next目录到github端的hexo分支,实现next主题目录与githubio项目一起同步。此时,github端fork的hexo-theme-next项目也成为github端github.io项目的子项目。
-同胞
-siblings() 方法返回被选元素的所有同胞元素。
-next() 方法返回被选元素的下一个同胞元素。
-nextAll() 方法返回被选元素的所有跟随的同胞元素。
-nextUntil() 方法返回介于两个给定参数之间的所有跟随的同胞元素。
-prev(), prevAll() 以及 prevUntil() 方法的工作方式与上面的方法类似,只不过方向相反而已:它们返回的是前面的同胞元素(在 DOM 树中沿着同胞之前元素遍历,而不是之后元素遍历)。
+7.0.2. Isssue 2:当next主题发生更新时,由于next主题的配置文件_config.yml不一致,使用git pull拉取需要解决冲突问题,或者手动替换配置文件。
+Solution A 把next主题的配置文件_config.yml合并到站点配置文件_config.yml 把next主题的配置文件_config.yml的内容复制到站点配置文件_config.yml,每行都缩进两个空格(在VScode里选中内容,ctrl+]即可缩进),然后在内容前一行添加theme_config:
标题行。有任何主题配置都在博客配置文件中进行。
-过滤
-first() 方法返回被选元素的首个元素。
-last() 方法返回被选元素的最后一个元素。
-eq() 方法返回被选元素中带有指定索引号的元素。
-filter() 方法允许您规定一个标准。不匹配这个标准的元素会被从集合中删除,匹配的元素会被返回。
-not() 方法返回不匹配标准的所有元素,与filter()方法相反。
-
+ Solution B 使用_config.next.yml进行主题配置和同步【需要>hexo5.0】 next官方指导doc
+ 在本地的github.io的工作目录下,创建一个_config.next.yml的文件,把需要更改的主题设置从next/_config.yml复制到_config.next.yml并进行更改,用_config.next.yml进行主题配置和同步。
+ 当next主题在配置文件/themes/next/_config.yml增加新的特性时,可随时复制新特性的内容到这个文件_config.next.yml中,实现主题的配置和同步。
+ 将本地的修改推送给子项目(github端fork的hexo-theme-next项目)git subtree push --prefix=themes/next next master
,对github端fork的hexo-theme-next项目进行pull、push操作需要使用git subtree
命令。
+ 平常使用同步同前面介绍的一致。git add .
,git commit -m "commit notes"
,git push
命令同步hexo项目和blog源文件到github端的hexo分支,hexo clean & hexo g -d
命令部署网站(生成public)并发布到githubio网站(同步到github端的master分支)。 当next主题项目下文件更改时,增加了git subtree push --prefix=themes/next next master
推送本地更改到子项目(github端fork的hexo-theme-next项目)的操作。
+
+Solution C 使用source/_data/next.yml进行主题配置和同步 使用source/_data/next.yml进行主题配置和同步的方案在next v8版本被告知不支持【20201122】
+ 为了避免这种不便,next开发者提供了两种解决方案 。
+ 把主题配置修改的任务转移到新建的位置:复制一份主题配置文件/themes/next/_config.yml到新建的位置/source/_data/next.yml,并且维持/themes/next/_config.yml的默认值,在/source/_data/next.yml中修改主题配置。当next主题在配置文件/themes/next/_config.yml增加新的特性时,可随时复制新特性的内容到这个新的文件/source/_data/next.yml,这样更新主题时便不需额外处理冲突或者手动替换配置文件了。
+
+next主题更新【还未验证】 当next的源项目更新后,希望自己的网站和hexo部署同步更新的操作。 通过git bash进入本地next主题子项目,更新子项目:git fetch next master
,git pull https://github.com/example/hexo-theme-next.git
命令拉取next项目源更新的仓库到本地。 然后git add .
,git commit -m "commit notes"
,git push
命令推送本地更改到主项目,git subtree push --prefix=themes/next next master
推送本地更改到子项目。
-
-1.7. tips 使用jquery实现相同样式容器的批量导入。 从json文件中取数据并遍历数据,然后通过每条数据与重复项字符串的手动拼接,获得字符串格式的html结构,在把这个结果字符串通过$("selector").append(结果字符串)
到指定位置,即可实现导入相同样式容器到html中。
-]]>
-
- web
-
-
- jquery
-
-
-
- react
- /2018/06/14/web_react/
- 1. react1.1. JSX react使用JSX代替javascript,JSX是有点像XML的javascript语法扩展。
-1.1.1. 基本语法 ReactDOM.render( div h1 react教程 /h1 h2 欢迎学习 React /h2 p 这是一个很不错的 JavaScript 库! /p /div document.getElementById(‘example’))
-多个html标签需要全包含在一个div中,以上代码表示在id=example的html标签位置渲染一个div,里面有两个标题和一个段落。
-1.1.2. 嵌入javascript表达式
-JSX中可以嵌入javascript表达式,但需要写在花括号{}内。
-注释也需要写在花括号中。
-花括号中的数组会自动展开所有成员。
-表达式不能使用if else
语句,但可以用conditional
三元运算表达式。<h1>{i == 1 ? 'True!' : 'False'}</h1>
-
-1.1.3. 内联样式 使用驼峰法设置内联样式
-ReactDOM.render( h1 style = {myStyle} 菜鸟教程 /h1 document.getElementById(‘example’))
-1.1.4. 渲染HTML标签(strings)和React组件(classes) React 可以渲染 HTML 标签 (strings) 或 React 组件 (classes)。
-要渲染 HTML 标签,只需在 JSX 里使用小写字母的标签名。
-要渲染 React 组件,只需创建一个大写字母开头的本地变量。
-1.1.5. tips 由于 JSX 就是 JavaScript,一些标识符像 class 和 for 不建议作为 XML 属性名。作为替代,React DOM 使用 className 和 htmlFor 来做对应的属性。
-1.2. 组件 组件API的7个方法:
-
-设置状态:setState
-替换状态:replaceState
-设置属性:setProps
-替换属性:replaceProps
-强制更新:forceUpdate
-获取DOM节点:findDOMNode
-判断组件挂载状态:isMounted
-
-react元素是DOM标签或者用户自定义组件,当是自定义组件时,会将JSX属性作为单个对象传递给该组件,这个对象是“props”。 组件名称必须以大写字母开头。 组件的返回值只能有一个根元素。 所有的React组件必须像纯函数(即不能改变输入值的函数)那样使用它们的props。 React应用中,按钮、表单、对话框、整个屏幕的内容等,这些通常都被表示为组件。
-1.3. 生命周期
-组件的生命周期可分成三个状态:
-
-
-Mounting:已插入真实 DOM
-Updating:正在被重新渲染
-Unmounting:已移出真实 DOM
-
-
-生命周期的方法有:
-
-
-componentWillMount 在渲染前调用,在客户端也在服务端。
-componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异部操作阻塞UI)。
-componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。
-shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
-可以在你确认不需要更新组件时使用。
-componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
-componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。
-componentWillUnmount在组件从 DOM 中移除的时候立刻被调用。
-]]>
-
- web
-
-
- react
-
-
-
- python脚本中字符串内的引号需要转义
- /2024/06/05/python_syntax_string_quetos/
-
+7.0.3. Issue 3:hexo deploy时报错Authentication failed 报错信息如下
+fatal: 发送请求时出错。 fatal: 基础连接已经关闭: 连接被意外关闭。 yLogon failed, use ctrl+c to cancel basic credential prompt. remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/yanzhongsino/yanzhongsino.github.io.git/' FATAL { err: Error: Spawn failed at ChildProcess.<anonymous> (D:\yanzhongsino.github.io\node_modules\hexo-util\lib\spawn.js:51:21) at ChildProcess.emit (events.js:315:20) at ChildProcess.cp.emit (D:\yanzhongsino.github.io\node_modules\cross-spawn\lib\enoent.js:34:29) at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12) { code: 128 } } Something's wrong. Maybe you can find the solution here: %s https://hexo.io/docs/troubleshooting.html
-记录使用python脚本时发现的一个语法错误
-python脚本的语法错误的报错记录
-
-File "/soft/Cp-hap/scripts/parse.py", line 86 o.write('Haven't detected reads which are long enough to support the structures') ^ SyntaxError: invalid syntax
+是因为github的认证信息过期了,用以下两条命令可以解决这个问题。 git config –global –unset credential.helper git config credential.helper store
+7.0.4. Issue 4:hexo deploy报错unable to access 20210518 报错信息如下
+On branch master nothing to commit, working tree clean fatal: unable to access 'https://github.com/yanzhongsino/yanzhongsino.github.io.git/': OpenSSL SSL_read: Connection was reset, errno 10054 FATAL { err: Error: Spawn failed at ChildProcess.<anonymous> (D:\yanzhongsino.github.io\node_modules\hexo-util\lib\spawn.js:51:21) at ChildProcess.emit (events.js:315:20) at ChildProcess.cp.emit (D:\yanzhongsino.github.io\node_modules\cross-spawn\lib\enoent.js:34:29) at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12) { code: 128 } } Something's wrong. Maybe you can find the solution here: %s https://hexo.io/docs/troubleshooting.html
-
-python脚本的单引号
-
-
-这样的报错是因为,在python脚本中,用单引号引起来的字符串中间不能再有单引号了,而脚本parse.py中错误的使用了Haven’t 在单引号内。
-修改的办法很简单,把Haven’t 改成Have not ;或者在字符串中的单引号前面加上转义字符反斜杠,改为Haven't ;或者把字符串外面的单引号改成双引号,改为**”Haven’t detected reads which are long enough to support the structures”**。
-
-
-欢迎关注微信公众号:生信技工
-公众号主要分享生信分析、生信软件、基因组学、转录组学、植物进化、生物学概念等相关内容,包括生物信息学工具的基本原理、操作步骤和学习心得。
+Solution 可能是git的协议问题,修改hexo下的站点配置文件_config.yml中deploy参数,地址如果是http协议的修改成ssh协议的。 把deploy的type修改成git,repository若是https://github.com/yanzhongsino/yanzhongsino.github.io.git
格式修改成git@github.com:yanzhongsino/yanzhongsino.github.io.git
格式,如下。
- ]]>
-
- programming
- python
- syntax
- string
-
-
- python
- syntax
- error
- quotes
- string
-
-
-
- Linux系统服务器清理系统日志
- /2024/05/26/linux_operation.and.maintenance_log.release/
-
+deploy: type: git repository: git@github.com:yanzhongsino/yanzhongsino.github.io.git branch: master
-1. 查看系统日志记录情况【需要root权限】 服务器运行久了系统日志会满,有时开机会提示【SEL IS FULL】。这个时候就需要清理系统日志。 系统日志存放在目录/var/log/journal/
下面。
-
-ll /var/log/journal/
查看系统日志文件
-du -t 100M /var
查看/var
目录下面所有文件,包括系统日志和缓存等。
-journalctl --disk-usage
命令查看,得到Archived and active journals take up 1.9G in the file system.
表示系统日志文件占了1.9G。
-
-2. 清理系统日志文件
-journalctl命令会自动维护剩余日志文件,按文件大小或产生时间自动维护。【推荐】
+也可能是网络之类的问题,就隔一段时间试试hexo deploy
。
+报错kex_exchange_identification: Connection closed by remote host
+问题 运行git的博客同步命令,报错kex_exchange_identification: Connection closed by remote host。
-
-journalctl --vacuum-size=10M
命令表示只保留最近时间10Mb的日志文件;
-journalctl --vacuum-time=1w
命令表示只保留最近一周的日志文件。
-
+$ ssh -T git@github.com kex_exchange_identification: Connection closed by remote host Connection closed by 20.205.243.166 port 22
+
-也可以单独一次清理
-
-
-rm -rf /var/log/journal/*
命令直接删除/var/log/journal/
目录下的所有文件
-
-
-清理完之后再使用journalctl --disk-usage
命令查看,会发现日志文件容量变小。
+方案 运行VPN的全局模式会导致这个报错,取消全局模式即可。
+小记
+学习hexo+githubpages建站已是两年前(2018.06)的事,那时初学前端,好多新知识需要记录,就先建好站用来发布。结果转行前端从入门到放弃只不过两三月,便把博客搁置了。
+前几天拾起来,建站知识已忘得精光,原来应该是配置好了hexo的多端同步,但由于两年的荒废,遗忘导致我把hexo和master分支合并了,博客的原始文件有没备份,所以一切从头开始。
+学了几天,博客搭建初步捡回来了。可不能再忘,这次笔记记得很精细,下次如果需要看看笔记应该可以捡回来。
+——2020.11.18 Yan Zhong in Guangzhou
+next主题的同步稍微有点麻烦,在理解git的各种命令的含义的基础上理解各种操作实现了什么目的会更有帮助。 目前版本号 hexo 5.2.0, next 8.0.2。
+——2020.11.22 Yan Zhong in Guangzhou
+添加了攥写blog时插入图片或背景音乐教程的小节,并添加了BGM
+——2021.03.25 Yan Zhong in Guangzhou 发现disqus突然给github pages每篇博客后面插入了广告,所以取消了评论系统disqus。 ——2024.11.13 Yan Zhong in Guangzhou
欢迎关注微信公众号:生信技工
@@ -18771,13 +18801,16 @@ BiocManager的版本与R版本一一对应,安装时如果版本不对会有
]]>
- linux
- operation and maintenance
- log
+ blog
- server
- log
+ blog
+ hexo
+ github
+ tutorial
+ sync
+ build website
+ deploy website
diff --git a/tags/3s/index.html b/tags/3s/index.html
index 19c914899..fde1cdb3e 100644
--- a/tags/3s/index.html
+++ b/tags/3s/index.html
@@ -403,12 +403,12 @@