שְׁאֵלָה:
הפעל gffread במצב רב תבריג
aechchiki
2018-03-14 19:21:09 UTC
view on stackexchange narkive permalink

האם יש אפשרות להריץ gffread במצב רב-אשכולות? נראה שהתשובה היא 'לא' מתוך המדריך (או gffread -h ), מכיוון שלא מוזכרת אפשרות מרובת-שרשור.

I ' m בעיקר משתמש בכלי זה כדי לחלץ רצפי תמלול (FASTA) מקבצי ההערות (GTF). במצב של חוט יחיד, זמן ריצה מקובל ברוב המקרים, אך ברצוני להאיץ במקצת במקרים מסוימים (במיוחד עבור גנומים גדולים).

שים לב שכבר ניסיתי, כאמור במדריך, כדי לאנדקס את הגנום תחילה (אשר, שוב, מצמצם את זמן הריצה ברוב המקרים אך לא בכל המקרים):

שים לב שאחזור רצפי התמלול בדרך זו הולך להיות הרבה יותר מהיר אם fasta קובץ אינדקס (genome.fa.fai בדוגמה זו) נמצא באותה ספרייה עם קובץ ה- fasta הגנומי.

ניתן ליצור קובץ אינדקס כזה באמצעות כלי השירות samtools לפני הפעלת gffread, כך: samtools faidx genome.fa

ואז בריצות הבאות באמצעות אפשרות ggread -g תמצא את אינדקס ה- FASTA הזה ותשתמש בו כדי להאיץ את חילוץ רצפי התמלול.

אני גם פתוח לחלופות שונות מ- gffread להמיר GTF -> FASTA.

השתמשתי ב- gffread כמה פעמים. הרושם שלי הוא שהוא מהיר. כפי שניסיתי זה עתה, להערות אנושיות של Ensembl, זה מקבל את כל התמלילים תוך 29 שניות. זה צריך להיות מהיר יותר מפעולות רבות אחרות בגנום האנושי. באיזו תדירות אתה רוצה להריץ gffread?
תודה. כן זה בדרך כלל די מהיר. למעשה התייחסתי לשאלה זו מכיוון שלקח לי יותר מ 8 דקות להוציא את התמלילים מגודל הגנום המשוער של 1.4Gb, אך לא הצלחתי לשחזר את זמן הריצה האיטי בשרת אחר (שם לקח לי בערך 110 שניות). מְשׁוּנֶה.
אחד תשובה:
terdon
2018-03-15 04:30:12 UTC
view on stackexchange narkive permalink

מכיוון שנראה כי אין דרך קלה להפעיל זאת במקביל, אתה יכול במקום לפרק את העבודה לחלקים. לדוגמא, הפרד כל כרומוזום לקובץ gtf משלו, חילץ את הרצפים באמצעות אותו קובץ ואז חתול את כולם יחד.

הפקודות יהיו משהו כזה (באמצעות הגנום האנושי hg38 והערות ה- gff GENCODE הורד מ- כאן):

פצל את הקובץ לקובץ אחד לכל כרומוזום (או כל דבר אחר שיש לך כשדה הראשון של קובץ ה- gff / gtf שלך):

tmp = $ (mktemp -d); ## צור מדריך זמני temp -vtmp = "$ tmp" '($ 1! ~ / ^ # /) {הדפס > tmp "/" $ 1 ".gff"}' gencode.v27.annotation.gtf

חלץ את הרצפים המתוארים בכל קובץ, והפעל כל פקודה ברקע ( & ):

  עבור f ב- $ tmp / *; do gffread -w "$ f.fa" -g hg38.fa "$ f" & done  

שרשר אותם לקובץ אחד:

  cat " $ tmp / * fa "> all.fa  

אתה יכול לשלב את כל זה לפקודה אחת, באמצעות המתן כדי לוודא שאתה לא שרשור עד שהכל מפקודות המשנה הסתיימו:

  tmp = $ (mktemp -d); awk -vtmp = "$ tmp" '($ 1! ~ / ^ # /) {הדפס > tmp "/" $ 1 ".gff"}' gencode.v27.annotation.gtf && עבור f ב "$ tmp" / *; do gffread-0.9.12.Linux_x86_64 / gffread -w $ f.fa -g hg38.fa "$ f" & done wait cat "$ tmp" / * fa > all.fa  

לחלופין, פשוט שמור אותו כסקריפט בשם pgffread.sh (או מה שלא יהיה):

  #! / Bin / shgtf = "$ 1" genome = "$ 2" tmp = $ (mktemp -d); awk -vtmp = "$ tmp" '($ 1! ~ / ^ # /) {הדפס > tmp "/" $ 1 ".gff"}' "$ gtf" && עבור f ב "$ tmp" / *; לעשות gffread -w "$ f" .fa -g "$ genome" "$ f" & donewaitcat "$ tmp" / * fa rm -rf "$ tmp"  

ואז לרוץ זה נותן את הגנום ואת קבצי ההערות כפרמטרים:

  pgffread.sh gencode.v27.annotation.gtf hg38.fa > all.fa  

במערכת שהפעלתי אותה, שיש לה 48 ליבות, הפרש הזמן היה משמעותי (למרות שבכל מקרה זה כל כך מהיר, אני באמת לא יודע אם זה שווה להתאמץ אלא אם כן אתה עושה את זה לעיתים קרובות מאוד):

  $ time gffread -w out.fa -g hg38 .fa gencode.v27.annotation.gtfreal 1m52.072suser 1m3.160ssys 0m47.257s $ זמן ./pgffread.sh gencode.v27.annotation.gtf hg38.fa > all.fareal 0m17.533 משתמש 1m5.228ssys 0m43.039s  קוד> 
תודה! כן, הייתי צריך לחשוב לשבור את הפניה לחתיכות קטנות יותר.


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...