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.

1. Passos anteriores:

  • O script generate_windows.sh > gera um arquivo tair10_149952.bed com colunas chrom, start, end, id.

2. Padronização dos cromossomos

  • 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

2.1 A Database de CRMs do ReMap2022

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

3. As embeddings do Evo2

  • Para cada .fa, o script embed_evo2.py gera *.pt (.pt) em embeddings_149952_full/

Máscaras 0/1 por janela (make_masks_150kb.py)

  • 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

Checagem com bedtools coverage

No terminal

⚠️ **GitHub.com Fallback** ⚠️