본문 바로가기

파이썬3

symbol to phred score 변환 파이썬 기능

728x90
반응형

https://support.illumina.com/help/BaseSpace_OLH_009008/Content/Source/Informatics/BS/QualityScoreEncoding_swBS.htm

 

시퀀싱 데이터의 fastq나 bam파일에는 각 염기서열 별로 얼만큼 확신하는지를 나타내는 phred score값이 있다.

이것의 문제는 값이 2자리 수를 넘어가게 되면 1-letter인 염기서열과 매칭이 되지 않으므로 각 숫자별로 상징 (symbol)을 매칭한다. 이를 통해 염기서열 길이와 phred score값의 길이는 일치하게 된다.

 

문제는 상징에서 점수로 변환하는 것은 외우고 다니기 어렵다. 이를 해결하고자 일루미나 홈페이지에서 있는 표를 참고하여 파이썬 기능을 만들었다.

 

score_mapping_33base = {chr(i):i-33 for i in range(33,91)}
score_mapping_64base = {chr(i):i-64 for i in range(64,122)}
import warnings
def get_quality_score(symbol,ascii_system=33):
    '''
    이것은 주어진 심볼에 대해 phred score를 반환하는 기능임.
    #https://support.illumina.com/help/BaseSpace_OLH_009008/Content/Source/Informatics/BS/QualityScoreEncoding_swBS.htm
    # 위의 코드는 제한적인 ascii만 있어서 이를 넘어가는 경우가 있을 때 문제가 생김 따라서 아래를 참조해서 늘림.
    https://people.duke.edu/~ccc14/duke-hts-2018/bioinformatics/quality_scores.html
    symbol : phred score vector that are encoded by ascii-code
    ascii_system : 33 or 64 (default 33)
    # return
    
    '''
    # Define the mapping of symbols to scores
    if ascii_system==33:
        score_mapping=score_mapping_33base
    elif ascii_system==64:
        score_mapping=score_mapping_64base
    else:
        raise Exception('Available ascii_system options are 33 or 64')
    phred_score=[score_mapping.get(s,'idontknow') for s in symbol]
    return phred_score

 

 

테스트

get_quality_score(symbol='HJIHIIFJGFGHE@HJGFIFJFGIIFF',ascii_system=33)
# [39, 41, 40, 39, 40, 40, 37, 41, 38, 37, 38, 39, 36, 31, 39, 41, 38, 37, 40, 37, 41, 37, 38, 40, 40, 37, 37]

get_quality_score(symbol='HJIHIIFJGFGHE@HJGFIFJFGIIFF',ascii_system=64)
# [8, 10, 9, 8, 9, 9, 6, 10, 7, 6, 7, 8, 5, 0, 8, 10, 7, 6, 9, 6, 10, 6, 7, 9, 9, 6, 6]
728x90
반응형