Masks and ReMap2022 ChIP peaks - danifilho/Evo2_BASF GitHub Wiki
A proposta é analizar se cada nucleotídeo nas janelas de 150kb extraídas para a criação de embeddings do evo2 está ou não dentro de uma região dos CRMs do ReMap2022.
Para cada nucleotídeo (bp) contido nas janelas de 149952 bp usadas no Evo-2, indicar com 1 se ele se sobrepõe a qualquer pico de Cis-regulatory-module (CRM) do Remap 22022-TAIR10 e com 0 caso o contrário.
- O script generate_windows.sh > gera um arquivo tair10_149952.bed com colunas chrom, start, end, id.
- Foi feita com o script to_std.awk
BEGIN{FS=OFS="\t";
map["NC_003070.9"]="1"; map["NC_003071.7"]="2"; map["NC_003074.8"]="3";
map["NC_003075.7"]="4"; map["NC_003076.8"]="5"; map["NC_000932.1"]="C";
map["NC_037304.1"]="M";
map["Chr1"]="1"; map["Chr2"]="2"; map["Chr3"]="3"; map["Chr4"]="4";
map["Chr5"]="5"; map["ChrC"]="C"; map["ChrM"]="M";
}
{ if($1 in map) $1=map[$1]; print }
- Usado da seguinte forma:
awk -f to_std.awk tair10_149952.bed > windows149k_std.bed
# da mesma forma, padronizamos a database do ReMap
gzip -dc remap2022_crm_macs2_TAIR10_v1_0.bed.gz |
awk -f to_std.awk > crm_std.bed
Foi retirada do website https://remap.univ-amu.fr/download_page. O arquivo remap2022_crm_macs2_TAIR10_v1_0.bed.gz tras apenas os CRMs (união/cluster de picos sobre TFs e/ou experimentos
- Para cada .fa, o script embed_evo2.py gera *.pt (.pt) em embeddings_149952_full/
- Carrega picos do arquivo com os cromossomos padronizados crm_std.bed em memória (dict chrom -> [(s, e)]
O arquivo crm_std.bed contém coordenadas dos picos CRM padronizadas (cromossomo, start, end)
-
Para cada shard .pt:
- Aloca mask = np.zeros(149_952, uint8)
Iterando sobre cada shard .pt: Extraindo os metadados do nome (que contém as posições e e convertendo chrom_raw(ex: NC_003070.9) para a forma curta (1-5 C e M) usando o mesmo dicinário do to_std.awk. Alocamos o vetor do rotulo começando por marcar 0 em todos os nucleotídeos, para só depois sobrescrever apenas as posições que caem em picos (na sequencia 0 a 149952, cada posição do array corresponde a 1 nucleotídeo na janela (indices locais 0, 1, 2, ..., 149951).
mask = np.zeros(149_952, dtype="uint8")
- Marca 1 nos trechos que se sobrepõem ao CRM
Overlaps usa busca binária para devolver apenas picos cujo peak_end > win_start e peak_start < win_end na janela. Deslocamento local ps - start converte coordenadas absolutas (genoma) em índices relativos 0-based dentro do vetor (0 -> 1 -> ... -> 149951), Numpy preenche toda a fatia de uma vez (operação vetorizada), marcando todos os nucleotídeos do pico como 1 sem precisar iterar bp a bp.
- Salva labels_149952_full/.mask.py