A probléma egy véletlenszerű BED-intervallum létrehozása a következő korlátozások mellett:
- minimum
start
- maximum
end
- rögzített hosszúságú
- maszkolt alapok maximális száma (hasonló a
-maxN
opcióhoz afaSplit
-ben) - intervallumok beállítása az átfedések elkerülése érdekében
- maradjon a kromoszóma méretének korlátai között
Számítási szempontból intenzív módszereket tudok kitalálni a semmiből, de kíváncsi vagyok, hogy hatékonyabb megközelítés létezik a kerék újrafeltalálása előtt.
seq_records = {x.name: x for x in SeqIO.parse ('path / to / genome.fa', 'fasta ')} def generál_véletlen_intervál (króm, alsó, felső, hossz, maxrep = 1,0, elkerülhető_intervallumok = Nincs): míg Igaz: start = np.véletlen.randint (alsó, felső - hossz) vég = kezdet + hossz regenerál = hamis intervallum az elkerülési_intervallumok: if (intervallum.indítás < vége) vagy (interval.end > kezdete): regenerálás e = Igaz, ha 1. * seq_records [chrom] .seq [alsó, felső] .szám ('N') / hossz > maxrep: regenerate = Igaz, ha nem regenerálódik: break return chrom, start, end
elő>