Kérdés:
Véletlenszerű BED intervallumok generálása adott korlátozásokkal
victor
2018-06-01 22:49:14 UTC
view on stackexchange narkive permalink

A probléma egy véletlenszerű BED-intervallum létrehozása a következő korlátozások mellett:

  1. minimum start
  2. maximum end
  3. rögzített hosszúságú
  4. maszkolt alapok maximális száma (hasonló a -maxN opcióhoz a faSplit -ben)
  5. intervallumok beállítása az átfedések elkerülése érdekében
  6. 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ő>
Egy válasz:
Alex Reynolds
2018-06-02 06:35:14 UTC
view on stackexchange narkive permalink

Esetleg összecsukhatja az (1), (2) és (6) követelményeit, mindaddig, amíg az (1) és (2) határai a (6) határain belül esnek.

Ebben segíthet a fetchChromSizes használatával a Kenti UCSC segédprogramokból, hogy gyorsan kromoszómákat és kromoszómális határokat kapjanak az érdeklődő genomhoz.

Adott kromoszóma és a határai közé eső maximumEnd között egyenletesen vegyen mintát a [0, maximumEnd-minimumStart-maxLength) -ból, hozzáadva a minimumStart a kezdő pozíció és a maxLength hosszúságként történő megadásához, hogy megkapja a stop helyzetet.

A kívánt számú minta hatékony megszerzéséhez ezeket csövezheti " jelölt elemek " bedmap --echo-map-size műveletekbe ismételt maszkolt régiókban (4) és bedops -n 1 műveletek a" régiók elkerülendő "(5) műveletekbe elutasító mintavételezéshez.

Talán valami ilyesmi:

  $ REPEATMASK_THRESHOLD = 123 $ SAMPLES = 1000 $ someScriptThatGeneratesCandidateIntervalsWithinBounds \ | válogató ágy - \ | bedmap --echo-map-size --echo --delim '\ t' - repeatmaskedRegions.bed \ | awk -vthreshold = $ {REPEATMASK_THRESHOLD} '($ 1<threshold)' \ | vágott -f2- \ | ágyneműk -n 1 - régiókToAvoid.bed \ | fej - $ {SAMPLES} \ > qualifyingCandidates.bed  

Ez viszonylag hatékony lesz, mert ha a végén a head folyamat megírja a számát MINTÁK a qualifyingCandidates.bed címre, egy SIGINT jelet küld a csővezetékre, amely leállítja az upstream folyamatokat. Tehát csak a szükséges mértékben végez mintavételt.

Remélem, hogy ez segít!



Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 4.0 licencért, amely alatt terjesztik.
Loading...