Add Vercel configuration for rewrites and build settings

This commit is contained in:
IvisTang 2025-12-17 17:47:45 +08:00
parent 072524e303
commit 0d31d42de4
32 changed files with 7435 additions and 289 deletions

4
.gitignore vendored
View File

@ -6,8 +6,9 @@
01.reference/*
02.mapping_assembly/*
03.denovo_assembly/*
04.plastid/*
04.cds_prediction/*
05.reduce_redundancy/*
05.orthology_inference/*
06.phylogeny_reconstruction/*
98.results/*
99.scripts/bucky/
@ -15,3 +16,4 @@
.pueue.yml
run.status
!*/_description.md
tmp/

View File

@ -0,0 +1,5 @@
# Results Directory
This directory contains the results generated from the data analysis, which should be uploaded to the public sharing platform.
## Files Included

View File

@ -0,0 +1,316 @@
#! /usr/bin/env python3
import os
import re
import argparse
import sys
from Bio import SeqIO
from Bio.SeqRecord import SeqRecord
from Bio.Seq import Seq
from pathlib import Path
import logging
logging.basicConfig(level=logging.DEBUG, format="[%(levelname)s]: %(message)s")
class BestHit:
def __init__(self, e_value: float | None = None, target_name: str | None = None):
self.e_value = e_value
self.target_name = target_name
def parse_fasta(fasta_file_path) -> dict[str, str]:
"""
Parse a FASTA file and return a list of sequence ids.
Args:
fasta_file_path: Path to the FASTA file
Returns:
list: Dictionary of sequences
"""
sequences: dict[str, str] = {}
try:
for record in SeqIO.parse(fasta_file_path, "fasta"):
sequences[record.id] = str(record.seq)
except Exception as e:
logging.error(f"Error parsing FASTA file {fasta_file_path}: {e}")
return sequences
def get_ids_from_fasta(fasta_file_path) -> list[str]:
"""
Parse a FASTA file and return a list of sequence ids.
Args:
fasta_file_path: Path to the FASTA file
Returns:
list: List of sequence ids
"""
seqs = parse_fasta(fasta_file_path)
return list(seqs.keys())
def parse_hmmer_tbl(tbl_file_path) -> BestHit:
"""
Parse HMMER tbl format result file and extract best hit information
Args:
tbl_file_path: Path to the tbl file
Returns:
dict: Best hit information
"""
best_hit = BestHit()
try:
with open(tbl_file_path, "r") as f:
for line in f:
# Skip comment lines
if line.startswith("#"):
continue
# Split line (tbl format is typically space or tab separated)
parts = re.split(r"\s+", line.strip())
if len(parts) < 5:
continue
# Extract key information: target name, E-value, score, etc.
# tbl format columns: target name, target accession, query name, query accession, E-value, score, etc.
target_name = parts[0]
e_value = float(parts[4]) # Full sequence E-value
# If it's a new sequence or we found a better hit (lower E-value)
if best_hit.e_value is None or e_value < best_hit.e_value:
best_hit = BestHit(e_value=e_value, target_name=target_name)
except Exception as e:
logging.error(f"Error parsing tbl file {tbl_file_path}: {e}")
return BestHit()
return best_hit
def find_corresponding_files(fasta_dir, tbl_dir) -> list[tuple[Path, Path]]:
"""
Find corresponding FASTA and tbl file pairs
Args:
fasta_dir: Directory containing FASTA files
tbl_dir: Directory containing tbl result files
Returns:
list: List of (fasta_file_path, tbl_file_path) tuples
"""
file_pairs: list[tuple[Path, Path]] = []
# Get all FASTA files
fasta_files = {}
for fasta_path in Path(fasta_dir).glob("*.fa"):
stem = fasta_path.stem
fasta_files[stem] = fasta_path
# Find corresponding tbl files
for stem, fasta_path in fasta_files.items():
tbl_name = f"{stem}.fa.hmmsearch.tblout"
tbl_path = Path(tbl_dir) / tbl_name
if tbl_path.exists():
file_pairs.append((fasta_path, tbl_path))
else:
logging.warning(f"No corresponding tbl file found for {stem}")
return file_pairs
def add_best_hit_to_ogs_dir(
file_pair: tuple[Path, Path],
all_sequences: dict[str, str],
ogs_dir: Path,
species_name: str | None = None,
) -> tuple[str, list[str]]:
"""
Add best hit information to FASTA file
Args:
file_pair: Tuple of (fasta_path, tbl_path)
all_sequences: Dictionary of homolog sequences
ogs_dir: Directory to save FASTA files
species_name: Species name of candidate species
Returns:
tuple: (stem, seq_ids)
"""
fasta_path, tbl_path = file_pair
# Parse tbl file to get best hits
best_hit = parse_hmmer_tbl(tbl_path)
if not best_hit.target_name:
logging.warning(f"No valid hits found in {tbl_path}, skipping...")
return fasta_path.stem, []
best_seq = best_hit.target_name
seq_ids = get_ids_from_fasta(fasta_path)
seqs: dict[str, str] = {}
for seq_id in seq_ids:
seq = all_sequences.get(seq_id)
if not seq:
logging.warning(f"Sequence ID {seq_id} not found! Skipping...")
return fasta_path.stem, []
seqs[seq_id] = seq
modified_ogs_seq_record = [
SeqRecord(seq=Seq(v), id=k.split("@")[0], description="")
for k, v in seqs.items()
]
homolog_dir = Path(ogs_dir) / fasta_path.stem
homolog_dir.mkdir(parents=True, exist_ok=True)
modified_ogs_seq_path = homolog_dir / f"{fasta_path.stem}.fa"
SeqIO.write(modified_ogs_seq_record, modified_ogs_seq_path, "fasta")
homolog_seq = all_sequences.get(best_seq)
if not homolog_seq:
logging.warning(f"Best hit sequence {best_seq} not found! Skipping...")
return fasta_path.stem, []
if not species_name:
species_name = best_seq.split("@")[0]
homolog_seq_path = homolog_dir / f"{fasta_path.stem}_{species_name}.fa"
homolog_seq_record = SeqRecord(
seq=Seq(homolog_seq), id=best_seq.split("@")[0], description=""
)
SeqIO.write([homolog_seq_record], homolog_seq_path, "fasta")
seq_ids.append(best_seq)
return fasta_path.stem, seq_ids
def process_all_files(fasta_dir, tbl_dir, output_dir, all_fasta, species_name):
"""
Process all FASTA and tbl file pairs
Args:
fasta_dir: Directory containing FASTA files
tbl_dir: Directory containing tbl result files
output_file: Output file path
all_fasta: FASTA format cds file of candidate species
"""
logging.info("Starting file processing...")
logging.info(f"FASTA directory: {fasta_dir}")
logging.info(f"tbl directory: {tbl_dir}")
logging.info(f"Output Directory: {output_dir}")
logging.info(f"Homolog FASTA file: {all_fasta}")
og_list = {}
all_sequences = parse_fasta(all_fasta)
if not all_sequences:
logging.error(f"No sequences found in FASTA file {all_fasta}")
sys.exit(1)
# Find corresponding file pairs
file_pairs = find_corresponding_files(fasta_dir, tbl_dir)
if not file_pairs:
logging.error("No corresponding FASTA-tbl file pairs found")
sys.exit(1)
logging.info(f"Found {len(file_pairs)} file pairs to process")
output_file = Path(output_dir) / "updated_ogs_list.txt"
ogs_dir = Path(output_dir) / "ogs"
ogs_dir.mkdir(parents=True, exist_ok=True)
# Process each file pair
for i, file_pair in enumerate(file_pairs, 1):
logging.info(f"Processing pair {i}/{len(file_pairs)}:")
stem, seq_ids = add_best_hit_to_ogs_dir(
file_pair, all_sequences, ogs_dir, species_name
)
if not seq_ids:
logging.info(f"Skipping {stem}!")
continue
og_list[stem] = seq_ids
with open(output_file, "w") as out_f:
for og, ids in og_list.items():
out_f.write(f"{og}\t" + "\t".join(ids) + "\n")
logging.info(f"\nProcessing completed! All results saved to: {output_dir}")
logging.info(f"Updated OGS list saved to: {output_file}")
logging.info(f"Total OGS processed successfully: {len(og_list)}")
def main(fasta_directory, tbl_directory, output_directory, all_fasta, species_name):
"""
Main function - take paths and run processing
Args:
fasta_directory: Folder containing FASTA files
tbl_directory: Folder containing tbl result files
output_file: Output file path
all_fasta: FASTA format cds file of candidate species
species_name: Species name of candidate species
"""
# Check if input directories exist
if not os.path.exists(fasta_directory):
logging.error(f"FASTA directory does not exist {fasta_directory}")
sys.exit(1)
if not os.path.exists(tbl_directory):
logging.error(f"tbl directory does not exist {tbl_directory}")
sys.exit(1)
try:
Path(output_directory).mkdir(parents=True, exist_ok=True)
except Exception as e:
logging.error(f"Error creating output directory {output_directory}: {e}")
sys.exit(1)
if not os.path.exists(all_fasta):
logging.error(f"Homolog FASTA file does not exist {all_fasta}")
sys.exit(1)
# Process all files
process_all_files(
fasta_directory, tbl_directory, output_directory, all_fasta, species_name
)
if __name__ == "__main__":
# Parse command-line arguments and call main
parser = argparse.ArgumentParser(
description="Add HMMER best hit into orthologs FASTA."
)
parser.add_argument(
"-d",
"--fasta_directory",
required=True,
help="Directory containing FASTA files",
)
parser.add_argument(
"-t",
"--tbl_directory",
required=True,
help="Directory containing tbl result files",
)
parser.add_argument(
"-f",
"--all_fasta",
required=True,
help="FASTA format cds file of cadidate species",
)
parser.add_argument(
"-o",
"--output_directory",
required=True,
help="Directory to write output seqname",
)
parser.add_argument(
"-s",
"--species_name",
required=False,
help="Species name of candidate species",
)
args = parser.parse_args()
main(
args.fasta_directory,
args.tbl_directory,
args.output_directory,
args.all_fasta,
args.species_name,
)

View File

@ -1,215 +0,0 @@
#! /usr/bin/env python3
import os
import re
import argparse
from Bio import SeqIO
from pathlib import Path
def parse_fasta(fasta_file_path):
"""
Parse a FASTA file and return a list of sequence ids.
Args:
fasta_file_path: Path to the FASTA file
Returns:
list: List of sequence ids
"""
sequence_ids = []
try:
for record in SeqIO.parse(fasta_file_path, "fasta"):
sequence_ids.append(record.id)
except Exception as e:
print(f"Error parsing FASTA file {fasta_file_path}: {e}")
return sequence_ids
def parse_hmmer_tbl(tbl_file_path):
"""
Parse HMMER tbl format result file and extract best hit information
Args:
tbl_file_path: Path to the tbl file
Returns:
dict: Best hit information
"""
best_hit = {}
try:
with open(tbl_file_path, "r") as f:
for line in f:
# Skip comment lines
if line.startswith("#"):
continue
# Split line (tbl format is typically space or tab separated)
parts = re.split(r"\s+", line.strip())
if len(parts) < 5:
continue
# Extract key information: target name, E-value, score, etc.
# tbl format columns: target name, target accession, query name, query accession, E-value, score, etc.
target_name = parts[0]
e_value = float(parts[4]) # Full sequence E-value
# If it's a new sequence or we found a better hit (lower E-value)
if not best_hit.keys() or e_value < best_hit["e_value"]:
best_hit = {
"e_value": e_value,
"target_name": target_name,
}
except Exception as e:
print(f"Error parsing tbl file {tbl_file_path}: {e}")
return {}
return best_hit
def find_corresponding_files(fasta_dir, tbl_dir):
"""
Find corresponding FASTA and tbl file pairs
Args:
fasta_dir: Directory containing FASTA files
tbl_dir: Directory containing tbl result files
Returns:
list: List of (fasta_file_path, tbl_file_path) tuples
"""
file_pairs = []
# Get all FASTA files
fasta_files = {}
for fasta_path in Path(fasta_dir).glob("*.fa"):
stem = fasta_path.stem
fasta_files[stem] = fasta_path
# Find corresponding tbl files
for stem, fasta_path in fasta_files.items():
tbl_name = f"{stem}.fa.hmmsearch.tblout"
tbl_path = Path(tbl_dir) / tbl_name
if tbl_path.exists():
file_pairs.append((fasta_path, tbl_path))
else:
print(f"Warning: No corresponding tbl file found for {stem}")
return file_pairs
def add_best_hit_to_og_list(file_pair):
"""
Add best hit information to FASTA file
Args:
file_pair: Tuple of (fasta_path, tbl_path)
Returns:
tuple: (stem, seq_ids)
"""
fasta_path, tbl_path = file_pair
# Parse tbl file to get best hits
best_hit = parse_hmmer_tbl(tbl_path)
if not best_hit:
print(f"Warning: No valid hits found in {tbl_path}")
return fasta_path.stem, []
best_seq = best_hit["target_name"]
seq_ids = parse_fasta(fasta_path)
seq_ids.append(best_seq)
return fasta_path.stem, seq_ids
def process_all_files(fasta_dir, tbl_dir, output_file):
"""
Process all FASTA and tbl file pairs
Args:
fasta_dir: Directory containing FASTA files
tbl_dir: Directory containing tbl result files
output_file: Output file path
"""
print("Starting file processing...")
print(f"FASTA directory: {fasta_dir}")
print(f"tbl directory: {tbl_dir}")
print(f"Output file: {output_file}")
print("-" * 50)
og_list = {}
# Find corresponding file pairs
file_pairs = find_corresponding_files(fasta_dir, tbl_dir)
if not file_pairs:
print("No corresponding FASTA-tbl file pairs found")
return
print(f"Found {len(file_pairs)} file pairs to process")
# Process each file pair
for i, file_pair in enumerate(file_pairs, 1):
print(f"\nProcessing pair {i}/{len(file_pairs)}:")
stem, seq_ids = add_best_hit_to_og_list(file_pair)
if not seq_ids:
print(f"Skipping {stem} due to no valid hits")
continue
og_list[stem] = seq_ids
with open(output_file, "w") as out_f:
for og, ids in og_list.items():
out_f.write(f"{og}\t" + "\t".join(ids) + "\n")
print(f"\nProcessing completed! All results saved to: {output_file}")
def main(fasta_directory, tbl_directory, output_file):
"""
Main function - take paths and run processing
Args:
fasta_directory: Folder containing FASTA files
tbl_directory: Folder containing tbl result files
output_file: Output file path
"""
# Check if input directories exist
if not os.path.exists(fasta_directory):
print(f"Error: FASTA directory does not exist {fasta_directory}")
return
if not os.path.exists(tbl_directory):
print(f"Error: tbl directory does not exist {tbl_directory}")
return
# Process all files
process_all_files(fasta_directory, tbl_directory, output_file)
if __name__ == "__main__":
# Parse command-line arguments and call main
parser = argparse.ArgumentParser(
description="Add HMMER best hit into orthologs FASTA."
)
parser.add_argument(
"-f",
"--fasta_directory",
required=True,
help="Directory containing FASTA files",
)
parser.add_argument(
"-t",
"--tbl_directory",
required=True,
help="Directory containing tbl result files",
)
parser.add_argument(
"-o",
"--output_file",
required=True,
help="File to write output seqname",
)
args = parser.parse_args()
main(args.fasta_directory, args.tbl_directory, args.output_file)

28
99.scripts/miscs/macse.sh Normal file
View File

@ -0,0 +1,28 @@
#! /bin/bash
FS_LR=7
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <reliable_seq> <less_reliable_seq> <stem>"
echo "Perform MACSE alignment on given sequences"
exit 1
fi
seq=$1
seq_lr=$2
stem=$3
{
echo "Command:"
echo "macse -prog alignSequences -seq $seq -seq_lr ${seq_lr}"
echo " -out_NT ${stem}.nal -out_AA ${stem}.pal"
echo " -optim 2 -max_refine_iter 3 -local_realign_init 0.2 -fs_lr $FS_LR"
} >alignSequences.log
macse -prog alignSequences \
-seq "$seq" -seq_lr "${seq_lr}" \
-out_NT "$stem".nal -out_AA "$stem".pal \
-optim 2 \
-max_refine_iter 3 \
-local_realign_init 0.2 \
-fs_lr $FS_LR \
>>alignSequences.log 2>&1

View File

@ -7,6 +7,7 @@ Function: Rename sequences in FASTA file to format: [prefix@sequence_number]
import sys
import os
def rename_fasta_sequences(input_file, prefix, output_file=None):
"""
Rename sequence headers in a FASTA file
@ -22,25 +23,36 @@ def rename_fasta_sequences(input_file, prefix, output_file=None):
file_base, file_ext = os.path.splitext(input_file)
output_file = f"{file_base}_renamed{file_ext}"
match_tsv = f"{output_file}.tsv"
print(f"Input file: {input_file}")
print(f"Output file: {output_file}")
print(f"Naming format: {prefix}@mrna_<number>")
print(f"Match TSV file: {match_tsv}")
# Counter for sequences
seq_count = 0
try:
with open(input_file, 'r') as fin, open(output_file, 'w') as fout:
with (
open(input_file, "r") as fin,
open(output_file, "w") as fout,
open(match_tsv, "w") as tsvout,
):
tsvout.write("Original_Name\tNew_Name\n")
for line in fin:
if line.startswith('>'):
if line.startswith(">"):
# Sequence header line: rename it
seq_count += 1
new_name = f">{prefix}@mrna_{seq_count}\n"
fout.write(new_name)
original_name = line[1:].strip().split()[0]
new_name = f"{prefix}@mrna_{seq_count}\n"
fout.write(f">{new_name}")
tsvout.write(f"{original_name}\t{new_name}\n")
else:
# Sequence data line: write as-is
fout.write(line)
print(f"Successfully renamed {seq_count} sequences")
print(f"Input file: {input_file}")
print(f"Output file: {output_file}")
print(f"Naming format: {prefix}@mrna_number")
except FileNotFoundError:
print(f"Error: Input file '{input_file}' not found")
@ -49,6 +61,7 @@ def rename_fasta_sequences(input_file, prefix, output_file=None):
print(f"Error processing file: {e}")
sys.exit(1)
def main():
"""Main function"""
if len(sys.argv) < 3:
@ -67,5 +80,6 @@ def main():
rename_fasta_sequences(input_file, prefix, output_file)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,51 @@
#! /bin/bash
set -e
if [ "$#" -ne 4 ]; then
echo "Usage: $0 <ogs_dir> <outdir> <proteome> <threads>"
echo "search homologous sequences in <proteome> using HMMs built from orthogroup alignments"
exit 1
fi
ogs_dir=$(readlink -f "$1")
outdir=$2
proteome=$(readlink -f "$3")
threads=$4
mkdir -p "$outdir"
cd "$outdir" || exit 1
echo "Working directory: $(pwd)"
echo "Using OGS directory: $ogs_dir"
echo "Using $threads threads"
echo ""
echo "Starting orthogroup sequence alignment..."
mkdir -p msa
echo -n >mafft.cmds
for i in "$ogs_dir"/*.fa; do
j=$(basename "$i")
echo "linsi --quiet $i > msa/$j" >>mafft.cmds
done
xargs -t -P "$threads" -I cmd -a mafft.cmds bash -c "cmd"
echo "Orthogroup sequence alignment completed."
echo ""
echo "Starting HMM building from alignments..."
mkdir -p hmms
echo -n >hmmbuild.cmds
for i in msa/*.fa; do
j=$(basename "$i")
echo "hmmbuild -o hmms/${j}.hmmbuild.out --amino hmms/${j}.hmm $i" >>hmmbuild.cmds
done
xargs -t -P "$threads" -I cmd -a hmmbuild.cmds bash -c "cmd"
echo "HMM building completed."
echo ""
echo "Starting HMM search against other proteome..."
mkdir -p search
echo -n >hmmsearch.cmds
for i in hmms/*.hmm; do
j=$(basename "$i")
echo "hmmsearch --tblout search/${j}search.tblout $i $proteome > search/${j}search.rawout" >>hmmsearch.cmds
done
xargs -t -P "$threads" -I cmd -a hmmsearch.cmds bash -c "cmd"
echo "HMM search completed."
echo ""
echo "All steps completed successfully."

View File

@ -1,8 +0,0 @@
#! /usr/bin/env bash
mkdir -p msa
echo -n > mafft.cmds
for i in ogs/*.fa ; do
j=$(basename "$i")
echo "linsi --quiet $i > msa/$j" >> mafft.cmds
done
xargs -t -P 8 -I cmd -a mafft.cmds bash -c "cmd"

View File

@ -1,8 +0,0 @@
#! /usr/bin/env bash
mkdir -p hmms
echo -n > hmmbuild.cmds
for i in msa/*.fa ; do
j=$(basename "$i")
echo "hmmbuild -o hmms/${j}.hmmbuild.out --amino hmms/${j}.hmm $i" >> hmmbuild.cmds
done
xargs -t -P 8 -I cmd -a hmmbuild.cmds bash -c "cmd"

View File

@ -0,0 +1,34 @@
#! /bin/bash
set -e
SCRIPTS=${SCRIPTS:-"$PROJECTHOME/99.scripts"}
THREADS=${THREADS:-12}
if [ "$#" -ne 5 ]; then
echo "Usage: $0 <ogs_dir> <hmmsearch_result_dir> <all_cds.fa> <output_dir> <homolog_stem>"
echo "Integrate hmmsearch results to new orthologous groups directory and perform MACSE alignment"
exit 1
fi
ogs_dir=$(readlink -f "$1")
search_dir=$(readlink -f "$2")
all_cds=$(readlink -f "$3")
out_dir=$4
stem=$5
echo "Integrating hmmsearch results to new orthologous groups directory..."
python3 "$SCRIPTS"/miscs/hmmsearch_result_to_new_ogs_dir.py \
-d "$ogs_dir" \
-t "$search_dir" \
-f "$all_cds" \
-o "$out_dir" \
-s "$stem"
echo "Integration completed."
echo "Starting MACSE alignment of orthologous groups..."
echo -n >macse.cmds
for og_dir in "$out_dir"/ogs/*; do
j=$(basename "$og_dir")
echo "cd $og_dir && bash $SCRIPTS/miscs/macse.sh ${j}_${stem}.fa ${j}.fa $j" >>macse.cmds
done
xargs -t -P "$THREADS" -I cmd -a macse.cmds bash -c "cmd"
echo "MACSE alignment completed."

View File

@ -1,8 +0,0 @@
#! /usr/bin/env bash
mkdir -p hmmsearch
echo -n > hmmsearch.cmds
for i in hmms/*.hmm ; do
j=$(basename "$i")
echo "hmmsearch --tblout hmmsearch/${j}search.tblout $i ../../01.reference/Zju.pep.fa > hmmsearch/${j}search.rawout" >> hmmsearch.cmds
done
xargs -t -P 8 -I cmd -a hmmsearch.cmds bash -c "cmd"

View File

@ -1,8 +0,0 @@
#! /usr/bin/env bash
mkdir -p pep_aln
echo -n > mafft.cmds
for i in raw_ogs/pep/*.fa; do
j=$(basename "$i")
echo "linsi --quiet $i > pep_aln/${j/.fa/.pal}" >> mafft.cmds
done
xargs -t -P 8 -I cmd -a mafft.cmds bash -c "cmd"

View File

@ -1,8 +0,0 @@
#! /usr/bin/env bash
mkdir -p cds_aln
echo -n > pal2nal.cmds
for i in pep_aln/*.pal; do
j=$(basename "$i")
echo "pal2nal.pl $i raw_ogs/cds/${j/.pal/.fa} -output fasta > cds_aln/${j/.pal/.nal}" >> pal2nal.cmds
done
xargs -t -P 8 -I cmd -a pal2nal.cmds bash -c "cmd"

View File

@ -94,11 +94,18 @@ def concatenate_fasta_files(fasta_files, output_file):
print(f"Total output sequence length: {len(concatenated_sequences[0].seq)}.")
def get_fasta_files_from_directory(directory, extensions):
def get_fasta_files_from_directory(directory, extensions, list_file=None):
"""
get all FASTA files from a directory with specified extensions
"""
fasta_files = []
if list_file:
with open(list_file, "r") as lf:
for line in lf:
filepath = os.path.join(directory, line.strip())
if os.path.isfile(filepath):
fasta_files.append(filepath)
return sorted(fasta_files)
for filename in os.listdir(directory):
if any(filename.endswith(ext) for ext in extensions):
fasta_files.append(os.path.join(directory, filename))
@ -119,12 +126,15 @@ def main():
default=[".fasta", ".fa", ".fna"],
help="FASTA file extensions to look for in directory",
)
parser.add_argument("-l", "--list", help="List of input FASTA files", default=None)
args = parser.parse_args()
# 获取输入文件
if args.directory:
fasta_files = get_fasta_files_from_directory(args.directory, args.extensions)
fasta_files = get_fasta_files_from_directory(
args.directory, args.extensions, args.list
)
if not fasta_files:
print(
f"Cannot find FASTA files in {args.directory} with extensions {args.extensions}"

View File

@ -0,0 +1,15 @@
#! /usr/bash
if [ "$#" -ne 5 ]; then
echo "Usage: $0 <reference_genome> <fastq_1> <fastq_2> <output_directory> <stem>"
exit 1
fi
ref=$1
fq1=$2
fq2=$3
outdir=$4
stem=$5
mkdir -p "$outdir"
hisat -p 4 --dta -x "$ref" -1 "$fq1" -2 "$fq2" -S "${outdir}/${stem}.sam"
samtools view -b -@ 4 "${outdir}/${stem}.sam" | samtools sort -@ 4 -o "${outdir}/${stem}.sorted.bam" --write-index
rm "${outdir}/${stem}.sam"
echo "Mapping completed. Sorted BAM file is at ${outdir}/${stem}.sorted.bam"

View File

@ -0,0 +1,31 @@
#! /bin/bash
set -e
SCRIPTS=${SCRIPTS:-"$PROJECTHOME/99.scripts"}
MAX_MEMORY=${MAX_MEMORY:-"20G"}
VIRIDI=${VIRIDI:-"$PROJECTHOME/01.reference/viridiplantae_odb12/"}
ROSALES=${ROSALES:-"$PROJECTHOME/01.reference/rosales_odb12/"}
if [ "$#" -ne 4 ]; then
echo "Usage: $0 <reads_1.fastq> <reads_2.fastq> <stem> <threads>"
echo "Perform de novo transcriptome assembly using Trinity"
exit 1
fi
fq1=$1
fq2=$2
stem=$3
outdir="$stem"_trinity_out_dir
THREADS=$4
# Run Trinity for de novo transcriptome assembly
Trinity --seqType fq --left "$fq1" --right "$fq2" --CPU "$THREADS" --max_memory "$MAX_MEMORY" --output "$outdir"
# Get Longest isoform per gene
perl "$SCRIPTS"/trinity_utils/util/misc/get_longest_isoform_seq_per_trinity_gene.pl "$outdir.Trinity.fasta" >"$outdir".longest_isoform.fasta
# BUSCO assessment
busco -i "$outdir".longest_isoform.fasta -l "$VIRIDI" -m tran --cpu "$THREADS" -o "$outdir"_busco_viridi -f
busco -i "$outdir".longest_isoform.fasta -l "$ROSALES" -m tran --cpu "$THREADS" -o "$outdir"_busco_rosales -f
# Length Statistics
TrinityStats.pl "$outdir.Trinity.fasta" >"$outdir".Trinity.fasta.length_stat.txt
# Clear temporary directory
rm -rf "$outdir"

View File

@ -0,0 +1,37 @@
#! /bin/bash
set -e
MAX_MEMORY=${MAX_MEMORY:-"50G"}
VIRIDI=${VIRIDI:-"$PROJECTHOME/01.reference/viridiplantae_odb12/"}
ROSALES=${ROSALES:-"$PROJECTHOME/01.reference/rosales_odb12/"}
SCRIPTS=${SCRIPTS:-"$PROJECTHOME/99.scripts"}
if [ "$#" -ne 5 ]; then
echo "Usage: $0 <reads_1.fastq> <reads_2.fastq> <ref> <stem> <threads>"
echo "Perform reference-guided transcriptome assembly using Hisat2 and Trinity"
exit 1
fi
fq1=$1
fq2=$2
ref=$3
stem=$4
outdir="$stem"_trinity_out_dir
THREADS=$5
# Run Hisat2 for reads mapping to reference genome
hisat2 -p "$THREADS" --dta -x "$ref" -1 "$fq1" -2 "$fq2" -S "$stem".sam
samtools view -b -@ "$THREADS" -o "$stem".raw.bam "$stem".sam
samtools sort -@ "$THREADS" -o "$stem".sorted.bam "$stem".raw.bam
samtools index "$stem".sorted.bam
rm "$stem".sam "$stem".raw.bam
# Run Trinity for de novo transcriptome assembly
Trinity --genome_guided_bam "$stem".sorted.bam --genome_guided_max_intron 10000 --max_memory "$MAX_MEMORY" --CPU "$THREADS" --output "$outdir"
# Get Longest isoform per gene
perl "$SCRIPTS"/trinity_utils/util/misc/get_longest_isoform_seq_per_trinity_gene.pl "$outdir/Trinity-GG.fasta" >"$outdir/longest_isoform.fasta"
# BUSCO assessment
busco -i "$outdir"/longest_isoform.fasta -l "$VIRIDI" -m tran --cpu "$THREADS" -o "$outdir"/busco_viridi -f
busco -i "$outdir"/longest_isoform.fasta -l "$ROSALES" -m tran --cpu "$THREADS" -o "$outdir"/busco_rosales -f
# Length Statistics
TrinityStats.pl "$outdir"/Trinity-GG.fasta >"$outdir"/length_stat.txt

View File

@ -0,0 +1,18 @@
#! /bin/bash
set -e
TMP=${TMP:-"$PROJECTHOME/tmp"}
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <transcripts_fasta> <swissprot_database> <output_directory>"
echo "Predict coding sequences (CDS) from transcripts using TD2 and MMseqs2"
exit 1
fi
transcripts=$1
sprot=$2
outdir=$3
mkdir -p "$outdir"
TD2.LongOrfs -t "$transcripts" --precise -@ 8 -O "$outdir"
mmseqs easy-search "$outdir/longest_orfs.pep" "$sprot" "$outdir/mmseqs.m8" "$TMP" -s 7.0 --threads 16
TD2.Predict -t "$transcripts" --precise -O "$outdir" --retain-mmseqs-hits "$outdir/mmseqs.m8"
echo "CDS prediction completed. Results are in $outdir"

View File

@ -0,0 +1,25 @@
#! /bin/bash
set -e
SCRIPTS=${SCRIPTS:-"$PROJECTHOME/99.scripts"}
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <input_dir> <output_dir> <extension>"
echo "Extract longest isoform per gene and rename sequences"
exit 1
fi
indir=$1
outdir=$2
ext=$3
mkdir -p "$outdir"
# Process each file in the input directory with the specified extension
for td_cds in "$indir"/*."$ext"; do
stem=$(basename "$td_cds" ."$ext")
echo "Processing $td_cds($stem) ..."
echo "perl $SCRIPTS/trinity_utils/util/misc/get_longest_isoform_seq_per_trinity_gene.pl $td_cds > $outdir/$stem.longest_isoform.fa"
perl "$SCRIPTS"/trinity_utils/util/misc/get_longest_isoform_seq_per_trinity_gene.pl "$td_cds" >"$outdir"/"$stem".longest_isoform.fa
echo "$SCRIPTS/rename_trinity_fasta.py $outdir/$stem.longest_isoform.fa $stem $outdir/$stem.full_cds.fa"
"$SCRIPTS"/miscs/rename_trinity_fasta.py "$outdir"/"$stem".longest_isoform.fa "$stem" "$outdir"/"$stem".full_cds.fa
echo "Done."
done

View File

@ -0,0 +1,27 @@
#! /bin/bash
set -e
SCRIPTS=${SCRIPTS:-"$PROJECTHOME/99.scripts"}
IDENTITY=${IDENTITY:-0.99}
THREADS=${THREADS:-6}S
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <input_dir> <output_dir> <extension>"
echo "Reduce redundancy of CDS files using cd-hit-est"
exit 1
fi
indir=$1
outdir=$2
ext=$3
mkdir -p "$outdir"
# Process each file in the input directory with the specified extension
for cds in "$indir"/*."$ext"; do
stem=$(basename "$cds" ."$ext")
echo "Processing $cds($stem) ..."
echo "cd-hit-est -i $cds -o $outdir/$stem.cds_rr.fa -c $IDENTITY -n 10 -r 0 -T $THREADS"
cd-hit-est -i "$cds" -o "$outdir/$stem".cds_rr.fa -c "$IDENTITY" -n 10 -r 0 -T "$THREADS"
echo "seqkit translate $outdir/$stem.cds_rr.fa > $outdir/$stem.prot_rr.fa"
seqkit translate "$outdir/$stem".cds_rr.fa >"$outdir/$stem".prot_rr.fa
echo "Done."
done

601
pixi.lock generated
View File

@ -12,6 +12,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/_r-mutex-1.0.1-anacondar_1.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/alsa-lib-1.2.14-hb9d3cd8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/archspec-0.2.5-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/argcomplete-3.6.3-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/aria2-1.37.0-hbc8128a_2.conda
@ -94,9 +95,11 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/contourpy-1.3.3-py311hdf67eae_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/coreutils-9.5-hd590300_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/cpp-expected-1.3.1-h171cf75_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/cpython-3.11.14-py311hd8ed1ab_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/curl-8.17.0-h4e3cde8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/dendropy-5.0.8-pyhdfd78af_1.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/diamond-2.1.16-h13889ed_0.conda
@ -109,6 +112,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/fastme-2.1.6.3-h7b50bb2_1.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/fastp-1.0.1-heae3180_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/fasttree-2.2.0-h7b50bb2_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2
@ -121,6 +125,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/frozendict-2.4.7-py311h49ec1c0_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/fsspec-2025.12.0-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gawk-5.3.1-hcd3d067_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-hcacfade_7.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gettext-0.25.1-h3f43e3d_1.conda
@ -132,6 +137,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/glib-tools-2.86.1-hf516916_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/glpk-5.0-h445213a_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gmpy2-2.2.1-py311h92a432a_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gst-plugins-base-1.24.11-h651a532_0.conda
@ -149,12 +155,14 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/iqtree-3.0.1-h503566f_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/isa-l-2.31.1-hb9d3cd8_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/jq-1.8.1-h73b1eb8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/jsoncpp-1.9.6-hf42df4d_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/jsonpointer-3.0.0-py311h38be061_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/julia-1.12.1-h212faf0_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/kaldi-5.5.1112-cpu_h7360626_9.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/kallisto-0.51.1-h2b92561_2.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_8.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda
@ -165,11 +173,13 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/ld_impl_linux-64-2.45-h1aa0949_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libamd-3.3.3-h456b2da_7100101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libarchive-3.8.1-gpl_h98cc613_100.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libasprintf-devel-0.25.1-h3f43e3d_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libavif16-1.3.0-h6395336_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libblas-3.9.0-38_h4a7cf45_openblas.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libboost-1.85.0-h0ccab89_4.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libboost-devel-1.85.0-h00ab1b0_4.conda
@ -191,6 +201,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libcurl-8.17.0-h4e3cde8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libcxsparse-4.4.1-hf02c80a_7100101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libdb-6.2.32-h9c3ff4c_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libde265-1.0.15-h00ab1b0_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda
@ -216,6 +227,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libheif-1.19.7-gpl_hc18d805_100.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libhwloc-2.12.1-default_h3d81e11_1000.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda
@ -223,6 +235,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libklu-2.3.5-h95ff59c_7100101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/liblapack-3.9.0-38_h47877c9_openblas.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/liblapacke-3.9.0-38_h6ae95b6_openblas.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libldl-3.3.2-hf02c80a_7100101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libllvm20-20.1.8-hecd9e04_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libllvm21-21.1.0-hecd9e04_0.conda
@ -244,6 +257,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libpq-17.6-h3675c94_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/librbio-4.3.4-hf02c80a_7100101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libsanitizer-15.2.0-hb13aed2_7.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda
@ -258,11 +272,13 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libsuitesparseconfig-7.10.1-h901830b_7100101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libtorch-2.6.0-cpu_generic_haed06de_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libumfpack-6.3.5-h873dde6_7100101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libutf8proc-2.11.0-hb04c3b8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda
@ -279,6 +295,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mafft-7.526-h4bc722e_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/markupsafe-3.0.3-py311h3778330_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/matplotlib-3.10.8-py311h38be061_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/matplotlib-base-3.10.8-py311h0f3be63_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/maven-3.9.11-ha770c72_0.conda
@ -290,26 +307,32 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/miniprot-0.18-h577a1d6_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/mmseqs2-18.8cc5c-hd6d6fdc_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/modeltest-ng-0.1.7-hf316886_3.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mpi-1.0-openmpi.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/muscle-3.8.1551-h9948957_9.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mysql-connector-c-6.1.11-h659d440_1008.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/ncbi-vdb-3.2.1-h9948957_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/nlohmann_json-abi-3.12.0-h0f90c79_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/nss-3.117-h445c969_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/numpy-2.3.4-py311h2e04523_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openblas-ilp64-0.3.30-pthreads_h3d04fff_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openfst-1.8.3-h84d6215_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openjdk-25.0.1-h5755bd7_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openlibm-0.8.1-hd590300_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openmpi-4.1.6-hc5af2df_101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/optree-0.18.0-py311hdf67eae_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/orthofinder-3.1.0-hdfd78af_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/ossuuid-1.6.2-h5888daf_1001.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/p7zip-16.02-h9c3ff4c_1001.tar.bz2
@ -388,9 +411,13 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/pplacer-1.1.alpha19-h9ee0642_2.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/prank-170427-h9948957_1.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/prodigal-2.6.3-h577a1d6_11.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/psauron-1.1.0-pyhdfd78af_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/psutil-7.1.3-py311haee01d2_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/pulseaudio-client-17.0-h9a8bead_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/pycosat-0.6.6-py311h49ec1c0_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
@ -405,6 +432,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/python_abi-3.11-8_cp311.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/pytorch-2.6.0-cpu_generic_py311_h959c4fd_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/pyyaml-6.0.3-py311h3778330_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda
@ -600,6 +628,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/r-xtable-1.8_4-r44hc72bb7e_7.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/r-yaml-2.3.10-r44h54b55ab_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/r-zoo-1.8_14-r44h54b55ab_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/rav1e-0.7.1-h8fae777_3.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/raxml-8.2.13-h7b50bb2_3.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/raxml-ng-1.2.2-h6747034_2.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda
@ -621,20 +650,27 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/simdjson-4.0.7-hb700be7_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/sip-6.10.0-py311h1ddb823_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/sqlite-3.51.0-heff268d_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/sra-tools-3.2.1-h4304569_1.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/suitesparse-7.10.1-h5b2951e_7100101.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/tar-1.35-h3b78370_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/tbb-devel-2022.3.0-h74b38a2_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/td2-1.0.6-pyhdfd78af_0.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/tktable-2.10-h8d826fa_7.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/torchaudio-2.7.0-cpu_py311h1666e02_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/torchvision-0.21.0-cpu_py311_hfa9c634_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/torchvision-extra-decoders-0.0.2-py311h896098c_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/tornado-6.5.2-py311h49ec1c0_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/transdecoder-5.7.1-pl5321hdfd78af_2.tar.bz2
@ -643,6 +679,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/trimmomatic-0.40-hdfd78af_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/trinity-2.15.2-pl5321h077b44d_6.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/truststore-0.10.3-pyhe01879c_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/ucsc-fatotwobit-482-hdc0a859_0.tar.bz2
@ -652,6 +689,7 @@ environments:
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/wget-1.21.4-hda4d442_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/xcb-util-cursor-0.1.5-hb9d3cd8_0.conda
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda
@ -807,6 +845,16 @@ packages:
license_family: GPL
size: 566531
timestamp: 1744668655747
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda
sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855
md5: 346722a0be40f6edc53f12640d301338
depends:
- libgcc-ng >=12
- libstdcxx-ng >=12
license: BSD-2-Clause
license_family: BSD
size: 2706396
timestamp: 1718551242397
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/archspec-0.2.5-pyhd8ed1ab_0.conda
sha256: eb68e1ce9e9a148168a4b1e257a8feebffdb0664b557bb526a1e4853f2d2fc00
md5: 845b38297fca2f2d18a29748e2ece7fa
@ -2072,6 +2120,16 @@ packages:
license: CC0-1.0
size: 24283
timestamp: 1756734785482
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/cpython-3.11.14-py311hd8ed1ab_2.conda
noarch: generic
sha256: c871fe68dcc6b79b322e4fcf9f2b131162094c32a68d48c87aa8582995948a01
md5: 43ed151bed1a0eb7181d305fed7cf051
depends:
- python >=3.11,<3.12.0a0
- python_abi * *_cp311
license: Python-2.0
size: 47257
timestamp: 1761172995774
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/curl-8.17.0-h4e3cde8_0.conda
sha256: 3fb39c401fbdbaf68b8f25c1d81600d2a771b6467cc5d7c88fbd1e06d8825ee1
md5: a37bd62e2c34797cdb577920b35f3bc5
@ -2112,6 +2170,15 @@ packages:
license_family: BSD
size: 209774
timestamp: 1750239039316
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda
sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020
md5: 418c6ca5929a611cbd69204907a83995
depends:
- libgcc-ng >=12
license: BSD-2-Clause
license_family: BSD
size: 760229
timestamp: 1685695754230
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda
sha256: 3b988146a50e165f0fa4e839545c679af88e4782ec284cc7b6d07dd226d6a068
md5: 679616eb5ad4e521c83da4650860aba7
@ -2256,6 +2323,14 @@ packages:
license_family: GPL
size: 204873
timestamp: 1756944351590
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda
sha256: 19025a4078ff3940d97eb0da29983d5e0deac9c3e09b0eabf897daeaf9d1114e
md5: 66b8b26023b8efdf8fcb23bac4b6325d
depends:
- python >=3.10
license: Unlicense
size: 17976
timestamp: 1759948208140
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/fmt-11.2.0-h07f6e7f_0.conda
sha256: e0f53b7801d0bcb5d61a1ddcb873479bfe8365e56fd3722a232fbcc372a9ac52
md5: 0c2f855a88fab6afa92a7aa41217dc8e
@ -2375,6 +2450,15 @@ packages:
license_family: LGPL
size: 32010
timestamp: 1763082979695
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/fsspec-2025.12.0-pyhd8ed1ab_0.conda
sha256: 64a4ed910e39d96cd590d297982b229c57a08e70450d489faa34fd2bec36dbcc
md5: a3b9510e2491c20c7fc0f5e730227fbb
depends:
- python >=3.10
license: BSD-3-Clause
license_family: BSD
size: 147391
timestamp: 1764784920938
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gawk-5.3.1-hcd3d067_0.conda
sha256: ec4ebb9444dccfcbff8a2d19b2811b48a20a58dcd08b29e3851cb930fc0f00d8
md5: 91d4414ab699180b2b0b10b8112c5a2f
@ -2511,6 +2595,21 @@ packages:
license: GPL-2.0-or-later OR LGPL-3.0-or-later
size: 460055
timestamp: 1718980856608
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/gmpy2-2.2.1-py311h92a432a_2.conda
sha256: fbe865298f27112a605284020205b2803ac913c095af5f5b10d9b7fd7dfd24dc
md5: a84186a60d84f6506b54ceb65e83d363
depends:
- __glibc >=2.17,<3.0.a0
- gmp >=6.3.0,<7.0a0
- libgcc >=14
- mpc >=1.3.1,<2.0a0
- mpfr >=4.2.1,<5.0a0
- python >=3.11,<3.12.0a0
- python_abi 3.11.* *_cp311
license: LGPL-3.0-or-later
license_family: LGPL
size: 202878
timestamp: 1762946866045
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda
sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c
md5: 2cd94587f3a401ae05e03a6caf09539d
@ -2738,6 +2837,17 @@ packages:
license_family: BSD
size: 157291
timestamp: 1736497194571
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda
sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b
md5: 04558c96691bed63104678757beb4f8d
depends:
- markupsafe >=2.0
- python >=3.10
- python
license: BSD-3-Clause
license_family: BSD
size: 120685
timestamp: 1764517220861
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda
sha256: 6fc414c5ae7289739c2ba75ff569b79f72e38991d61eb67426a8a4b92f90462c
md5: 4e717929cfa0d49cef92d911e31d0e90
@ -2836,6 +2946,27 @@ packages:
license_family: MIT
size: 171812998
timestamp: 1762176763294
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/kaldi-5.5.1112-cpu_h7360626_9.conda
sha256: 0e69c1e2cdec14c727e15759230016daf8ec40c76360905771d6cf59f2520b27
md5: 6058b0901ca9d9600abc77e33debc446
depends:
- __glibc >=2.17,<3.0.a0
- icu >=75.1,<76.0a0
- libblas >=3.9.0,<4.0a0
- libcblas >=3.9.0,<4.0a0
- libgcc >=13
- libgfortran
- libgfortran5 >=13.3.0
- liblapack >=3.9.0,<4.0a0
- liblapacke >=3.9.0,<4.0a0
- libstdcxx >=13
- libzlib >=1.3.1,<2.0a0
- openfst 1.8.3
- openfst >=1.8.3,<1.8.4.0a0
license: Apache-2.0
license_family: APACHE
size: 21207122
timestamp: 1748592488463
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/kallisto-0.51.1-h2b92561_2.tar.bz2
sha256: dec322eb26df26ce8dac69fb058bb5328b34876d328f524dc900f127a7eabe2a
md5: b76c20fc5d0a865b21eb8b384cadbae8
@ -2952,6 +3083,20 @@ packages:
license_family: Apache
size: 264243
timestamp: 1745264221534
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda
sha256: 143a586aa67d50622ef703de57b9d43f44945836d6568e0e7aa174bd8c45e0d4
md5: 488f260ccda0afaf08acb286db439c2f
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- libstdcxx >=13
constrains:
- libabseil-static =20240722.0=cxx17*
- abseil-cpp =20240722.0
license: Apache-2.0
license_family: Apache
size: 1311599
timestamp: 1736008414161
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda
sha256: 410ab78fe89bc869d435de04c9ffa189598ac15bb0fe1ea8ace8fb1b860a2aa3
md5: 01ba04e414e47f95c03d6ddd81fd37be
@ -3014,6 +3159,20 @@ packages:
license: LGPL-2.1-or-later
size: 34734
timestamp: 1753342921605
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libavif16-1.3.0-h6395336_2.conda
sha256: e3a44c0eda23aa15c9a8dfa8c82ecf5c8b073e68a16c29edd0e409e687056d30
md5: c09c4ac973f7992ba0c6bb1aafd77bd4
depends:
- __glibc >=2.17,<3.0.a0
- aom >=3.9.1,<3.10.0a0
- dav1d >=1.2.1,<1.2.2.0a0
- libgcc >=14
- rav1e >=0.7.1,<0.8.0a0
- svt-av1 >=3.1.2,<3.1.3.0a0
license: BSD-2-Clause
license_family: BSD
size: 139399
timestamp: 1756124751131
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libblas-3.9.0-38_h4a7cf45_openblas.conda
build_number: 38
sha256: b26a32302194e05fa395d5135699fd04a905c6ad71f24333f97c64874e053623
@ -3272,6 +3431,16 @@ packages:
license_family: AGPL
size: 24409456
timestamp: 1609539093147
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libde265-1.0.15-h00ab1b0_0.conda
sha256: 7cf7e294e1a7c8219065885e186d8f52002fb900bf384d815f159b5874204e3d
md5: 407fee7a5d7ab2dca12c9ca7f62310ad
depends:
- libgcc-ng >=12
- libstdcxx-ng >=12
license: LGPL-3.0-or-later
license_family: LGPL
size: 411814
timestamp: 1703088639063
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda
sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680
md5: 6c77a605a7a689d17d4819c0f8ac9a00
@ -3543,6 +3712,22 @@ packages:
license_family: GPL
size: 447919
timestamp: 1759967942498
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libheif-1.19.7-gpl_hc18d805_100.conda
sha256: ec9797d57088aeed7ca4905777d4f3e70a4dbe90853590eef7006b0ab337af3f
md5: 1db2693fa6a50bef58da2df97c5204cb
depends:
- __glibc >=2.17,<3.0.a0
- aom >=3.9.1,<3.10.0a0
- dav1d >=1.2.1,<1.2.2.0a0
- libavif16 >=1.2.0,<2.0a0
- libde265 >=1.0.15,<1.0.16.0a0
- libgcc >=13
- libstdcxx >=13
- x265 >=3.5,<3.6.0a0
license: LGPL-3.0-or-later
license_family: LGPL
size: 596714
timestamp: 1741306859216
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libhwloc-2.12.1-default_h3d81e11_1000.conda
sha256: eecaf76fdfc085d8fed4583b533c10cb7f4a6304be56031c43a107e01a56b7e2
md5: d821210ab60be56dd27b5525ed18366d
@ -3632,6 +3817,20 @@ packages:
license_family: BSD
size: 17501
timestamp: 1761680098660
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/liblapacke-3.9.0-38_h6ae95b6_openblas.conda
build_number: 38
sha256: 27c19cce8b741f18630a7dffce02d4650cee402e3d1862c3171ccb99a78ea4cd
md5: 2fc2296edb9a6b0ae29467d83dcd2ccb
depends:
- libblas 3.9.0 38_h4a7cf45_openblas
- libcblas 3.9.0 38_h0358290_openblas
- liblapack 3.9.0 38_h47877c9_openblas
constrains:
- blas 2.138 openblas
license: BSD-3-Clause
license_family: BSD
size: 17511
timestamp: 1761680105884
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libldl-3.3.2-hf02c80a_7100101.conda
sha256: 590232cd302047023ab31b80458833a71b10aeabee7474304dc65db322b5cd70
md5: 19b71122fea7f6b1c4815f385b2da419
@ -3905,6 +4104,20 @@ packages:
license: PostgreSQL
size: 2726071
timestamp: 1757976008927
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda
sha256: 51125ebb8b7152e4a4e69fd2398489c4ec8473195c27cde3cbdf1cb6d18c5493
md5: d8703f1ffe5a06356f06467f1d0b9464
depends:
- __glibc >=2.17,<3.0.a0
- libabseil * cxx17*
- libabseil >=20240722.0,<20240723.0a0
- libgcc >=13
- libstdcxx >=13
- libzlib >=1.3.1,<2.0a0
license: BSD-3-Clause
license_family: BSD
size: 2960815
timestamp: 1735577210663
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/librbio-4.3.4-hf02c80a_7100101.conda
sha256: c502b4203cc0d38f49005994b5c80c89660bcd40ff170c529cda90827ec6b1f4
md5: 4b3a3d711d1c1f76f7f440e51458f512
@ -4092,6 +4305,32 @@ packages:
license_family: GPL
size: 415044
timestamp: 1740593851157
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libtorch-2.6.0-cpu_generic_haed06de_0.conda
sha256: aa3107e48671f62d2d3c4452713ac376cec25d2beb4d5ba92fc6e3037d4988ed
md5: d5a75cf7648a12eeeb7b7eaeaa7dd82f
depends:
- __glibc >=2.17,<3.0.a0
- _openmp_mutex >=4.5
- libabseil * cxx17*
- libabseil >=20240722.0,<20240723.0a0
- libblas >=3.9.0,<4.0a0
- libcblas >=3.9.0,<4.0a0
- libgcc >=13
- liblapack >=3.9.0,<4.0a0
- libprotobuf >=5.28.3,<5.28.4.0a0
- libstdcxx >=13
- libuv >=1.50.0,<2.0a0
- libzlib >=1.3.1,<2.0a0
- sleef >=3.8,<4.0a0
constrains:
- pytorch 2.6.0 cpu_generic_*_0
- openblas * openmp_*
- pytorch-cpu ==2.6.0
- pytorch-gpu ==99999999
license: BSD-3-Clause
license_family: BSD
size: 54448917
timestamp: 1739480260135
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libumfpack-6.3.5-h873dde6_7100101.conda
sha256: 9a2c0049210c0223084c29b39404ad6da6538e7a4d1ed74ee8423212998fd686
md5: 9626fc7667bc6c901c7a0a4004938c71
@ -4144,6 +4383,16 @@ packages:
license_family: BSD
size: 37135
timestamp: 1758626800002
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda
sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b
md5: 0f03292cc56bf91a077a134ea8747118
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
license: MIT
license_family: MIT
size: 895108
timestamp: 1753948278280
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda
sha256: ca494c99c7e5ecc1b4cd2f72b5584cef3d4ce631d23511184411abcbb90a21a5
md5: b4ecbefe517ed0157c37f8182768271c
@ -4326,6 +4575,20 @@ packages:
license_family: MIT
size: 64736
timestamp: 1754951288511
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/markupsafe-3.0.3-py311h3778330_0.conda
sha256: 66c072c37aefa046f3fd4ca69978429421ef9e8a8572e19de534272a6482e997
md5: 0954f1a6a26df4a510b54f73b2a0345c
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- python >=3.11,<3.12.0a0
- python_abi 3.11.* *_cp311
constrains:
- jinja2 >=3.0.0
license: BSD-3-Clause
license_family: BSD
size: 26016
timestamp: 1759055312513
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/matplotlib-3.10.8-py311h38be061_0.conda
sha256: ead3fed3b8709abaf25ac8995ff748ecbbdbfe0f097181754e542ec9dda680c9
md5: 08b5a4eac150c688c9f924bcb3317e02
@ -4468,6 +4731,18 @@ packages:
license_family: GPL
size: 6047364
timestamp: 1734158893881
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda
sha256: 1bf794ddf2c8b3a3e14ae182577c624fa92dea975537accff4bc7e5fea085212
md5: aa14b9a5196a6d8dd364164b7ce56acf
depends:
- __glibc >=2.17,<3.0.a0
- gmp >=6.3.0,<7.0a0
- libgcc >=13
- mpfr >=4.2.1,<5.0a0
license: LGPL-3.0-or-later
license_family: LGPL
size: 116777
timestamp: 1725629179524
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda
sha256: f25d2474dd557ca66c6231c8f5ace5af312efde1ba8290a6ea5e1732a4e669c0
md5: 2eeb50cab6652538eee8fc0bc3340c81
@ -4495,6 +4770,15 @@ packages:
md5: 1dcc49e16749ff79ba2194fa5d4ca5e7
license: BSD 3-clause
size: 4204
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda
sha256: 7d7aa3fcd6f42b76bd711182f3776a02bef09a68c5f117d66b712a6d81368692
md5: 3585aa87c43ab15b167b574cd73b057b
depends:
- python >=3.9
license: BSD-3-Clause
license_family: BSD
size: 439705
timestamp: 1733302781386
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/mrbayes-3.2.7-hd0d793b_7.tar.bz2
sha256: a1463f247a0ee85653f91f65d2a15f55aa74e4af429b2b84356dd124c25d08cb
md5: c6a11f09208623646e4114e19219ecfe
@ -4555,6 +4839,21 @@ packages:
license: X11 AND BSD-3-Clause
size: 891641
timestamp: 1738195959188
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda
sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6
md5: a2c1eeadae7a309daed9d62c96012a2b
depends:
- python >=3.11
- python
constrains:
- numpy >=1.25
- scipy >=1.11.2
- matplotlib-base >=3.8
- pandas >=2.0
license: BSD-3-Clause
license_family: BSD
size: 1587439
timestamp: 1765215107045
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/nlohmann_json-abi-3.12.0-h0f90c79_1.conda
sha256: 2a909594ca78843258e4bda36e43d165cda844743329838a29402823c8f20dec
md5: 59659d0213082bc13be8500bab80c002
@ -4562,6 +4861,15 @@ packages:
license_family: MIT
size: 4335
timestamp: 1758194464430
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2
sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b
md5: 9a66894dfd07c4510beb6b3f9672ccc0
constrains:
- mkl <0.a0
license: BSD-3-Clause
license_family: BSD
size: 3843
timestamp: 1582593857545
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda
sha256: e3664264bd936c357523b55c71ed5a30263c6ba278d726a75b1eb112e6fb0b64
md5: e235d5566c9cc8970eb2798dd4ecf62f
@ -4587,24 +4895,23 @@ packages:
license_family: MOZILLA
size: 2045760
timestamp: 1759509411326
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/numpy-2.3.4-py311h2e04523_0.conda
sha256: 67cc072b8f5c157df4228a1a2291628e5ca2360f48ef572a64e2cf2bf55d2e25
md5: d84afde5a6f028204f24180ff87cf429
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda
sha256: 3f4365e11b28e244c95ba8579942b0802761ba7bb31c026f50d1a9ea9c728149
md5: a502d7aad449a1206efb366d6a12c52d
depends:
- python
- libstdcxx >=14
- libgcc >=14
- __glibc >=2.17,<3.0.a0
- python_abi 3.11.* *_cp311
- liblapack >=3.9.0,<4.0a0
- libcblas >=3.9.0,<4.0a0
- libblas >=3.9.0,<4.0a0
- libcblas >=3.9.0,<4.0a0
- libgcc-ng >=12
- liblapack >=3.9.0,<4.0a0
- libstdcxx-ng >=12
- python >=3.11,<3.12.0a0
- python_abi 3.11.* *_cp311
constrains:
- numpy-base <0a0
license: BSD-3-Clause
license_family: BSD
size: 9418119
timestamp: 1761162089374
size: 8065890
timestamp: 1707225944355
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/oniguruma-6.9.10-hb9d3cd8_0.conda
sha256: bbff8a60f70d5ebab138b564554f28258472e1e63178614562d4feee29d10da2
md5: 6ce853cb231f18576d2db5c2d4cb473e
@ -4624,6 +4931,17 @@ packages:
license_family: BSD
size: 5927114
timestamp: 1761748219065
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openfst-1.8.3-h84d6215_3.conda
sha256: 20381968e2f4feb3c944cb69d11d59073973b42d3bd20ddc4eb0bdb54d80fb64
md5: f824f470f0f87a339299aa769860a044
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- libstdcxx >=13
license: Apache-2.0
license_family: APACHE
size: 5474506
timestamp: 1728909523012
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/openjdk-25.0.1-h5755bd7_0.conda
sha256: 19b2268bf2d1fc4b4f48a68b9bfac620370c1b7f539671279053b0d3bcc348f1
md5: a40ce38da029d1d272bfd9bd7510f901
@ -4722,6 +5040,20 @@ packages:
license_family: Apache
size: 3165399
timestamp: 1762839186699
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/optree-0.18.0-py311hdf67eae_0.conda
sha256: 04b3dcf0a10c536eb952ac95b40314a54062f0e90690053323a58ffd19184c1f
md5: 7eb0268142bf6bea29a2573b10ae4d32
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- libstdcxx >=14
- python >=3.11,<3.12.0a0
- python_abi 3.11.* *_cp311
- typing-extensions >=4.12
license: Apache-2.0
license_family: Apache
size: 441668
timestamp: 1763124461030
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/orthofinder-3.1.0-hdfd78af_1.conda
sha256: 3ab567bd89d7b5d0a7edfc929e21652999951fd02630327ba60e64e4f7e58f3e
md5: 9af33232ce8428bf464962c16c69f8df
@ -5606,6 +5938,36 @@ packages:
license_family: GPL3
size: 601984
timestamp: 1752712731224
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/psauron-1.1.0-pyhdfd78af_0.tar.bz2
sha256: 817e3a4c099ea4247f5220c94d7e431a383a5808c2ee66bdba787b2967050dc7
md5: 7b004ca3414b94b25ab65ea41474dda2
depends:
- numpy >=1.24.4,<2
- pandas
- python >=3.9,<3.13
- pytorch >=2.1.2
- scipy >=1.10.1
- setuptools
- torchaudio >=2.1.2
- torchvision >=0.16.2
- tqdm >=4.66.1
- typing_extensions >=4.9.0
license: MIT License
license_family: MIT
size: 781124
timestamp: 1743136173490
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/psutil-7.1.3-py311haee01d2_0.conda
sha256: 6a0b791e00368b6b635c65d5fb31d385129da790d21923387c6b546230ffdf14
md5: 2092b7977bc8e05eb17a1048724593a4
depends:
- python
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- python_abi 3.11.* *_cp311
license: BSD-3-Clause
license_family: BSD
size: 513789
timestamp: 1762092898190
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda
sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973
md5: b3c17d95b5a10c6e64a21fa17573e70e
@ -5634,6 +5996,18 @@ packages:
license_family: LGPL
size: 761857
timestamp: 1757472971364
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pybind11-2.13.6-pyhc790b64_3.conda
sha256: d429f6f255fbe49f09b9ae1377aa8cbc4d9285b8b220c17ae2ad9c4894c91317
md5: 1594696beebf1ecb6d29a1136f859a74
depends:
- pybind11-global 2.13.6 *_3
- python >=3.9
constrains:
- pybind11-abi ==4
license: BSD-3-Clause
license_family: BSD
size: 186821
timestamp: 1747935138653
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2
sha256: d4fb485b79b11042a16dc6abfb0c44c4f557707c2653ac47c81e5d32b24a3bb0
md5: 878f923dd6acc8aeb47a75da6c4098be
@ -5641,6 +6015,18 @@ packages:
license_family: BSD
size: 9906
timestamp: 1610372835205
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pybind11-global-2.13.6-pyh217bc35_3.conda
sha256: c044cfcbe6ef0062d0960e9f9f0de5f8818cec84ed901219ff9994b9a9e57237
md5: 730a5284e26d6bdb73332dafb26aec82
depends:
- __unix
- python >=3.9
constrains:
- pybind11-abi ==4
license: BSD-3-Clause
license_family: BSD
size: 180116
timestamp: 1747934418811
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/pycosat-0.6.6-py311h49ec1c0_3.conda
sha256: 61c07e45a0a0c7a2b0dc986a65067fc2b00aba51663b7b05d4449c7862d7a390
md5: 77c1b47af5775a813193f7870be8644a
@ -5839,6 +6225,43 @@ packages:
license_family: BSD
size: 7003
timestamp: 1752805919375
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/pytorch-2.6.0-cpu_generic_py311_h959c4fd_0.conda
sha256: e10871e7324e3202a6943264d041cd3e861b0b437d0834c352ca01fe5d566095
md5: 79057ad82e806e8f115219e8d2c9e3ca
depends:
- __glibc >=2.17,<3.0.a0
- _openmp_mutex >=4.5
- filelock
- fsspec
- jinja2
- libabseil * cxx17*
- libabseil >=20240722.0,<20240723.0a0
- libcblas >=3.9.0,<4.0a0
- libgcc >=13
- liblapack >=3.9.0,<4.0a0
- libprotobuf >=5.28.3,<5.28.4.0a0
- libstdcxx >=13
- libtorch 2.6.0 cpu_generic_haed06de_0
- libuv >=1.50.0,<2.0a0
- libzlib >=1.3.1,<2.0a0
- networkx
- nomkl
- numpy >=1.19,<3
- optree >=0.13.0
- pybind11
- python >=3.11,<3.12.0a0
- python_abi 3.11.* *_cp311
- setuptools
- sleef >=3.8,<4.0a0
- sympy >=1.13.1,!=1.13.2
- typing_extensions >=4.10.0
constrains:
- pytorch-cpu ==2.6.0
- pytorch-gpu ==99999999
license: BSD-3-Clause
license_family: BSD
size: 28441771
timestamp: 1739481976561
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda
sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0
md5: bc8e3267d44011051f2eb14d22fb0960
@ -8607,6 +9030,18 @@ packages:
license_family: GPL3
size: 1019051
timestamp: 1757457839052
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/rav1e-0.7.1-h8fae777_3.conda
sha256: 6e5e704c1c21f820d760e56082b276deaf2b53cf9b751772761c3088a365f6f4
md5: 2c42649888aac645608191ffdc80d13a
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=13
constrains:
- __glibc >=2.17
license: BSD-2-Clause
license_family: BSD
size: 5176669
timestamp: 1746622023242
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64/raxml-8.2.13-h7b50bb2_3.tar.bz2
sha256: 2a974acb73d07dc7e142c997101f14ce865ea4b8f8fb203849002848c37171b9
md5: 48880314905ab03663a8fb4d97c835ff
@ -8869,6 +9304,17 @@ packages:
license_family: MIT
size: 18455
timestamp: 1753199211006
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda
sha256: 57afc2ab5bdb24cf979964018dddbc5dfaee130b415e6863765e45aed2175ee4
md5: e8a0b4f5e82ecacffaa5e805020473cb
depends:
- __glibc >=2.17,<3.0.a0
- _openmp_mutex >=4.5
- libgcc >=14
- libstdcxx >=14
license: BSL-1.0
size: 1951720
timestamp: 1756274576844
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda
sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad
md5: 03fe290994c5e4ec17293cfb6bdce520
@ -8933,6 +9379,30 @@ packages:
license: LGPL-2.1-or-later AND BSD-3-Clause AND GPL-2.0-or-later AND Apache-2.0
size: 12135
timestamp: 1741963824816
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda
sha256: 34e2e9c505cd25dba0a9311eb332381b15147cf599d972322a7c197aedfc8ce2
md5: 9859766c658e78fec9afa4a54891d920
depends:
- __glibc >=2.17,<3.0.a0
- libgcc >=14
- libstdcxx >=14
license: BSD-2-Clause
license_family: BSD
size: 2741200
timestamp: 1756086702093
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda
sha256: 09d3b6ac51d437bc996ad006d9f749ca5c645c1900a854a6c8f193cbd13f03a8
md5: 8c09fac3785696e1c477156192d64b91
depends:
- __unix
- cpython
- gmpy2 >=2.0.8
- mpmath >=0.19
- python >=3.9
license: BSD-3-Clause
license_family: BSD
size: 4616621
timestamp: 1745946173026
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_8.conda
sha256: 0053c17ffbd9f8af1a7f864995d70121c292e317804120be4667f37c92805426
md5: 1bad93f0aa428d618875ef3a588a889e
@ -8976,6 +9446,26 @@ packages:
- tbb 2022.3.0 h8d10470_1
size: 1115083
timestamp: 1762509972811
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch/td2-1.0.6-pyhdfd78af_0.tar.bz2
sha256: e361bb3ba0ed7d1f9a4d8423058763c50e00c2e964d19a6491e09e903345987d
md5: b3a676270ab795aad86bdceb859f4128
depends:
- numpy >=1.24.4,<2
- pandas >=2.0.3
- psauron >=1.0.5
- psutil
- python >=3.9,<3.13
- pytorch >=2.1.2
- scipy >=1.10.1
- setuptools <81
- torchaudio >=2.1.2
- torchvision >=0.16.2
- tqdm >=4.66.1
- typing_extensions >=4.9.0
license: MIT
license_family: MIT
size: 45099
timestamp: 1749493915044
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda
sha256: 6016672e0e72c4cf23c0cf7b1986283bd86a9c17e8d319212d78d8e9ae42fdfd
md5: 9d64911b31d57ca443e9f1e36b04385f
@ -9036,6 +9526,72 @@ packages:
license_family: MIT
size: 38777
timestamp: 1749127286558
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/torchaudio-2.7.0-cpu_py311h1666e02_0.conda
sha256: eabf0989faf51ba30eabeb9256d9f4ef48d0af5a84b88d0baafe2c8fdb941ef6
md5: 32ac754bca22e7a23d18cb3792b2112b
depends:
- python
- numpy
- kaldi
- pytorch * cpu*
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- libstdcxx >=13
- libgcc >=13
- libzlib >=1.3.1,<2.0a0
- pytorch >=2.6.0,<2.7.0a0
- libtorch >=2.6.0,<2.7.0a0
- kaldi >=5.5.1112,<5.5.1113.0a0
- python_abi 3.11.* *_cp311
- liblzma >=5.8.1,<6.0a0
- bzip2 >=1.0.8,<2.0a0
constrains:
- llvmlite >=0.44
license: BSD-2-Clause
license_family: BSD
size: 4689009
timestamp: 1745964368346
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/torchvision-0.21.0-cpu_py311_hfa9c634_1.conda
sha256: a5971392370b8f7755118e72bd40ec3bdc026ea59b8237d848842a4414170ab7
md5: af5a1b1a68a53f27bc3c87ab7c582e6d
depends:
- python
- pytorch * cpu*
- pillow >=5.3.0,!=8.3.0,!=8.3.1
- numpy >=1.23.5
- torchvision-extra-decoders
- __glibc >=2.17,<3.0.a0
- libgcc >=13
- libstdcxx >=13
- libgcc >=13
- libpng >=1.6.47,<1.7.0a0
- libwebp-base >=1.5.0,<2.0a0
- pytorch >=2.6.0,<2.7.0a0
- libtorch >=2.6.0,<2.7.0a0
- libjpeg-turbo >=3.0.0,<4.0a0
- giflib >=5.2.2,<5.3.0a0
- python_abi 3.11.* *_cp311
license: BSD-3-Clause
license_family: BSD
size: 1457950
timestamp: 1742619225483
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/torchvision-extra-decoders-0.0.2-py311h896098c_2.conda
sha256: 424417d1fa2c0b1c5eaf218b71b398522cc9082f2df2bb8f88921731c1bc45e7
md5: aaebf7b5393e30ed452de175834ff032
depends:
- python
- libstdcxx >=13
- libgcc >=13
- __glibc >=2.17,<3.0.a0
- libheif >=1.19.5,<1.20.0a0
- python_abi 3.11.* *_cp311
- pytorch >=2.6.0,<2.7.0a0
- libtorch >=2.6.0,<2.7.0a0
- libavif16 >=1.1.1,<2.0a0
- libtorch >=2.6.0,<2.7.0a0
license: LGPL-2.1-only
size: 65750
timestamp: 1739805887089
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/tornado-6.5.2-py311h49ec1c0_2.conda
sha256: 1913516458f92df2a0b415426dce27cc14922415787f4b672a707b233631b1e0
md5: 8d7a63fc9653ed0bdc253a51d9a5c371
@ -9152,6 +9708,15 @@ packages:
license_family: MIT
size: 23801
timestamp: 1753886790616
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda
sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c
md5: edd329d7d3a4ab45dcf905899a7a6115
depends:
- typing_extensions ==4.15.0 pyhcf101f3_0
license: PSF-2.0
license_family: PSF
size: 91383
timestamp: 1756220668932
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda
sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731
md5: 0caa1af407ecff61170c9437a808404d
@ -9259,6 +9824,16 @@ packages:
license_family: MIT
size: 62931
timestamp: 1733130309598
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2
sha256: 76c7405bcf2af639971150f342550484efac18219c0203c5ee2e38b8956fe2a0
md5: e7f6ed84d4623d52ee581325c1587a6b
depends:
- libgcc-ng >=10.3.0
- libstdcxx-ng >=10.3.0
license: GPL-2.0-or-later
license_family: GPL
size: 3357188
timestamp: 1646609687141
- conda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda
sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d
md5: fdc27cb255a7a2cc73b7919a968b48f0

View File

@ -52,6 +52,8 @@ ete3 = ">=3.1.3,<4"
xvfbwrapper = ">=0.2.15,<0.3"
r-ggplot2 = ">=4.0.1,<5"
macse = ">=2.7,<3"
td2 = ">=1.0.6,<2"
mmseqs2 = ">=18.8cc5c,<19"
[feature.mrbayes.dependencies]
beagle-lib = ">=3.1.2,<4"

7
slides/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
node_modules
.DS_Store
dist
*.local
.vite-inspect
.remote-assets
components.d.ts

3
slides/.npmrc Normal file
View File

@ -0,0 +1,3 @@
# for pnpm
shamefully-hoist=true
auto-install-peers=true

View File

@ -0,0 +1,136 @@
---
layout: section
color: emerald
---
<div class="w-7/10 mx-auto text-center">
## 审稿意见与解决方案
<hr/>
仅列出涉及到流程或数据方面的审稿意见及解决方案
</div>
---
layout: top-title
color: emerald
title: 方法学描述不清与创新性未突出
---
::title::
# 方法学描述不清与创新性未突出
::content::
- **核心问题**所提出的新方法基于MCMC拟合单峰/双峰分布推断次级分歧时间)缺乏清晰、系统的阐述。
- **具体建议**
- 明确说明新方法相较于现有方法(如 D3 test, PhyloNet 等)的**主要优势**例如是否能同时识别introgressed基因并估计introgression发生时间
- 在**摘要、引言、方法、讨论**各部分突出方法的创新点而非仅模糊称为“MCMC拟合模型”。
- 澄清关键术语与参数含义(如 Line 320/356 中的 “r” 是什么速率Line 353 的“偏差”指什么?)。
- 解释“组合比例”combination ratio和“分类因子”classification factor如何计算或估计。
- 说明用于判断单峰 vs. 双峰分布优劣的**统计检验方法**(如 AIC、BIC、Bayes因子等
- **解决方案:**
- 论文文字修改:模型描述改进
- ==开发分布优劣的统计检验方法==
---
layout: top-title
color: emerald
title: 方法验证不足
---
::title::
# 方法验证不足
::content::
- **核心问题**仅在一个小型植物类群Hippophae10个种中应用缺乏普适性验证。
- **具体建议**
- 增加**模拟数据实验**验证方法在不同introgression强度、重复事件、ILS水平下的表现。
- 或至少在**其他真实数据集**(不同类群)中测试方法,证明其可推广性。
- 讨论方法的**适用范围与局限性**如是否适用于大规模物种能否处理多次introgression
- **解决方案:**
- ==bpp模拟数据实验==
- ==添加其他真实数据集模拟(蛇)==
---
layout: top-title
color: emerald
title: 系统发育与分化时间推断存在潜在偏差
---
::title::
# 系统发育与分化时间推断存在潜在偏差
::content::
- **核心问题**:分化时间估计可能受取样策略和模型选择影响。
- **具体建议**
- 检查是否所有基因树具有**一致的分类单元取样**;若不一致,需说明如何校正由此带来的年龄估计偏差。
- 质疑使用**Yule过程**作为先验(尤其当包含种内样本与远缘类群时),建议考虑更合适的物种形成模型。
- 说明**核苷酸替代模型如HKY的选择依据**是否进行过模型选择如jModelTest, ModelFinder等
- 澄清图1与图4中**分化时间估计差异的原因**评估其对introgression时间推断的影响。
- **解决方案:**
- ==使用MCMCTree替代beast做分化时间计算可以直接使用更好的替代模型==
- ==使用少量基因验证yule过程作为物种形成模型的合理性==
- 论文文字修改:增加对基因树取样一致性和物种形成模型选择的讨论
---
layout: top-title
color: emerald
title: 数据处理与结果解释需加强严谨性
---
::title::
# 数据处理与结果解释需加强严谨性
::content::
- **核心问题**从3149个单拷贝基因中仅保留177个“可靠”基因可能导致结果偏倚。
- **具体建议**
- 明确“可靠基因”的筛选标准高bootstrap支持 ≠ 正确建议改称“informative genes”。
- 强调所识别的64个introgressed基因**不代表全基因组水平的introgression比例**,因多拷贝或功能重要基因可能被过滤掉。
- 对这64个基因进行**功能注释分析**,探讨其生物学意义。
- 排除**污染**作为introgression信号来源的可能性如通过检查reads mapping、组织来源等
- **解决方案:**
- ==探索模型是否可能涵盖低支持度的基因并在后续评估informative genes结果是否与之相近能否替代==
---
layout: top-title
color: emerald
title: 材料与可重复性问题
---
::title::
# 材料与可重复性问题
::content::
- **核心问题**:缺乏关键实验细节和代码共享。
- **具体建议**
- 提供**新方法的完整代码**如GitHub链接确保他人可复现。
- 补充**凭证标本信息**(采集号、保存的标本馆)。
- 将原始测序数据raw reads提交至**SRA**而非作为补充材料补充材料应包含组装后的转录本、CDS、蛋白序列等并拆分为小于1GB的压缩包。
- **解决方案:**
- ==从头分析,备份完整代码与中间文件==
- ==使用rstan重新实现MCMC模型方便提交代码==

View File

@ -0,0 +1,150 @@
---
layout: section
color: navy
---
<div class="w-7/10 mx-auto text-center">
## 技术路线与分析进展
<hr/>
当前分析进展情况
</div>
---
layout: side-title
color: navy
align: rm-lm
titlewidth: is-3
title: 技术路线图(上)
---
::title::
# 技术路线图(上)
::content::
```mermaid
flowchart TD
classDef default fill:#ECF5FF,stroke:#409eff,stroke-width:2px,color:#409eff;
classDef done fill:#F0F9EB,stroke:#67c23a,stroke-width:2px,color:#67c23a;
classDef warn fill:#FDF6EC,stroke:#e6a23c,stroke-width:2px,color:#e6a23c
subgraph subgraph1[Step1. 数据预处理与组装]
direction LR
RawData[原始数据来自sra]:::warn --> CleanData[数据清洗与质控Fastp]:::done
CleanData -- 沙棘样品,有参 --> AlignData[比对到参考基因组Hisat2]:::done
AlignData --> Assembly[组装成转录本Trinity]:::done
CleanData -- 胡颓子,无参 --> Assembly[组装成转录本使用N50和busco评估组装结果Trinity]:::done
end
subgraph subgraph2[Step2. 同源基因集聚类]
direction LR
ass[转录本]:::warn --> CDS[预测CDS抽取最长转录本的最长ORF作为输入CDSTransDecoder]:::done
CDS --> reducedCDS[单样本CDS序列去冗余CD-HIT]:::done
reducedCDS --> ortho[基因家族聚类得到低拷贝同源基因集OrthoFinder]:::done
ortho --> homolog[将枣的同源基因整合到低拷贝同源基因集中, hmmer]:::done
end
subgraph subgraph3[Step3. 基因集筛选与基因树]
direction LR
homo[低拷贝同源基因集]:::warn --> alignment[基于蛋白序列比对mafft/pal2nal<br>修剪比对序列trimAl]:::done
alignment --> treeshrink[fasttree快速构树基于长枝吸引treeshrink和比对序列长度过滤基因集]:::done
treeshrink --> modeltest[序列进化模型检验modeltest-ng]:::done
modeltest --> raxml[构建ML单基因树]:::done
modeltest --> mrbayes[构建BP单基因树]:::done
raxml --> trees[根据mrbayes的结果收敛性筛选基因树与对应序列]:::done
mrbayes --> trees
end
subgraph subgraph4[Step4. 物种系统发育关系]
direction LR
tree[过滤后单基因树与对应序列]:::warn -- 单基因ML树 --> coalescence[溯祖关系树, Aster]
tree -- 单基因ML树 --> phyparts[基因树不一致性展示]
tree -- 单基因序列 --> concatenation[串联关系树iqtree3]
tree -- 单基因的mrbayes分析结果 --> CFs[基因树一致性因子BUCKy]:::done
CFs --> network[系统发育网络SNAQ]:::done
coalescence --> network
end
subgraph note[节点说明]
direction TB
done[已完成分析]:::done
warn[重要中间数据]:::warn
default[未完成分析]
end
subgraph1 --> subgraph2
subgraph2 --> subgraph3
subgraph3 --> subgraph4
subgraph4 ~~~ note
```
---
layout: side-title
color: navy
align: rm-lm
titlewidth: is-3
title: 技术路线图(下)
---
::title::
# 技术路线图(下)
::content::
```mermaid
flowchart TD
classDef default fill:#ECF5FF,stroke:#409eff,stroke-width:2px,color:#409eff;
classDef done fill:#F0F9EB,stroke:#67c23a,stroke-width:2px,color:#67c23a;
classDef warn fill:#FDF6EC,stroke:#e6a23c,stroke-width:2px,color:#e6a23c
subgraph subgraph5[Step5. 叶绿体系统发育关系]
direction LR
cleanData[Clean Reads]:::done --> alignCp[比对到参考叶绿体基因组hisat2]:::done
alignCp --> callExon[提取比对上的外显子序列samtools]
callExon --> cpTree[串联高质量的exon片段构建叶绿体基因组系统发育树iqtree3]
cpTree --> divergence[估算叶绿体基因组分歧时间beast]
end
subgraph subgraph6[Step6. 沙棘模型分析]
direction LR
genes[筛选得到的低拷贝同源基因集]:::warn --> filterGenes[基于ml树筛选基因集用于后续模型]
filterGenes --> mcmcTree[使用mcmctree估算分化时间]
mcmcTree --> fitModel[使用模型拟合种间分化时间分布]
fitModel --> integrate[整合不同模型结果得到最终分化时间估计]
end
subgraph subgraph7[Step7. bpp模拟模型分析]
direction LR
bpp[使用bpp进行溯祖模拟得到基因集]:::warn --> mcmcTreeBPP[使用mcmctree估算分化时间]
mcmcTreeBPP --> fitModelBPP[使用模型拟合种间分化时间分布]
fitModelBPP --> integrateBPP[整合不同模型结果得到最终分化时间估计]
end
subgraph subgraph8[Step8. 蛇数据分析]
direction LR
snakeData[蛇数据]:::warn --> mcmcTreeSnake[使用mcmctree估算分化时间]
mcmcTreeSnake --> fitModelSnake[使用模型拟合种间分化时间分布]
fitModelSnake --> integrateSnake[整合不同模型结果得到最终分化时间估计]
end
subgraph note[节点说明]
direction TB
done[已完成分析]:::done
warn[重要中间数据]:::warn
default[未完成分析]
end
subgraph5 --> subgraph6
subgraph6 --> subgraph7
subgraph7 --> subgraph8
subgraph8 ~~~ note
```

View File

23
slides/20251213/slides.md Normal file
View File

@ -0,0 +1,23 @@
---
theme: neversink
title: 论文修改进展|2025.12.13
colorSchema: light
layout: cover
routerMode: hash
transition: fade
---
# 论文修改进展
#### 2025.12.13
---
src: ./pages/审稿意见与解决方案.md
title: 审稿意见与解决方案
---
---
src: ./pages/技术路线.md
title: 技术路线与分析进展
---

16
slides/netlify.toml Normal file
View File

@ -0,0 +1,16 @@
[build]
publish = "dist"
command = "npm run build"
[build.environment]
NODE_VERSION = "20"
[[redirects]]
from = "/.well-known/*"
to = "/.well-known/:splat"
status = 200
[[redirects]]
from = "/*"
to = "/index.html"
status = 200

17
slides/package.json Normal file
View File

@ -0,0 +1,17 @@
{
"name": "slides",
"type": "module",
"private": true,
"scripts": {
"build": "slidev build",
"dev": "slidev --open",
"export": "slidev export"
},
"dependencies": {
"@slidev/cli": "^52.11.0",
"@slidev/theme-default": "latest",
"@slidev/theme-seriph": "latest",
"slidev-theme-neversink": "^0.4.0",
"vue": "^3.5.25"
}
}

5852
slides/pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

7
slides/vercel.json Normal file
View File

@ -0,0 +1,7 @@
{
"rewrites": [
{ "source": "/(.*)", "destination": "/index.html" }
],
"buildCommand": "npm run build",
"outputDirectory": "dist"
}