Generate matrix taxon_id -> lineage -> quantification + others metrics.
Procedure pour générer matrix taxon_id -> lineage -> quantification + bin_id
Script qui charge la taxonomy (bd ncbi fichier taxdump) et pour une liste de taxon_id crée un fichier : taxon_id lineage
python3 /work2/genphyse/NED_metaG/processing/comparaison/workingdir/taxid2fulllineage.py --taxonomy ../taxdump --taxid_file taxon_id -o lineage_mgw_bin
Récupère bin_id -> taxon_id (je garde sous la main le bin_id pour ensuite refaire le lien bin -> comptage)
cut -f 1,5 results/08_Contigs_Binning/Taxonomy/mock_first.bin2classification.names.txt | perl -lane '$F[0]=~s/.fa//; ($tax) = $F[1] =~/.;(\d+)\?$/; print "$F[0]\t$tax"' | sort -k 1b,1 > taxon_id_bin.txt
OR
cut -f 1,4 CAT_solidBins_good_bins.bin2classification.names.txt | tail -n +2 | perl -lane '$F[0]=~s/.bin$//; ($tax) = $F[1] =~/;(\d+)\.?$/; print "$F[0]\t$tax"' | sort -k 1b,1 > taxon_id_bin.txt
OR (prise en compte * fin de la taxonomie)
cut -f 1,4 CAT_solidBins_good_bins.bin2classification.names.txt | tail -n +2 | perl -lane '$F[0]=~s/.bin$//; ($tax) = $F[1] =~/(\d+)['*']?$/; print "$F[0]\t$tax"' > taxon_id_bin_v2.txt
sort -k 2n,2n taxon_id_bin_v2.txt > taxon_id_bin_v2.txt.sort
Récupère taxon id seulement
cut -f 2 taxon_id_bin.txt > taxon_id
cut -f 2 taxon_id_bin_v2.txt > taxon_id_v2
Associe taxon_id -> lineage
python3 ../taxid2fulllineage.py --taxonomy ../taxdump --taxid_file taxon_id -o lineage_mgw_bin
OR
python3 taxid2fulllineage.py --taxonomy taxdump --taxid_file taxon_id_v2 -o lineage_solidbin_v2
Association bin_id -> contig_id
grep ">" results/08_Contigs_Binning/MetaBAT2/mock_first.| perl -ne 'chomp; ($bin_name, $contig_name) = $_ =~ /.+\/(.).fa:>(.*)/; print "$bin_name\t$contig_name\n"' > bin_contig.txt
OR
cd good_bins
grep ">" *.bin | perl -ne 'chomp; ($bin_name, $contig_name) = $_ =~ /(.*).bin:>(.*)/; print "$bin_name\t$contig_name\n"'
Recupere le bam d'alignement des reads contre les contigs compte le nombre de read
samtools idxstats ./mock_first/mock_first.bam > first.idxstat
cut -f1,3 first.idxstat | sort -k 1b,1 > first.count
OR
cut -f 1,3 ../../../data/mock_first.sort.bam.idxstats | sort -k 1b,1 | tail -n +2 > first_v2.count
trie bin->contig
sort -k 2b,2 bin_contig.txt > bin_contig.txt.sort
OR
sort -k 2b,2 bin_contig_v2.txt > bin_contig_v2.txt.sort
jointure sur le bin_id entre le comptage par contig et le bin
join -1 1 -2 2 -t $'\t' first.count bin_contig.txt.sort > joinned
OR
join -1 1 -2 2 -t $'\t' first_v2.count bin_contig_v2.txt.sort > joinned_v2
somme des reads par bin
awk 'BEGIN { FS = "\t" } { x[$3]+=$2 } END { for(i in x) print i, x[i] }' < joinned > quantif_per_bin
more quantif_per_bin
OR
awk 'BEGIN { FS = "\t" } { x[$3]+=$2 } END { for(i in x) print i, x[i] }' < joinned_v2 > quantif_per_bin_v2
more quantif_per_bin_v2
Apres je copiais collais ces resultats dans le fichier excel
Pour le faire avec un merge (join impossible car sort impossible à utiliser comme il faut)
sort -k 1n,1n lineage_solidbin_v2 > lineage_solidbin_v2.sort
join -1 1 -2 2 -t $'\t' lineage_solidbin_v2.sort taxon_id_bin_v2.txt.sort > tax_id_lineage_bin_id.txt
cat tax_id_lineage_bin_id.txt | tr "\t" ";" | sort -u | tr ";" "\t" > tax_id_lineage_bin_id_v2.txt
Sous R
tab1 <- read.table("quantif_per_bin_v2", header=FALSE)
tab2 <- read.table("tax_id_lineage_bin_id_v2.txt", header = FALSE, sep = "\t")
res <- merge(tab1,tab2,by.x="V1",by.y="V9", all.x= TRUE,all.y=TRUE)
write.table(res,"bin_quantif_taxon_lineage.txt", sep ="\t", row.names = FALSE, col.names = FALSE, quote = FALSE)
Edited by Joanna Fourquet