שְׁאֵלָה:
כיצד למזג קבצי סם יחד עם הוספת קבוצות קריאה
Kamil S Jaron
2017-06-26 13:06:52 UTC
view on stackexchange narkive permalink

יש לי שלוש ספריות רצף של אדם יחיד הממופה להפניה באמצעות bwa-mem . ברצוני למזג את שלושת הקבצים הלא-מסודרים .sam שברשותי כך, אני יכול להתקשר לגרסאות ולהערכות הטרוזיגוזיות באמצעות אטלס. Atlas דורש קובץ מיפוי קלט אחד ( bam ) עם קבוצות קריאה מוגדרות מכיוון שהוא מעריך את פרופילי השגיאה של ספריות שונות בנפרד.

כיצד אוכל למזג מספר קבצי sam? רצוי להימנע מג'אווה (כלי Picard).

ניסיתי להבין פיתרון באמצעות samtools 1.3 . מיניתי קבצים בודדים באמצעות samtools sort , ואז השתמשתי ב- samtools merge -r merged.bam s1.sort.sam s2.sort.sam s3.sort.sam כדי למזג את קבצים ממוינים. עם זאת, קבוצת הקריאה לא הגיעה לכותרת (ומתקשר הגרסה שאני משתמש בו מתלונן על כך), גם קבוצת הקריאה היא באופן טיפשי בשם הקובץ.

ניסיתי להגדיר שמות משמעותיים של קבוצות קריאה. תוך שימוש בהליך המתואר ב- BioStars, אך מצאתי שזה רק ישנה את הכותרת, זה לא מתאים את שמות קבוצות הקריאה שהוגדרו על ידי samtools merge (שמות הקבצים).

בעקבות השרשור הקשור הזה ב- SeqAnswers, ניסיתי להגדיר את הכותרת הנכונה עם קבוצות קריאה המתאימות לשמות קבצים ממוזגים:

  samtools -rh rg.txt merged.bam s1.sort.sam s2.sort.sam s3.sort.sam  

כאשר rg.txt הוא קובץ עם כותרת

  @RG s1.sort@RG s2.sort@RG s3.sort ... פלט של תצוגת samtools -H s1.sort  

עם זאת, הכותרת עדיין לא הייתה את קבוצת הקריאה, אני מניח מכיוון שכותרת sam מקבלת רק פריטים מתויגים שצוינו (משהו כמו @RG XY: s1.sort ). אז בדקתי את ה- bam הממוזג וגיליתי שהתג של RG הוא Z: . אז ניסיתי פשוט לשנות את שם הכותרת של הקובץ הממוזג באמצעות samtools reheader , אבל אז samtools מתלוננים על העובדה שהתג צריך להיות באורך 2:

  מפתח שגוי: צמד ערך בשורה 123: "@RG Z: s1.sort" תקלה בפילוח (הליבה מושלכת)  

פתחתי בעיה / a> לדווח על חוסר תאימות מוזר זה של קבוצות קריאה שנוצרו על ידי samtools מיזוג עם samtools reheader .

אני רוצה פיתרון ל:

  • צור שמות קבוצות קריאה מעט סטנדרטיים יותר ( SM: תבנית \ tLB: ספרייה )
  • הימנע מכתיבה חסרת טעם לדיסק כמו ב- sam -> ממוינת. sam -> merged.bam case (ניתן להשיג ככל הנראה באמצעות "צינורות ו tees", תודה @bli)

אני גם יודע שאני יכול לציין RG ל- bwa, כך שקבצי ה- sam קראתי קבוצות שהוגדרו מלכתחילה. אבל אני לא אוהב את הרעיון לבצע מיפוי מחדש של שלוש ספריות רק כדי ליצור עיצוב נכון של קבוצות קריאה.

אני לא יודע אם ניתן להשתמש בזה בכדי לפתור את הבעיה של "כמות מגוחכת של שטח": האם אתה יכול להשתמש בצינורות וטיפים בשם כדי להימנע מלכתוב קבצי ביניים לדיסק?
אני יודע שזה לא עוסק בסוגיה שאתה מעלה באופן ספציפי כלומר כיצד למזג ביעילות קבצי sam, אך האם תוכל לפרט מדוע ברצונך להתייחס לקבצים אלה מלכתחילה אם ברצונך להתייחס לקבוצות הקריאה בנפרד לחלוטין? האם תוכל לבצע את הניתוח שלך ואז למזג את התוצאות בנפרד או שאתה מתכנן להצטרף לקבוצות קריאה בחלק משיחות הגרסה?
@bli כן חשבתי על זה, אבל אני לא יודע איך עלי לעשות זאת עם שלושה קבצים שימוזגו (למעשה מעולם לא השתמשתי בטיז). בכל מקרה, אנסה לפתור את הבעיה ברגע שיהיה לי לפחות פתרון עבודה אחד.
@amblina לכל סוגי בעיות ההיסק מאדם יחיד מומלץ להשתמש בכל הנתונים בו זמנית ולפי הידוע לי הכלים הללו (כמו אטלס או GATK) עובדים עם קבוצות קריאה כדי לעקוב אחר מקור הקריאות ( אתה לא יכול פשוט להאכיל אותו בקבצים נוספים).
שתיים תשובות:
Bioathlete
2017-06-27 09:10:48 UTC
view on stackexchange narkive permalink

השתמשתי ב- https://github.com/ekg/bamaddrg כדי להוסיף קבוצות קריאה במהירות למספר קבצי sam. ואז אתה יכול לבצע מיזוג של samtools של הקבצים המתויגים.

זה נראה כמו גרסה אלגנטית ומהירה יותר של 'awk'. אני חייב להעיף מבט!
Kamil S Jaron
2017-06-26 21:50:19 UTC
view on stackexchange narkive permalink

לא פיתרון כל כך אלגנטי אבל עובד

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

  פונקציה sort_and_assign_RG {# $ 1 קובץ קלט # $ 2 קרא את מזהה הקבוצה # $ 3 ספריה OFILE = $ (שם בסיס $ 1 .sam). sort.RG.sam HEADER = $ (שם בסיס $ 1 .sam) .header.sam # מכיוון שאני לוקח כותרת מקובץ לא ממוין, אז אני צריך להוסיף מידע זה לכותרת כמו גם הד הקבוצות הקריאה -e "@HD \ tVN: 1.3 \ tSO: לתאם" > $ HEADER # הוסף קבוצת קריאה לכותרת הד -e "@RG \ tID:" $ 2 "\ tLB:" "$ 3" >> $ HEADER # ו- שאר הכותרת תצוגה samtools -H $ 1 >> $ HEADER # עכשיו ממיין את סם הקלט, הסר כותרת, # צרף לכל מזהה קבוצת קריאה (RGID) # וכותרת חתול ויישור יחד יחד מיון - $ 1 | תצוגה samtools - | \ awk -v RGID = "$ 2" '{printf "% s \ tRG: Z:% s \ n", $ 0, RGID; } '| \ cat $ HEADER - > $ OFILE # הסר כותרת זמני rm $ HEADER} sort_and_assign_RG s1.sam s1 is180sort_and_assign_RG s2.sam s2 is350sort_and_assign_RG s3.sam s3 is550samtools מיזוג merged.bam.s. 

זה יהיה נחמד להימנע מיצירת שלושה קבצי sam בדרך, אבל לפחות אני מקבל קבוצות קריאה סטנדרטיות באריח bam ממוזג.

--- עריכה ---

מצאתי גם מאיפה הבלבול שלי. קבוצת הקריאה בכותרת היא בפורמט

  @RG ID: foo LB: lib_foo ... `@RG ID: bar LB: lib_bar ...`  

שם ID נקרא מזהה קבוצתי (לא מזהה לדוגמא כמו שחשבתי) ותגים אחרים הם רק מפרטים של קבוצת הקריאה. לאחר מכן מיפוי פרטני קרא קבוצה שהוקצתה בפורמט שונה

  {aliment1} RG: Z: foo {aliment2} RG: Z: bar  

כאשר RG הוא רק תג לקבוצת קריאה ו Z הוא רק סימן שאומר שתג זה הוא רק "מחרוזת להדפסה". לכן אני חושב שפתרון אחר יהיה רק ​​למזג קבצים ממוינים ואז פשוט להוסיף שלוש שורות נכונות לכותרת.

אני חייב לומר, .sam קוד> הוא פורמט אינטואיטיבי שלא יאומן.

אתה יכול לנסות להשתמש בצינורות בשם במקום בקבצים עבור קבצי ה- sam שלך: 'mkfifo $ OFILE' לפני 'samtools sort'. ואז אתה קורא ל'מיין_וא_קצה_רג 'שלך ברקע עם' & 'ועשה' rm -f s {1,2,3} .sort.RG.sam 'לאחר' samtools מיזוג '. אני לא בטוח שזה באמת יעבוד במקביל: אני חושד שניתן לכתוב את הצינורות שצוינו רק ברגע שהסימון 'samtools' יושלם.


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