KR20220017409A - Dna 기반 데이터 저장소에서 검색, 컴퓨팅 및 인덱싱하기 위한 데이터 구조 및 동작 - Google Patents

Dna 기반 데이터 저장소에서 검색, 컴퓨팅 및 인덱싱하기 위한 데이터 구조 및 동작 Download PDF

Info

Publication number
KR20220017409A
KR20220017409A KR1020217040321A KR20217040321A KR20220017409A KR 20220017409 A KR20220017409 A KR 20220017409A KR 1020217040321 A KR1020217040321 A KR 1020217040321A KR 20217040321 A KR20217040321 A KR 20217040321A KR 20220017409 A KR20220017409 A KR 20220017409A
Authority
KR
South Korea
Prior art keywords
nucleic acid
pool
string
identifier
symbol
Prior art date
Application number
KR1020217040321A
Other languages
English (en)
Inventor
나다니엘 로크
스왑닐 바티아
파올로 페라기나
Original Assignee
카탈로그 테크놀로지스, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 카탈로그 테크놀로지스, 인크. filed Critical 카탈로그 테크놀로지스, 인크.
Publication of KR20220017409A publication Critical patent/KR20220017409A/ko

Links

Images

Classifications

    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16BBIOINFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR GENETIC OR PROTEIN-RELATED DATA PROCESSING IN COMPUTATIONAL MOLECULAR BIOLOGY
    • G16B30/00ICT specially adapted for sequence analysis involving nucleotides or amino acids
    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16BBIOINFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR GENETIC OR PROTEIN-RELATED DATA PROCESSING IN COMPUTATIONAL MOLECULAR BIOLOGY
    • G16B50/00ICT programming tools or database systems specially adapted for bioinformatics
    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16BBIOINFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR GENETIC OR PROTEIN-RELATED DATA PROCESSING IN COMPUTATIONAL MOLECULAR BIOLOGY
    • G16B50/00ICT programming tools or database systems specially adapted for bioinformatics
    • G16B50/50Compression of genetic data
    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16HHEALTHCARE INFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR THE HANDLING OR PROCESSING OF MEDICAL OR HEALTHCARE DATA
    • G16H50/00ICT specially adapted for medical diagnosis, medical simulation or medical data mining; ICT specially adapted for detecting, monitoring or modelling epidemics or pandemics
    • G16H50/30ICT specially adapted for medical diagnosis, medical simulation or medical data mining; ICT specially adapted for detecting, monitoring or modelling epidemics or pandemics for calculating health indices; for individual health risk assessment
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02ATECHNOLOGIES FOR ADAPTATION TO CLIMATE CHANGE
    • Y02A90/00Technologies having an indirect contribution to adaptation to climate change
    • Y02A90/10Information and communication technologies [ICT] supporting adaptation to climate change, e.g. for weather forecasting or climate simulation

Abstract

본 개시내용은 최적화된 데이터 구조 및 기능을 이용해 DNA에 저장된 데이터의 검색 및 추출을 가능하게 하는 것과 관련된다. 따라서 핵산 분자에 저장된 데이터에 특정 함수를 수행하기 위한 시스템 및 방법이 본 명세서에서 제공된다. 본 개시내용은 적어도 다음의 관심 영역을 포함한다: (1) 핵산 분자에 저장된 정보의 효율적인 액세스 및 검색을 제공하기 위한 데이터 구조, (2) 핵산 분자에 저장된 정보의 정확하고 신속한 판독, (3) 핵산 분자에 저장된 정보의 서브세트를 액세스하기 위한 표적이 된 접근법, (4) 핵산 분자에 저장된 정보의 세트에서 특정 비트 또는 심볼 값의 카운트를 결정하는 순위화 함수, (5) 핵산 분자에 저장된 정보의 메시지 내 특정 패턴의 등장을 카운팅, 찾기, 및 추출하는 것을 포함하는 함수, 및 (6) 핵산 분자에 저장된 데이터를 정렬하기 위한 if-then-else 연산.

Description

DNA 기반 데이터 저장소에서 검색, 컴퓨팅 및 인덱싱하기 위한 데이터 구조 및 동작
관련 출원의 교차 참조
본 출원은 "NUCLEIC ACID-BASED DATA STORAGE: SEARCH AND COMPUTE"라는 명칭으로 2019년 5월 9일에 출원된 미국 가특허출원 번호 62/845,638, "DATA STRUCTURES FOR DNA STORAGE"라는 명칭으로 2019년 6월 11일에 출원된 미국 가특허출원 번호 62/860,117, 및 "INDEX AND SEARCH OF INFORMATION STORED IN DNA"라는 명칭으로 2019년 8월 22일에 출원된 미국 가특허출원 번호 62/890,243의 우선권 및 이익을 주장한다. 앞서 언급된 출원의 전체 내용이 본 명세서에 참조로서 포함된다.
핵산 디지털 데이터 스토리지는 자기 테이프 또는 하드 드라이브 저장 시스템보다 더 높은 밀도로 저장된 데이터를 갖는 장기간 동안 정보를 인코딩 및 저장하기 위한 안정한 방식이다. 또한, 춥고 건조한 조건에서 저장된 핵산 분자에 저장된 디지털 데이터는 60,000년 이상 동안 검색될 수 있다.
핵산 분자에 저장된 디지털 데이터를 액세스하는 한 가지 방법은 핵산 분자를 시퀀싱하는 것이다. 이와 같이, 핵산 디지털 데이터 스토리지는 빈번하게 액세스되지는 않지만 장기간 저장하거나 보관해야 하는 정보의 양이 많을 수 있는 데이터를 저장하는 이상적인 방법일 수 있다.
핵산 분자에 데이터를 저장하는 기존 방법은 디지털 정보(가령, 이진 코드)를 염기별 핵산 서열로 인코딩하여, 서열 내 염기간 관계가 디지털 정보(가령, 이진 코드)로 직접 변환될 수 있다. 그러나, 이러한 새로운 염기별 핵산 합성은 오류가 발생하기 쉽고 비용이 많이 된다. 더욱이, 먼저 전체 분자 세트를 디지털 정보로 번역하지 않고 데이터가 단일 염기 분해능으로 인코딩될 때, 이들 기존의 핵산 디지털 데이터 저장 방법을 통해 저장된 데이터에 대해 특정 함수가 수행될 수 없다. 예를 들어, 이러한 함수는 데이터가 디스크에 저장될 때 일반적으로 수행되는 기본 작업, 가령, 논리 함수, 덧셈, 뺄셈, 및 쿼리 검색, 가령, 특정 쿼리 패턴이 데이터 세트에서 발생하는지 여부, 등장 횟수, 및 각각의 등장의 위치 등의 쿼리 검색을 포함한다.
본 개시내용은 최적화된 데이터 구조 및 기능을 이용해 DNA에 저장된 데이터의 검색 및 추출을 가능하게 하는 것과 관련된다. 따라서 핵산 분자에 저장된 데이터에 특정 함수를 수행하기 위한 시스템 및 방법이 본 명세서에서 제공된다. 본 개시내용은 적어도 다음의 관심 영역을 포함한다: (1) 핵산 분자에 저장된 정보의 효율적인 액세스 및 검색을 제공하기 위한 데이터 구조, (2) 핵산 분자에 저장된 정보의 정확하고 신속한 판독, (3) 핵산 분자에 저장된 정보의 서브세트를 액세스하기 위한 표적화된 접근법, (4) 핵산 분자에 저장된 정보의 세트에서 특정 비트 또는 심볼 값의 카운트를 결정하는 순위화 함수, (5) 핵산 분자에 저장된 정보의 메시지 내 특정 패턴의 등장을 카운팅, 찾기, 및 추출하는 것을 포함하는 함수, 및 (6) 핵산 분자에 저장된 데이터를 정렬하기 위한 if-then-else 연산.
본원에 기재된 시스템 및 방법은 임의의 핵산 서열을 판독하는 데 사용될 수 있지만, 본 개시내용은 식별자 핵산 분자(본 명세서에서 단순히 "식별자" 또는 "식별자 분자"라고도 지칭됨)에서 특정 인코딩 방법을 이용해 써진 핵산 서열에 저장된 정보를 판독, 액세스, 및 검색할 때 특히 바람직하다. 각각의 식별자 분자의 핵산 서열은 심볼의 스트링(가령, 비트 스트림 또는 심볼 스트림)에서 특정 심볼 값(가령, 단 2개의 심볼 값, '0' 및 '1'이 가능할 때 또는 셋 이상의 심볼 값이 가능할 때 비트 또는 비트 시리즈), 이 심볼의 위치(가령, 순위 또는 주소), 또는 둘 모뒝 대응한다. 예를 들어, 식별자 분자의 존재 또는 부재는 각각 1 또는 0의 비트 값을 나타낼 수 있다(또는 그 반대의 경우도 마찬가지). 식별자 핵산 분자는 구성요소 핵산 분자(본 명세서에서 간단하게 "구성요소" 또는 "구성요소 분자"라고 지칭됨)의 조합 배열을 포함한다. 구성요소의 핵산 서열은 고유한 세트(레이어(layer)라고도 함)로 분리된다. 식별자 분자는 복수의 구성요소 분자를 함께 연결(또는 다른 방식으로 조립)함으로써 조립되며, 각각의 구성요소 분자는 각각의 레이어로부터 선택된 서열을 가진다. 어떤 경우에는, 구성요소 분자가 자체-조립되어 식별자 분자를 형성할 수 있다. 가능한 식별자 서열의 세트는 구성요소 서열의 다양한 가능한 조합에 대응한다. 예를 들어, M개의 레이어로 분리된 C개의 구성요소 서열에 대해, ci가 각각의 i번째 레이어에서의 구성요소 서열의 수를 나타낼 때, 형성될 수 있는 가능한 식별자 서열의 수는 c1×c2×...×cM으로 나타내어질 수 있다. 예를 들어, 각각 10개의 구성요소 서열을 포함하는 12개의 레이어의 인코딩 방식은 1012개의 서로 다른 고유 식별자 서열을 생성할 수 있다. 각각의 식별자 서열이 비트 스트림 내 비트에 대응하는 경우 이 인코딩 방식은 1TB의 데이터를 나타낼 수 있다.
DNA로부터 정보를 판독할 때 효율성을 향상시키는 한 가지 방법은 데이터 스트링의 데이터 블록의 위치를 저장하고 표시하기 위해 데이터 구조를 사용하는 것을 포함한다. 예를 들어, 큰 데이터 스트링이 분리되어 둘 이상의 컨테이너에 저장될 수 있다. 사용자가 액세스하려는 정보가 포함된 컨테이너를 결정하기 위해 시스템은 위치(가령, 컨테이너 번호 또는 배치)를 보유하는 B-트리 또는 트리플 저장소 구조를 액세스할 수 있다. 이를 통해 사용자는 데이터 스트링을 포함하는 각각의 컨테이너의 정보를 판독하는 대신 찾는 정보를 편리하게 액세스할 수 있다.
데이터 구조는 또한 신속한 작업, 가령, 비트/심볼 값 순위화 및 데이터에서의 특정 패턴 검색을 가능하게 하는 구성으로 핵산 분자에 데이터를 저장할 수 있다. 예를 들어, 시스템은 데이터 스트링에서의 비트/심볼 값 등장의 러닝 카운트를 나타내는 카운터 배열을 액세스할 수 있다. 이를 통해 시스템은 시스템의 모든 단일 핵산 분자를 판독하지 않고도 비트/심볼 값에서 순위를 결정할 수 있다. 데이터는 버로우즈-휠러(Burrows-Wheeler) 변환을 통해 또는 접미부 배열(suffix array)로 변환되어 압축에 적합한 형식으로 데이터를 저장하고, 각각의 개별 핵산 분자 또는 서열을 판독할 필요 없이, 데이터의 특정 패턴을 효율적으로 검색할 수 있다.
일부 양태에서, 각각의 블록이 심볼의 스트링을 포함하고 블록 ID와 연관된 복수의 블록을 획득함으로써 디지털 정보를 핵산 분자로 저장하기 위한 시스템 및 방법이 본 명세서에 제공된다. 이러한 시스템 및 방법은 저장된 데이터 또는 연관된 핵산 분자를 특징 짓는 정보를 저장 또는 포함시킴으로써, 블록 ID가 사용되어 저장된 데이터의 검색을 촉진시킬 수 있다는 이점을 제공한다. 이 시스템 및 방법에서, 블록이 컨테이너로 할당되고 컨테이너와 연관될 복수의 식별자 핵산 서열로 매핑되고, 각각의 식별자 핵산 서열은 구성요소 핵산 서열을 포함하고, 구성요소 핵산 서열 중 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성된다. 시스템 및 방법은 복수의 식별자 핵산 서열의 개별 식별자 핵산 분자를 더 구성하며, 할당된 컨테이너에 개별 식별자 핵산 분자를 저장하는 단계를 포함하고, 컨테이너의 신원 및 이와 연관된 복수의 식별자 핵산 서열을 포함하는 물리 주소가 연관된 블록 ID를 이용해 결정되도록 구성된다.
예를 들어, 블록 ID는 정수형, 스트링, 트리플, 속성의 리스트, 또는 시맨틱 주석이다. 일부 구현예에서, 물리 주소는 연관된 블록 ID를 사용하여 물리 주소의 액세스를 용이하게 하도록 설계된 데이터 구조에 저장된다. 데이터 구조는 B-트리, 트라이 또는 배열 중 하나일 수 있다. 데이터 구조의 적어도 일부분은 인덱스 내 디지털 정보와 함께 저장될 수 있으며, 인덱스는 제2 컨테이너와 연관된 제2 복수의 식별자 핵산 서열을 포함할 수 있다. 인덱스는 노드를 갖는 B-트리 또는 트라이 데이터 구조일 수 있으며, 노드 각각은 제2의 복수의 식별자 핵산 서열의 구별되는 복수의 식별자 핵산 서열에 대응한다. 첫 번째 노드를 구성하는 구별되는 식별자가 액세스될 수 있고, 그 후 이들 식별자와 연관된 값을 판독하고, 이들 단계는 블록 ID를 이용해 첫 번째 노드의 값과 관련하여 다음 노드를 포함하는 구별되는 복수의 식별자의 신원을 결정하여, 다음 노드에서 반복될 수 있다. 첫 번째 노드는 B-트리 또는 트라이의 루트 노드일 수 있으며, 프로세스는 리프 노드의 값이 판독될 때까지 계속되어, 블록 ID에 대한 블록이 존재하는지 여부 및 대응하는 물리 주소가 무엇인지를 나타낼 수 있다. 블록 ID는 심볼의 스트링일 수 있고, B-트리 또는 트라이 데이터 구조의 각각의 노드는 심볼의 스트링의 가능한 접두부(prefix)에 대응한다. 리프 노드 자체는 리프 노드에 의해 특정된 심볼의 스트링과 매칭되는 블록 ID와 연관된 물리 주소를 나타낼 수 있다.
일부 구현예에서, 데이터 구조는 배열이고, 상기 배열의 각각의 원소는 제2의 복수의 식별자 핵산 서열의 구별되는 복수의 식별자 핵산 서열에 대응한다. 배열의 각각의 원소는 블록 ID에 대응하거나 연관된 블록 ID의 물리 주소를 저장할 수 있다. 일부 구현예에서, 물리 주소는 블록 ID로 본질적으로 구성되어, 물리 주소를 추가 데이터 구조에 저장할 필요 없이 블록 ID가 물리 주소에 매핑된다. 블록 ID는 물리 주소와 연관된 복수의 식별자 핵산 서열의 모든 식별자 핵산 서열에 의해 공유되는 복수의 구성요소 핵산 서열로 매핑될 수 있다. 일부 구현예에서, 블록과 연관된 복수의 식별자 핵산 서열은 인접하게 순서화된 식별자 핵산 서열을 포함하여, 상기 식별자 범위 내 첫 번째 그리고 마지막 식별자 핵산 분자를 포함하는 식별자 범위에 의해 식별자 범위에 의해, 상기 복수의 식별자 핵산 서열이 대응하는 물리 주소에서 특정될 수 있다. 상기 식별자 범위의 첫 번째 및 마지막 식별자 핵산 서열은 정수형으로 나타내어질 수 있다.
일부 구현예에서, 블록 ID는 심볼의 부모 스트링의 대응하는 블록에 의해 나타나는 심볼의 스트링 내 위치이다. 심볼의 상기 부모 스트링은 심볼의 또 다른 스트링에서 패턴의 등장을 카운팅 또는 찾기 위한 데이터 구조에 의해 나타내어질 수 있다. 적절한 데이터 구조는 버로우즈-휠러(Burrows-Wheeler) 변환, 접미부 배열, 접미부 트리, 및 역 인덱스를 포함한다. 데이터 구조가 배열인 경우, 배열의 각각의 요소는 블록 ID에 대응하는 구별되는 복수의 식별자를 포함할 수 있다. 배열의 각각의 요소는 연관된 블록 ID의 물리 주소를 저장할 수 있다.
일부 구현예에서, 물리 주소는 프로브 시리즈를 사용하여 제2의 복수의 식별자 서열을 포함하는 식별자의 풀로부터 액세스된다. 데이터 구조는 자기 저장 디바이스, 광학 저장 디바이스, 플래시 메모리 디바이스 또는 클라우드 저장소에 저장될 수 있다. 블록과 연관된 식별자는 프로브의 시리즈를 사용하여 액세스될 수 있다. 프로브는 액세스를 위해 각각 PCR 또는 친화성 풀다운 분석을 사용하는 PCR 프라이머 또는 친화성 태깅된 올리고뉴클레오티드일 수 있다.
일부 양태에서, 핵산 분자의 풀에 저장된 디지털 정보로부터, 비트 또는 심볼의 스트링 내 특정 위치에서의 특정 비트 또는 심볼 값의 순위를 획득하기 위한 시스템 및 방법이 제공되되, 각각의 비트 또는 심볼은 값 및 위치를 가진다. 시스템 및 방법은 비트 또는 심볼의 스트링을 나타내는 식별자 핵산 분자의 제1 풀을 획득하는 것 - 풀은 분말, 액체 또는 고체 형태를 갖고, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하고, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성됨 - , 및 비트 또는 심볼의 스트링으로부터 도출된 카운터 심볼의 스트링을 나타내는 식별자 핵산분자의 제2 풀을 획득하는 것 - 각각의 카운터 심볼은 비트 또는 심볼의 스트링의 매 w 비트 또는 심볼마다 특정 비트 또는 심볼 값의 러닝 카운트를 나타냄 - 을 포함한다. 시스템 및 방법은, (1) 특정 위치에 선행하는 w 비트 또는 심볼의 모든 블록, 또는 (2) 상기 특정 위치를 포함하는 w 비트 또는 심볼의 블록을 포함해 상기 특정 위치에 선행하는 w 비트 또는 심볼의 모든 블록에 대해, 특정 비트 심볼 값의 러닝 카운트를 나타내는 대응하는 카운터 심볼을 나타내는 제2 풀 내 적어도 식별자 핵산 분자를 표적으로 하도록 제2 프로브 시리즈에 의해, 제2 풀을 액세스함으로써 제1 카운트를 획득하는 것을 더 포함한다. 제1 풀 내, 제1 카운트에서 카운트되지 않고 특정 위치에 선행하거나 특정 위치를 포함하는 비트 또는 심볼을 나타내거나 (2) 제1 카운트에서 카운트되지만 특정 위치에 선행하지 않거나 특정 위치를 포함하지 않는 비트 또는 심볼을 나타내는 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하도록 제1 프로브 시리즈에 의해 제1 풀을 액세스함으로써 제2 카운트가 획득된다. 스트링 내 특정 위치에 있는 특정 비트 또는 심볼 값의 순위는 제1 카운트 및 제2 카운트로부터 획득된다.
본 명세서에 기재된 순위화 함수(rank function)의 한 가지 이점은 스트링 전체를 읽을 필요가 없다는 것이다. 대신, 순위 함수는 선택적 액세스 동작을 사용하여 특정 카운트를 제공하는 핵산 분자의 서브세트를 판독할 수 있다. 이러한 방식으로, 본 명세서에 기재된 순위화 작업은 저장된 모든 핵산 분자의 전체 판독을 필요로 하는 무차별 대입 작업과 비교하여 보다 시간 효율적이고 비용 효율적인 방식으로 수행된다.
식별자는 M개의 선택된 구성요소 핵산 분자를 물리적으로 조립함으로써 형성될 수 있고, M개의 선택된 구성요소 핵산 분자 각각은 M개의 상이한 레이어로 분리되는 구별되는 구성요소 핵산 분자의 세트로부터 선택된다.
일부 구현예에서, 제1 카운트가 특정 비트를 선행하는 w 비트의 모든 블록을 나타낼 때, 제2 카운트 내 제1 프로브 시리즈가 제1 카운트에서 카운트되지 않고 특정 비트에 선행하거나 특정 비트를 포함하는 비트를 나타내는 제1 풀 내 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하며, 비트의 스트링 내 특정 비트의 순위는 제1 카운트 및 제2 카운트를 합산함으로써 획득된다. 일부 구현예에서, 제1 카운트가 특정 비트를 포함하는 w 비트의 블록을 포함하여 특정 비트에 선행하는 w 비트의 모든 블록을 나타낼 때, 제1 프로브 시리즈는 제1 풀 내에서 단계 (c)에서 카운트되지 않고 특정 비트에 선행하거나 특정 비트를 포함하지 않는 비트를 나타내는 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하며, 비트의 스트링 내 특정 비트의 순위는 단계 (e)로부터 제2 카운트를 뺌으로써 획득된다.
일부 구현예에서, 제1 풀은 제2 풀이거나, 제1 풀과 제2 풀은 별개이다. 제1 카운트와 제2 카운트는 각각 제2 풀과 제1 풀로부터 표적이 된 식별자 분자를 판독함으로써 얻어질 수 있다. 제1 카운트의 경우, 표적이 된 식별자에 대응하는 카운터 심볼 값이 판독되거나 결정될 수 있다. 스트링의 w 비트 또는 심볼의 블록은 제1 풀에서 인접하게 순서화된 식별자 핵산 분자의 블록에 매핑될 수 있다. 예를 들어, 제1 풀 내 식별자 분자의 존재 여부는 스트링의 특정 값과 직접적인 상관 관계가 없다. 스트링의 고정 길이 서브스트링(워드)은 고정된 개수의 가능한 고유 식별자 핵산 분자 중에서 고정 개수의 고유 식별자 핵산 분자를 포함하는 코드워드에 매핑될 수 있다. 식별자에 저장된 추가 정보는 식별자 쓰기, 액세스 및 판독의 에러를 검출하고 정정하도록 사용될 수 있다.
각각의 카운터 심볼은 b 카운터 비트의 스트링으로 표현될 수 있다. 일부 구현예에서, 스트링은 n 비트 또는 심볼의 길이를 가지며 b는 log2(n+1)의 천장값(ceiling)이다. 카운터 심볼의 스트링은 n 나누기 w 카운터 심볼의 천장값을 포함할 수 있고, n 나누기 w의 천장값을 b에 곱한 값에 대응하는 길이를 갖는 카운터 비트 스트링으로 나타내어진다. 일부 구현예에서, 특정 비트 또는 심볼이 w 비트 또는 심볼의 첫 번째 블록 내에 있는 경우, w 비트의 첫 번째 블록에 선행하는 러닝 카운트는 0이다. w의 값은 b 또는 1의 값으로 설정될 수 있다. 예를 들어, 제1 카운트는 특정 비트 또는 심볼을 포함하는 w 비트 또는 심볼의 블록에 대응하는 카운터 심볼을 나타내는 제2 풀 내 식별자 핵산 분자를 표적으로 함으로써 획득되고, 순위는 제1 카운트와 동등하다. 이 예에서, 마지막 두 번째 카운트는 획득될 필요가 없다.
일부 구현예에서, 특정 비트가 w 비트 또는 심볼의 첫 번째 블록 내에 있지 않은 경우, 특정 비트 또는 심볼에 선행하는 w 비트 또는 심볼의 모든 블록의 카운터 심볼이 0 내지 w*B(x)-1의 범위 내 위치에서 특정 값을 갖는 스트링 내 비트 또는 심볼의 수를 나타내며, 여기서 0은 스트링의 첫 번째 위치이고 x는 스트링의 특정 비트 또는 심볼 위치에 대응하고 B(x)는 x 나누기 w의 바닥값(floor)이다. 예를 들어, 제1 카운트에 대한 제2 풀 내의 표적이 된 식별자 핵산 분자는 위치 b*B(x) 및 b*(B(x)+1)-1에 의해 정의된 범위 내에 있으며, 여기서 0의 위치는 스트링 내 첫 번째 위치에 대응한다. 제2 카운트는 위치 w*B(x) 내지 x의 범위 내 특정 값을 갖는 스트링 내 비트 또는 심볼의 수에 대응할 수 있으며 여기서 x는 스트링 내 특정 비트 또는 심볼의 위치에 대응하고 위치 0은 첫 번째 위치이고, B(x)는 x 나누기 w의 바닥값이다.
스트링이 비트 스트링인 일부 구현예에서, 식별자의 존재가 비트 위치에서 '1'의 비트-값을 나타내도록, 제1 풀 내 식별자 핵산 분자가 비트의 스트링을 나타낸다. 비트 스트링은 심볼 스트링을 나타낼 수 있고, 순위는 심볼 스트링 내 특정 심볼에 대해 획득된다.
스트링이 심볼의 스트링인 일부 구현예에서, 제1 풀에서의 대응하는 식별자 핵산 분자의 존재는 제1 심볼 값을 나타내고, 제1 풀에서의 대응하는 식별자 핵산 분자의 부재는 제2 심볼 값을 나타낸다. 심볼 값은 심볼 값의 세트(가령, 알파벳) 중에서 선택될 수 있고, 카운터 심볼의 스트링은 특정 심볼 값을 갖는 심볼의 수의 러닝 카운트를 나타낸다. 심볼 스트링은 비트 스트링을 나타낼 수 있다. 예를 들어, 스트링의 각각의 심볼은 고정된 수의 비트에 대응한다. 일부 구현예에서, 식별자 핵산 모듈의 상이한 제2 풀이 특정 심볼 값의 인스턴스의 수를 카운트하는 카운터 심볼의 상이한 스트링을 나타내며, 카운터 심볼의 각각의 상이한 스트링은 대응하는 특정 심볼 값의 인스턴스를 카운팅한다.
일부 양태에서, 핵산 분자의 풀로부터 디지털 정보를 인출하기 위한 시스템 및 방법이 본 명세서에 제공된다. 시스템 및 방법은 식별자 핵산 분자의 제1 풀을 획득하는 것을 포함하며, 상기 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분은 하나 이상의 프로브에 결합되도록 구성되며, 상기 제1 풀 내 대응하는 식별자 핵산 분자의 존재 또는 부재에 의해 심볼 값이 나타내어지도록 식별자 핵산 분자가 심볼의 스트링을 나타낸다. 상기 제1 풀은 제1 프로브 시리즈로 액세스되며, 프로브 각각은 구성요소 핵산 분자 중 적어도 하나를 표적으로 하여, 상기 제1 풀로부터 식별자 핵산 분자의 서브세트를 포함하는 제2 풀을 생성한다. 상기 제2 풀로부터의 식별자 핵산 분자의 상기 서브세트의 서열이 판독되고, 상기 서열이 사용되어 심볼의 스트링의 심볼의 적어도 서브세트를 획득할 수 있다.
각각의 식별자 핵산 분자는 각각의 M개의 레이어로부터의 구성요소 핵산 서열을 갖는 구별되는 구성요소 핵산 분자를 포함하고, 각각의 레이어는 구성요소 핵산 서열의 세트를 포함한다. M개의 레이어는 논리적으로 순서화(order)될 수 있고, 각각의 레이어의 구성요소 핵산 서열이 논리적으로 순서화될 수 있다. 일부 구현예에서, 식별자 핵산 분자는 제1 레이어 내 대응하는 구성요소 핵산 서열에 의해 식별자 핵산 서열을 정렬(sort)하고, 대응하는 구성요소 핵산 서열에 의해 식별자 핵산 서열을 부분-정렬(sub-sort)하며, 나머지 M-2 레이어 각각에 대해 서브-정렬 프로세스를 반복함으로써 논리적으로 순서화되는 식별자 핵산 서열에 대응한다. 각각의 식별자 서열은 루트 노드에서 시작하고, 각각의 레이어에 대해 하나씩의 인스턴스인 M개의 인스턴스에 걸쳐 분기되며, 리프 노드에서 종료되는 쿼리 트리에서의 경로로서 나타내어지는 구성요소 핵산 서열의 시리즈를 포함하고, 각각의 리프 노드가 식별자 핵산 서열을 나타낸다. 따라서, 제1 프로브 시리즈가 쿼리 트리 내 루트 노드로부터 부분 또는 전체 경로에 대응할 수 있다. 전체 경로가 프로브 시리즈가 단일 식별자 핵산 분자를 표적으로 하도록 M개의 프로브를 포함하는 루트-리프 경로에 대응할 수 있고, 부분 경로는 프로브 시리즈가 상이한 서열을 갖는 식별자 핵산 분자의 복수의 모집단을 표적으로 하도록 M보다 적은 개수의 프로브에 대응한다. 상이한 서열을 갖는 식별자 핵산 분자의 복수의 모집단은 적어도 M번째 레이어 내 상이한 구성요소 핵산 분자에 대응할 수 있다.
일부 구현예에서, 제1 풀은 복수의 프로브 시리즈로 액세스된다. 예를 들어, 시스템 및 방법은 제1 풀을 적어도 2개의 복제 풀(duplicate pool)로 분할하고 프로브 시리즈의 각각의 프로브로 상기 복제 풀 각각에 대해 접근 단계를 실행하는 것을 수행한다. 제1 풀은 적어도 2개의 복제 풀로 분할되기 전에 (가령, PCR을 통해) 복제될 수 있다. 일부 구현예에서, 프로브 서브-시리즈로 식별자 핵산 분자의 제1 풀을 액세스하여 식별자 핵산 분자의 중간 풀을 생성할 수 있다. 다음 프로브 서브-시리즈로 중간 풀이 액세스되어, 식별자 핵산 분자의 제2 중간 풀 또는 식별자 핵산 분자의 제2 풀을 형성할 수 있다. 적어도 두 개의 중간 풀이 결합되어 다른 중간 풀 또는 두 번째 풀을 형성할 수 있다. 프로브는 PCR 프라이머(PCR을 통한 접근용) 또는 친화성 태깅된 올리고뉴클레오티드(친화성 풀다운 분석을 통한 접근용)일 수 있다.
일부 양태에서, 길이 n의 비트 스트링을 포함하는 메시지 내 길이 p의 특정 비트 패턴의 카운트를 획득하기 위한 시스템 및 방법이 본 명세서에 제공된다. 시스템 및 방법은 비트 스트링 L을 나타내는 식별자 핵산 분자의 제1 풀을 획득하고, 비트 스트링 L은 메시지의 버로우즈-휠러 변환 행렬(Burrows-Wheeler Transform matrix)의 마지막 열이고, 제1 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성된다. 비트 스트링 L로부터 얻어진 카운터 심볼의 스트링을 나타내는 식별자 핵산 분자의 제2 풀이 획득되며, 각각의 카운터 심볼은 비트 스트링 L에서 매 w 비트마다, '1'의 특정 비트 값을 갖는 비트 수의 러닝 카운트를 나타내는 b 카운터 비트의 스트링에 의해 나타내어진다. 프로브 시리즈를 이용해 제2 풀로부터 비트 스트링 L 내 '1'의 비트 값의 총 등장 횟수에 대해 카운터 심볼을 나타내는 식별자 핵산 분자가 액세스된다. 제2 풀로부터의 액세스된 식별자 핵산 분자가 읽혀 비트 스트링 L 내 '1'의 비트 값의 총 등장 횟수를 카운팅할 수 있다. 각각의 비트 값의 총 등장 횟수는 메시지의 버로우즈-휠러 변환 행렬의 제1 열 F를 재구성하기 위한 것이다. 제1 열 F에서 h 및 z를 포함하는 p번째 비트 값의 범위를 정의하는, 첫 번째 위치 h와 마지막 위치 z가 결정된다. 제1 프로브 시리즈를 이용해 제1 풀 및 제2 풀로부터 식별자 핵산 분자가 액세스되어, L 내 위치 h-1에서의, 패턴의 (p-i)번째 비트 값의 순위 rh-1를 계산할 수 있고, 이때 i=1이다. 제2 프로브 시리즈를 이용해 제1 풀 및 제2 풀로부터 식별자 핵산 분자이 액세스되어, L 내 위치 z 에서의, 패턴의 (p-i) 번째 비트 값의 순위 rz를 계산할 수 있다.
rh-1이 rz와 동일한 경우, 메시지 내 패턴의 등장 횟수 카운트가 0으로 설정된다. 그렇지 않고 rh-1가 rz와 동일하지 않는 경우, h는 F 내 (p-i)번째 비트 값의 (rh-1+1)번째 인스턴스의 인덱스로 설정된다. z가 F 내 (p-i)번째 비트 값의 rz번째 인스턴스의 인덱스로 설정된다. 루프 카운터 i는 1씩 증분되고 액세스 및 인덱싱 단계는 i=p-1이 될 때까지 여러 번 반복된다. 메시지에서의 패턴의 등장 횟수 카운트가 z-h+1로 계산된다. 본 접근 방식에 의해 제공되는 적어도 하나의 이점은 데이터세트에서 모든 비트를 판독하지 않고, 큰 데이터세트에서 검색이 수행될 수 있고, 대신, 본 개시내용은 선택적 액세스 및 순위화 작업을 통해 패턴의 등장을 논리적으로 찾는다. 본 명세서에 제공된 또 다른 이점은 실행 시간을 최소화하고 처리량을 증가시키기 위해 액세스 및 순위화 작업이 제1 및 제2 풀에서 병렬로 수행될 수 있다는 것이다.
제1 풀은 제2 풀과 동일하거나 제2 풀과 별개일 수 있다. 일부 구현예에서, 메시지의 버로우즈-휠러 변환으로부터 도출되는 접미부 배열을 나타내는 식별자 핵산 분자의 제3 풀이 획득되고, 접미부 배열의 각각의 원소는 메시지 내 L의 대응하는 원소의 위치를 나타내는 적어도 log2(n) 비트의 비트 스트링에 의해 나타내어진다. 시스템 및 방법은 카운트가 0보다 클 때, h 및 z에 대한 최종 값 사이의 그리고 상기 최종 값을 포함하는 범위 내 위치에서 접미부 배열 내 원소에 대응하는 제3 풀 내 식별자 핵산 분자를 액세스함으로써, 메시지 내 패턴의 등장을 찾을 수 있다. 일부 구현예에서, 메시지를 나타내는 식별자 핵산 분자의 제4 풀이 획득된다. 시스템 및 방법은 제1 위치 및 상기 제1 위치 주위의 이웃 위치에 대응하는 제4 풀 내 식별자 핵산 분자를 액세스함으로써 패턴의 제1 위치의 콘텍스트를 더 추출할 수 있다.
일부 구현예에서, 제1 풀에서의 대응하는 식별자 핵산 분자의 존재는 1의 비트 값을 나타내고, 제1 풀에서의 대응하는 식별자 핵산 분자의 부재는 0의 비트 값을 나타낸다. b는 log2(n+1)의 천장값과 동일할 수 있다. 카운터 심볼의 스트링은 n 나누기 w 카운터 심볼의 천장값을 포함할 수 있고, n 나누기 w의 천장값을 b에 곱한 값에 대응하는 길이를 갖는 카운터 비트 스트링으로 나타내어진다. L 내 w 비트의 제1 블록을 선행하는 비트 값의 러닝 카운트는 0이다. w는 b 또는 1의 값으로 설정될 수 있다. 시스템 및 방법은 비트 스트링 L 내 비트의 블록을 제1 풀 내 인접하게 순서화된 식별자 핵산 분자의 블록으로 매핑할 수 있다. 비트 스트링 L 중 고정 길이 서브스트링이 고유 식별자 핵산 분자의 고정 크기 세트로부터 선택된 고정 개수의 고유 식별자 핵산 분자에 의해 나타내어지는 코드워드로 매핑될 수 있다. 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 쓰고, 액세스하고 읽는 에러를 검출하고 정정하도록 추가 정보가 이용되고, 추가 정보는 식별자에 저장될 수 있다.
일부 양태에서, 메시지 내 길이 p의 특정 비트 패턴의 카운트를 획득하기 위한 시스템 및 방법이 본 명세서에 제공된다. 시스템 및 방법은 비트 스트링 L을 나타내는 식별자 핵산 분자의 제1 풀을 획득하고, 비트 스트링 L은 메시지의 버로우즈-휠러 변환 행렬(Burrows-Wheeler Transform matrix)의 마지막 열이고, 제1 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성된다. 비트 스트링 L로부터 얻어진 카운터 심볼의 스트링을 나타내고 특정 비트 값을 갖는 비트의 개수의 러닝 카운트를 나타내는 식별자 핵산 분자의 제2 풀이 획득된다. 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 선택적으로 액세스함으로써, 메시지 내 특정 비트 패턴의 카운트가 획득된다. 본 접근 방식에 의해 제공되는 적어도 하나의 이점은 데이터세트에서 모든 비트을 판독하지 않고, 큰 데이터세트에서 검색이 수행될 수 있고, 대신, 본 개시내용은 선택적 액세스 및 순위화 작업을 통해 패턴의 등장을 논리적으로 찾는다. 본 명세서에 제공된 또 다른 이점은 실행 시간을 최소화하고 처리량을 증가시키기 위해 액세스 작업이 제1 및 제2 풀에서 병렬로 수행될 수 있다는 것이다.
일부 양태에서, 길이 ns의 심볼 스트링을 포함하는 메시지 내 길이 ps의 특징 심볼 패턴의 카운트를 획득하기 위한 시스템 및 방법이 본 명세서에 제공되며, 각각의 심볼은 r개의 심볼 값의 세트로부터 선택된다. 시스템 및 방법은 메시지의 버로우즈-휠러 변환(Burrows-Wheeler Transform) 행렬의 마지막 열인 일련의 심볼 L을 나타내는 식별자 핵산 분자의 제1 풀을 얻습니다. 제1 풀은 분말, 액체 또는 고체 형태를 가지며, 각각 구성요소 핵산 분자를 포함하는 제1 풀 내의 식별자 핵산 분자로서, 이의 적어도 일부는 하나 이상의 프로브에 결합하도록 구성되어 있다. 시스템 및 방법은 식별자 핵산 분자의 r개의 제2 풀을 더 획득하고, 제2 풀 각각은 L로부터 얻어지고 대응하는 심볼 값 Rv을 갖는 L 내 심볼의 개수의 러닝 카운트를 나타내는 카운터 심볼의 스트링 Cv에 대응하며, 이때, v=1,2, ..., r이다. 시스템 및 방법은 제1 풀 및 r개의 제2 풀로부터 식별자 핵산 분자를 선택적으로 액세스함으로써, 메시지 내 길이 ps의 특정 심볼 패턴의 카운트를 획득한다. 본 접근 방식에 의해 제공되는 적어도 하나의 이점은 데이터세트에서 모든 비트를 판독하지 않고, 큰 데이터세트에서 검색이 수행될 수 있고, 대신, 본 개시내용은 선택적 액세스 작업을 통해 패턴의 등장을 논리적으로 찾는다. 본 명세서에 제공된 또 다른 이점은 실행 시간을 최소화하고 처리량을 증가시키기 위해 액세스 작업이 제1 및 제2 풀에서 병렬로 수행될 수 있다는 것이다.
일부 구현예에서, 본원 발명은 버로우즈-휠러 변환 행렬의 제1 열 F를 재구성하는 것을 포함한다. 프로브 시리즈를 이용해, L 내 각각의 대응하는 심볼 값 Rv의 총 등장 횟수를 나타내는 r개의 제2 풀 각각에서 마지막 카운터 심볼로부터 식별자 핵산 분자가 액세스될 수 있고, 각각의 대응하는 심볼 값 Rv의 총 등장 횟수를 이용해 F가 재구성된다. 패턴 내 p번째 심볼 값을 갖는 F 내 위치의 범위가 결정될 수 있다. 일부 구현예에서, 본원 발명은 제1 풀 및 대응하는 제2 풀로부터 식별자 핵산 분자를 액세스하도록 프로브 시리즈를 이용해, 상기 범위에 바로 선행하는 위치에서 L 내 대응하는 심볼 값의 제1 순위 및 범위의 종단 위치에 있는 L 내 대응하는 심볼 값의 제2 순위를 결정하는 것, 및 제1 순위 및 제2 순위를 이용해 범위를 패턴 내 다음 심볼에 선행하는 대응하는 심볼의 인스턴스를 갖는 F 내 위치의 범위로 업데이트하는 것을 포함한다.
일부 구현예에서, 제1 순위 rh-1는 L 내 위치 h-1에서 패턴 내 각자의 선행하는 심볼 값을 가지며, 제2 순위 rz는 L 내 위치 z에서 패턴 내 각자의 선행하는 심볼 값을 가진다. 메시지 내 패턴의 등장의 카운트가 제1 순위 및 제2 순위의 최종 값에 기초하여 결정될 수 있다. 예를 들어 카운트는 제1 순위의 최종 값과 제2 순위의 최종 값 간 차이이다. 제1 순위와 제2 순위가 동일한 것으로 결정되면 카운트는 0으로 설정될 수 있다.
일부 구현예에서, 메시지의 버로우즈-휠러 변환으로부터 도출되는 접미부 배열 SA를 나타내는 식별자 핵산 분자의 풀, SA 풀을 획득하는 단계를 더 포함하고, SA의 각각의 원소는 메시지 내 L의 대응하는 원소의 위치를 나타내는 적어도 log2(n) 비트의 비트 스트링에 의해 나타내어진다. 방법 및 시스템은 카운트가 0보다 크다고 가정할 때, F 내 위치의 최종 범위에 의해 주어진 위치의 SA의 원소에 대응하는 SA 풀 내 식별자 핵산 분자를 액세스함으로써, 메시지 내 패턴의 등장을 찾을 수 있다. 본원 발명은, 메시지를 나타내는 식별자의 메시지 풀을 획득하하여, 제1 위치 및 상기 제1 위치 주위의 이웃 위치에 대응하는 메시지 풀 내 식별자 핵산 분자를 액세스함으로써 패턴의 제1 위치의 콘텍스트를 추출하는 것을 포함할 수 있다.
일부 구현예에서, 식별자 핵산 분자의 제1 풀은 r개의 제1 풀 중 하나이고, 제1 풀 각각은 비트 스트링 Lv에 대응하며, v=1,2,...,r이고, Lv의 원소가 심볼 값 Rv과 매칭되는 L의 원소에 대해 '1'의 비트-값을 갖고 매칭되지 않는 원소에 대해 '0'의 비트-값을 갖거나, 그 반대이다. 예를 들어, Lv에 대응하는 제1 풀이 패턴 내 심볼 값 Rv의 제1 및 제2 순위를 결정하는 데 사용된다.
일부 양태에서, 핵산 분자에 저장된 디지털 정보를 조작하기 위한 시스템 및 방법이 본 명세서에 제공된다. 시스템 및 방법은 식별자 핵산 분자의 제1 풀을 획득하고, 상기 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성되고, 식별자 핵산 분자는 심볼의 입력 스트링을 나타낸다. 제1 풀 내 식별자 핵산 분자에 대해 if-then-else 연산이 수행되며 if-then-else 연산은 상기 제1 풀로부터의 식별자 핵산 분자의 서브세트를 갖는 중간 풀을 생성하도록 프로브로 구성요소 핵산 분자 중 적어도 하나를 표적으로 한다. If-then-else 연산이 반복되며, 심볼의 출력 스트링의 적어도 일부분을 나타내는 식별자 핵산 분자의 최종 풀이 생성될 때까지 중간 풀은 모든 다음 단계마다 제1 풀을 대체한다.
이 접근 방식을 사용하면 조건부 프로그램이 작성될 수 있다. 예를 들어, 각각의 "if" 연산이 하나 이상의 식별자의 존재 또는 부재를 테스트하고, 존재 또는 부재에 따라 "then" 또는 "else" 분기로 계속 진행된다. 연산은 다수의 조건 및 대응하는 분기를 포함할 수 있다. 연산의 모든 분기로부터 출력이 생성될 수 있다. 이 접근법은 복수의 식별자 라이브러리(가령, 테라비트 규모)의 모든 식별자가 병렬로 작동되도록 한다. 예를 들어 라이브러리가 수십억 개의 데이터 객체를 인코딩하는 경우, 각각의 객체를 검사하고 출력을 생성하는 복잡한 함수를 DNA 기반 프로그램으로 설계하고 라이브러리에서 병렬로 실행할 수 있다.
본 개시내용은 원하는 프로그램의 실행을 위해 식별자 라이브러리를 다수의 입력 식별자 라이브러리로 재배열하는 비트를 이동, 복사 및 이동하는 전략을 포함한다. 물리적으로, 각각의 if-then-else 연산은 입력 라이브러리를 두 개의 출력 라이브러리로 변환하는 반응에서 발생할 수 있으며 해당 라이브러리의 모든 식별자에 걸쳐 다중화될 수 있다. 하나의 연산의 출력 라이브러리는 예를 들어 유체 전달(fluidic transfer)을 통해 다른 연산의 입력으로 전달될 수 있다. RAM 및 프로세싱 파워에 의해 제한되는 기존의 하드웨어와 달리, 본 명세서에 기재된 DNA 플랫폼은 저전력으로 대량의 입력 데이터 개체에 걸쳐 동시에 프로그램을 실행할 수 있다.
식별자는 M개의 레이어 각각과 구별되는 구성요소를 포함할 수 있으며, 각각의 레이어는 구성요소 세트를 포함한다. 프로브는 PCR 프라이머 또는 친화성 태깅된 올리고뉴클레오티드일 수 있으며, 이에 따라 액세스는 각각 PCR 또는 친화성 풀다운 분석을 통해 수행된다. 일부 구현예에서, if-then-else 연산은 특정 구성요소 핵산 분자를 포함하는 풀 내 식별자 핵산 분자를 액세스하는 것을 포함한다. 연산은 제1 풀, 중간 풀, 또는 최종 풀 중 적어도 하나를 (예를 들어, PCR을 통해) 적어도 2개의 복제 풀로 분할 또는 복제하고, 적어도 2개의 중간 풀을 결합하여 새로운 중간 풀 또는 제2 풀을 형성하거나, 둘 모두일 수 있다. 둘 이상의 if-then-else 연산은 하나 이상의 풀에서 병렬로 실행될 수 있다.
일부 양태에서, 본 명세서에 기재된 방법 중 임의의 방법을 수행하도록 구성된 시스템이 본 명세서에 제공된다. 시스템은 기질 상의 개별 위치(가령, 반응 구획)에 DNA 구성요소을 분배하고, 시약을 분배하여 결찰 반응을 위한 최적의 조건을 제공하고, 라이브러리를 구성하는 모든 DNA 식별자를 풀링하도록 구성된 프린터 피니셔 시스템(printer-finisher system)일 수 있다. 시스템은 (가령, 자동화된 액체 처리를 통해) 컨테이너에 핵산 분자를 저장하고 조작할 수 있다. 시스템은 핵산 분자의 서브세트를 액세스하기 위해 구획 또는 컨테이너에 프로브를 분배할 수 있다. 시스템은 핵산 분자의 풀을 분취하고 복제하도록 구성될 수 있다.
일부 양태에서, 본 명세서에 기재된 임의의 방법에 따른 디지털 정보를 나타내는 핵산 분자를 포함하는 조성물이 본 명세서에 제공된다. 조성물은 구성요소 핵산 분자를 포함하는 식별자 핵산 분자를 포함한다. 식별자 핵산 분자는 풀에 수집되어 디지털 정보에 매핑될 수 있다. 예를 들어, 식별자의 존재는 심볼 스트링 내 특정 비트 또는 심볼 값을 나타내고 식별자의 부재는 심볼 스트링 내 또 다른 비트 또는 심볼 값을 나타낸다.
본 발명의 특성 및 다양한 이점을 포함하는 본 개시내용의 상기 및 기타 특징은 첨부 도면과 함께 취해진 다음의 상세한 설명을 고려하면 더욱 명백해질 것이다.
도 1은 핵산 서열에 저장된 디지털 정보를 인코딩, 기록, 액세스, 쿼리, 판독 및 디코딩하기 위한 프로세스의 개요를 개략적으로 예시한다.
도 2a 및 2b는 객체 또는 식별자(예를 들어, 핵산 분자)를 사용하여, "주소에서의 데이터"로 지칭되는 디지털 데이터를 인코딩하는 예시적인 방법을 도식적으로 예시한다. 도 2a는 식별자를 생성하기 위해 순위 객체(또는 주소 객체)를 바이트-값 객체(또는 데이터 객체)와 결합하는 것을 예시한다. 도 2b는 순위 객체 및 바이트-값 객체 자체가 또 다른 객체의 조합적 연결인 주소 지정 방법에서의 데이터의 구현을 예시한다.
도 3a 및 3b는 객체 또는 식별자(예를 들어, 핵산 서열)를 사용하여 디지털 정보를 인코딩하는 예시적인 방법을 도식적으로 예시한다. 도 3a는 순위 객체를 식별자로서 이용하는 디지털 정보 인코딩을 예시한다. 도 3b는 주소 객체 자체가 다른 객체의 조합적 연결인 인코딩 방법의 구현을 예시한다.
도 4는 가능한 식별자의 조합 공간(C, x-축)과 주어진 크기(등고선)의 정보를 저장하도록 구성될 수 있는 평균 개수의 식별자(k, y-축) 간 관계의 등고선 플롯을, 로그 공간에서 도시한다.
도 5는 정보를 핵산 서열(가령, 데옥시리보핵산)에 기록하기 위한 방법의 개요를 도식적으로 예시한다.
도 6a 및 6b는 구별되는 구성요소(가령, 핵산 서열)를 조합적으로 조립함으로써 식별자(예를 들어, 핵산 분자)를 구성하기 위한, "제품 구성표"로 지칭되는 예시적인 방법을 예시한다. 도 6a는 제품 구성표를 사용하여 구성된 식별자의 아키텍처를 도시한다. 도 6b는 제품 구성표를 사용하여 구성될 수 있는 식별자의 조합적 공간의 예를 도시한다.
도 7은 구성요소(예를 들어, 핵산 서열)로부터 식별자(예를 들어, 핵산 분자)를 구성하기 위한 중첩 연장 중합효소 연쇄 반응의 사용을 도식적으로 예시한다.
도 8은 구성요소(가령, 핵산 서열)로부터 식별자(가령, 핵산 분자)를 구성하기 위한 점착성 말단 결찰의 사용을 도식적으로 예시한다.
도 9는 구성요소(가령, 핵산 서열)로부터 식별자(가령, 핵산 분자)를 구성하기 위한 재조합효소 조립의 사용을 도식적으로 예시한다.
도 10a 및 10b는 주형 지정 결찰을 보여준다. 도 10a는 구성요소(예를 들어, 핵산 서열)로부터 식별자(예를 들어, 핵산 분자)를 구성하기 위한 주형 지정 결찰의 사용을 도식적으로 예시한다. 도 10b는 하나의 풀링된 주형 지정 결찰 반응에서 6개의 핵산 서열(가령, 구성요소)로부터 각각 조합적으로 조립된 256개의 구별되는 핵산 서열의 복제 수(풍부함)의 히스토그램을 도시한다.
도 11은 식별자의 트라이에 따라 구획으로 용액을 분배하는 도면을 도시한다.
도 12는 레이어별로 구성된 운영 체제의 시스템 다이어그램을 도시한다.
도 13은 3개의 레이어 및 8개의 구성요소의 구성요소 라이브러리를 갖는 계층화된 제품 구성자의 시스템 다이어그램을 도시한다.
도 14는 아카이브 작업의 시스템 다이어그램을 도시한다.
도 15는 데이터 블록을 컨테이너에 저장하기 위한 흐름도를 도시한다.
도 16은 스트링의 버로우즈-휠러(Burrows-Wheeler) 변환을 도시한다.
도 17은 버로우즈-휠러 행렬에 대한 접미부 배열을 도시한다.
도 18은 핵산에 저장된 버로우즈-휠러 변환의 그래픽 예를 보여준다.
도 19는 핵산에 저장된 카운터 배열의 그래픽 예를 보여준다.
도 20은 쿼리 트리의 그래픽 예를 도시한다.
도 21은 이진 트리에서 식별자의 연속 범위의 분해의 그래픽 예를 도시한다.
도 22는 쿼리 트리를 쿼리 지향 비순환 그래프로 변환하는 그래픽 예를 도시한다.
도 23은 이진 스트링에 대한 순위화 연산의 실행의 그래픽 예를 도시한다.
도 24는 순위화 연산의 실행을 위한 흐름도를 도시한다.
도 25는 인출 동작의 실행을 위한 흐름도를 도시한다.
도 26은 이진 스트링에 대한 카운트 연산의 실행을 위한 흐름도를 도시한다.
도 27은 이진 스트링에 대한 카운트 연산을 위한 흐름도를 도시한다.
도 28은 도 29의 방법의 단계를 실행하기 위한 흐름도를 도시한다.
도 29는 임의의 스트링에 대한 카운트 연산의 실행을 위한 흐름도를 도시한다.
도 30은 LF-매핑을 위한 흐름도를 도시한다.
도 31은 버로우즈-휠러 변환으로부터 스트링을 재구성하기 위한 흐름도를 도시한다.
도 32는 카운트 연산을 위한 흐름도를 도시한다.
도 33은 if-then-else 연산을 위한 흐름도를 도시한다.
본 명세서에 기재된 조립 및 방법의 완전한 이해를 제공하기 위해, 특정 예시적 구현 형태가 기재될 것이다. 본 명세서에 기재된 구현 및 기능은 구성요소 핵산 분자로 구성된 식별자 핵산 분자의 데이터 저장에 대해 구체적으로 설명되어 있지만, 아래에 설명된 모든 양태 및 기타 기능은 임의의 적절한 방식으로 서로 결합될 수 있으며, 다른 형태의 DNA-기반 데이터 저장소에 적응 및 적용될 수 있다.
디지털 정보를 인코딩하기 위한 핵산의 염기별 합성은 비용이 많이 들고 시간이 많이 소요될 수 있는데, 이는 일반적으로 모든 새로운 정보 저장 요청에 대해 구별되는 핵산 서열의 신규 염기별 합성(가령, 포스포라미다이트 합성)을 필요로 하기 때문이다. 본 개시내용은 염기별 또는 신규 합성에 의존하지 않고 대신에 구성요소(또는 구성요소 핵산 서열)의 조합 배열을 포함하는 복수의 식별자 또는 핵산 서열의 디지털 정보를 인코딩하는 시스템 및 방법에 관한 것이다. 이러한 방식으로, 본 개시내용의 시스템 및 방법은 디지털 정보 저장의 효율성 및 상업적 실행 가능성을 개선한다.
본 개시내용은 정보 저장의 첫 번째 요청에 대해 구별되는 핵산 서열(또는 구성요소)의 제1 세트를 생성하고, 그런 다음, 후속 정보 저장 요청에 대해 동일한 핵산 서열(또는 구성요소)을 재사용할 수 있는 방법을 설명한다. 이러한 접근 방식은 정보-DNA 인코딩 및 기록 프로세스에서 핵산 서열의 신규 합성의 역할을 줄임으로써 DNA-기반 정보 저장 비용을 크게 줄인다.
또한, 각각의 연장되는 핵산에 대한 각 염기의 주기적 전달을 사용하는 포스포라미다이트 화학 기반 또는 주형이 없는 중합효소 기반 핵산 연장과 같은 염기별 합성의 구현과 달리, 본 개시내용의 시스템 및 방법은 주기적 핵산 연장을 반드시 사용하지 않는 고도로 병렬화 가능한 프로세스이며 구성요소로부터의 식별자 구성을 이용하는 정보-DNA 기록과 관련된다. 따라서, 본 개시내용은 다른 방법에 비해 DNA에 디지털 정보를 기록하는 속도를 증가시킨다. 디지털 정보를 핵산 분자에 기록하는 다양한 시스템 및 방법이 "NUCLEIC ACID-BASED DATA STORAGE"라는 명칭으로 2017년 12월 21일자로 출원된 미국 특허 번호 10,650,312 (DNA의 디지털 정보를 인코딩하는 것을 기술함), "SYSTEMS FOR NUCLEIC ACID-BASED DATA STORAGE"라는 명칭으로 2019년 5월 16일에 출원된 미국 출원 번호 16/461,774 (미국 공개 번호 2019/0362814)(DNA-기반 데이터 저장소에 대한 인코딩 방식을 기술함), "COMPOSITIONS AND METHODS FOR NUCLEIC ACID-BASED DATA STORAGE"라는 명칭으로 2019년 5월 16일에 출원된 미국 출원 번호 16/414,758, 및 "SYSTEMS AND METHODS FOR STORING AND READING NUCLEIC ACID-BASED DATA WITH ERROR PROTECTION"라는 명칭으로 2019년 8월 5일에 출원된 미국 출원 번호 16/532,077 (DNA 인코딩을 위한 데이터 구조 및 에러 보호 및 정정을 기술함)에 기재되어 있으며, 이들 각각은 그 전체가 본 명세서에 참조로서 포함된다.
이하의 설명은 핵산 분자의 데이터를 인코딩하기 위한 다양한 시스템 및 방법의 개요로 시작하고, 도 1-10과 관련하여 기재될 바와 같이, 디지털 데이터를 인코딩하는 핵산 분자 인쇄 및 저장을 위해 구성된 다양한 기록 및 보관 시스템을 기재한다. 그런 다음, 본 개시는 도 11-14와 관련하여 다양한 인코딩 방법을 기재한다. 본 개시내용은 상기 참조된 특허 출원에 기재된, 핵산 분자에서 디지털 정보를 기록하고 판독하는 방법의 개선에 관한 것이다. 특히, 데이터 구조를 사용하여 디지털 정보를 표현하는 것이 디지털 정보의 특정 특성을 정의하고 DNA에서 쉽게 액세스될 수 있도록 하는 방식으로 이들을 구성함으로써, DNA에서 정보를 판독하는 효율성을 높일 수 있다.
하나의 예로서, 큰 데이터 스트링이 둘 이상의 서브스트링으로 분리되고, 각각의 서브스트링은 자체 컨테이너에 배치되는 개별 핵산 분자 풀에 저장된다. 원하는 정보가 포함된 컨테이너를 결정하는 한 가지 방법은 위치(가령, 컨테이너 번호 또는 배치)를 식별하는 데이터 구조(가령, B-트리 또는 트라이(trie) 구조)를 액세스하는 것이다. 어떤 컨테이너가 관련이 있는지를 참조하기 위해 데이터 구조를 사용함으로써 사용자는 정보가 관련이 있는지 판단하기 전에 각각의 컨테이너의 정보를 하나씩 판독하는 대신 원하는 정보가 포함된 컨테이너만 액세스할 수 있다. 이는 핵산 분자의 데이터 스트링에 있는 관련 정보를 액세스하는 효율성을 향상시킨다.
상기 예시의 확장으로서, 사용자가 액세스하기를 원하는 관련 정보가 컨테이너의 풀 내 핵산 분자의 서브세트에서만 나타나거나 이로부터만 계산 가능할 수 있다. 이 경우, 본 개시내용은 핵산 분자의 전체 풀에 저장된 모든 정보를 액세스할 필요 없이, 분자의 특정 서브세트만 액세스하는 방식을 제공한다. 이렇게 하는 것이 효율을 증가시키고 비용을 감소시킬 것이다. 풀 내 핵산 분자의 희망 서브세트만 액세스하기 위한 한 가지 방식이 풀 내 핵산 분자의 특정 서브세트를 표적으로 하는 데 사용될 수 있는 정보를 저장하는 데이터 구조(가령, 트라이 구조의 B-트리)를 참조하는 것이다. 하나의 풀에서(또는 상이한 컨테이너 내 상이한 풀에 걸쳐) 핵산 분자의 특정 서브세트를 액세스 및 검색하는 데 사용될 수 있는 특정 데이터 구조의 예시가 도 15-19와 관련하여 기재된다. 또한, 본 개시내용은 핵산 분자에 저장된 데이터에 특정 작업, 가령, 검색, 위치찾기, 및 추출 기능을 효율적으로 수행하기 위해 데이터 구조를 의존하는 시스템 및 방법과 관련된다. 특히, 가령, 판독, 액세스, 및 순위화 같은 작업을 수행하기 위해 핵산 분자에 저장된 특정 데이터 부분을 액세스하기 위해 데이터 구조에 의존하는 예시적 시스템 및 방법은 도 20-25과 관련하여 기재되며, 가령, 핵산 분자에 저장된 데이터로부터 특정 패턴 또는 쿼리를 검색, 위치찾기, 및 추출하는 등의 작업을 수행하기 위해 핵산 분자에 저장된 특정 데이터 부분을 액세스하기 위해 데이터 구조에 의존하는 시스템 및 방법은 도 26-32와 관련하여 기재되어 있다. 마지막으로, 논리적 if-then-else 연산이 도 33과 관련하여 기재된다.
일반적으로, 본 개시 내용은 데이터(1 또는 0 비트의 스트링, 또는 각각의 심볼이 2개보다 많은 심볼 값의 세트로부터 선택되는 심볼 스트링으로 표현됨)를 핵산 서열(또는 식별자 서열)의 세트로 인코딩하며, 각각의 고유 식별자 서열이 스트링에서 대응하는 비트 또는 심볼을 가진다. 식별자 서열은 스트링 내 비트 또는 심볼의 위치, 이의 값, 또는 위치와 값 둘 모두를 인코딩한다. 본 개시내용의 시스템 및 방법을 구현하는 한 가지 방법은, 도 1-11과 관련하여 논의될 바와 같이, (구성요소 서열에 의해 나타난) 미리 만들어진 DNA 구성요소 분자를 정의된 레이어에 기초하여 순서화된 방식으로 결찰함으로써, 식별자 서열에 의해 나타내어지는 각각의 식별자 핵산 분자(또는 식별자 분자)를 생성하는 것이다. 특히, 상이한 레이어의 구성요소 서열은 레이어에 걸쳐 조합적으로 결합되고(가령, 레이어당 하나의 구성요소 서열이 선택됨) 연결(가령, 결찰)되어 스트링 내 각각의 심볼 또는 비트에 일대일로 매핑되는 식별자 서열을 형성할 수 있다.
일반적으로, 구성요소 핵산 서열은 상기 서열을 포함하는 모든 식별자를 선택하는 데 사용될 수 있는 하나 이상의 프로브에 결합되도록 구성된다. 예를 들어, 구성요소는 20개의 염기의 표적 서열을 포함할 수 있고 프로브는 표적 서열을 결합하기 위한 상보적 20개 염기 올리고뉴클레오타이드를 포함할 수 있다.본 개시내용에서 설명된 바와 같이, 각각이 고유한 프로브에 결합할 수 있는 구성요소로부터의 식별자 핵산 서열의 조성이 저장된 데이터를 액세스하고 조작할 때 유익한 기능을 제공한다. 본 명세서에 제시된 식별자를 생성하는 방법이 구성요소를 포함하는 식별자를 생성하도록 특별히 구성되어 있지만, 이러한 식별자 핵산 분자는 다수의 대체 방법을 통해 형성될 수 있음을 이해해야 한다. 예를 들어, 길이 100개의 염기의 핵산 서열을 생성하는 신규한 합성이 사용되어 각각의 식별자가 20개 염기의 5개 구성요소를 각각 포함하는 식별자 핵산 서열을 생성할 수 있다. 염기의 모든 조합이 합성에 사용될 수 있는 경우, 각각의 구성요소에 대해 최대 420개의 가능한 서열이 있을 수 있다.
본 명세서에 사용된 용어 "심볼"은 일반적으로 디지털 정보 단위의 표현을 지칭한다. 디지털 정보는 심볼의 스트링으로 분할되거나 번역될 수 있다. 하나의 예에서, 심볼은 비트일 수 있고 비트는 '0' 또는 '1'의 값을 가질 수 있다.
본 명세서에서 사용될 때, 용어 "구별되는(distinct)" 또는 "고유한(unique)"은 일반적으로 그룹 내의 다른 대상과 구별될 수 있는 대상을 지칭한다. 예를 들어, 구별되는 또는 고유한 핵산 서열은 임의의 다른 핵산 서열과 동일한 서열을 갖지 않는 핵산 서열일 수 있다. 구별되는 또는 고유한 핵산 분자는 임의의 다른 핵산 분자와 동일한 서열을 갖지 않을 수 있다. 구별되는 또는 고유한 핵산 서열 또는 분자는 다른 핵산 서열 또는 분자와 유사한 영역을 공유할 수 있다.
본 명세서에서 사용될 때, 용어 "구성요소(component)"는 일반적으로 핵산 서열 또는 핵산 분자를 지칭한다. 구성요소는 구별되는 핵산 서열을 포함할 수 있다. 구성요소는 다른 핵산 서열 또는 분자를 생성하기 위해 하나 이상의 다른 구성요소와 연결되거나 조립될 수 있다.
본 명세서에 사용될 때, 용어 "레이어(layer)"는 일반적으로 구성요소의 그룹 또는 풀을 지칭한다. 각각의 레이어는 한 레이어의 구성요소가 다른 레이어의 구성요소와 상이하도록 구별되는 구성요소 세트를 포함할 수 있다. 하나 이상의 레이어의 구성요소가 조립되어 하나 이상의 식별자를 생성할 수 있다.
본 명세서에서 사용될 때 용어 "식별자"는 일반적으로 더 큰 비트-스트링 내에서 비트-스트링의 위치 및 값을 나타내는 핵산 분자 또는 핵산 서열을 지칭한다. 보다 일반적으로, 식별자는 심볼 스트링 내 하나의 심볼을 나타내거나 이에 대응하는 임의의 객체를 지칭할 수 있다. 일부 구현예에서, 식별자는 하나 또는 다수의 연결된 구성요소를 포함할 수 있다.
본 명세서에 사용될 때, 용어 "조합 공간(combinatorial space)"은 일반적으로 구성요소와 같은 객체의 시작 세트로부터 생성될 수 있는 모든 가능한 구별되는 식별자의 세트 및 식별자를 형성하기 위해 이들 객체를 수정하는 방식에 대한 허용 가능한 규칙 세트를 지칭한다. 구성요소들을 조립하거나 연결하여 만들어진 식별자의 조합 공간의 크기는 구성요소의 레이어의 수, 각각의 레이어 내 구성요소의 수, 식별자를 생성하는 데 사용되는 특정 조합 방법에 따라 달라질 수 있다.
본 명세서에서 사용될 때, 용어 "식별자 순위(identifier rank)"는 일반적으로 세트에서의 식별자의 순서를 정의하는 관계를 지칭한다.
본 명세서에서 사용될 때 "식별자 라이브러리"라는 용어는 일반적으로 디지털 정보를 나타내는 심볼 스트링 내 심볼에 대응하는 식별자의 모음을 지칭한다. 일부 구현예에서, 식별자 라이브러리에서의 주어진 식별자의 부재는 특정 위치에서의 심볼 값을 나타낼 수 있다. 하나 이상의 식별자 라이브러리가 풀, 그룹 또는 식별자 집합에서 결합될 수 있다. 각각의 식별자 라이브러리는 식별자 라이브러리를 식별하는 고유의 바코드를 포함할 수 있다.
본 명세서에서 사용될 때 용어 "프로브(probe)"는 일반적으로 표적 서열을 식별자 핵산 분자 상에 결합시키는 에이전트를 지칭한다. 표적 서열은 구성요소의 일부일 수 있다. 프로브는 자신의 표적 서열과 일치하거나 상보 관계인 서열을 포함할 수 있다. 프로브는 상기 표적 서열을 포함하는 모든 식별자 핵산 분자를 단리하기 위해 추가로 사용될 수 있다. 예를 들어, 프로브는 표적 서열을 포함하는 모든 식별자 핵산 분자를 풍부하게 하는 PCR 반응의 프라이머일 수 있다. 대안으로, 프로브는 올리고뉴클레오타이드에 대응하는 서열을 갖는 모든 식별자 핵산 분자를 선택하는 데 사용될 수 있는 친화성 태깅된 올리고뉴클레오타이드 분자를 함유할 수 있다.
본 명세서에서 사용될 때 용어 "핵산"은 일반적으로 데옥시리보핵산(DNA), 리보핵산(RNA), 또는 이들의 변이체를 지칭한다. 핵산은 아데노신(A), 시토신(C), 구아닌(G), 티민(T) 및 우라실(U), 또는 이들의 변이체로부터 선택되는 하나 이상의 서브유닛을 포함할 수 있다. 뉴클레오티드는 A, C, G, T, 또는 U, 또는 이의 변이체를 포함할 수 있다. 뉴클레오티드는 성장하는 핵산 가닥에 포함될 수 있는 임의의 서브유닛을 포함할 수 있다. 이러한 서브유닛은 A, C, G, T, 또는 U, 또는 하나 이상의 상보적 A, C, G, T 또는 U에 특정적일 수 있는 그 밖의 다른 임의의 서브유닛, 또는 퓨린(즉, A 또는 G, 또는 이의 변이체) 또는 피리미딘(즉, C, T 또는 U, 또는 이의 변이체)에 상보적인 서브유닛일 수 있다. 일부 예에서, 핵산은 단일 가닥 또는 이중 가닥일 수 있으며, 일부 경우에 핵산은 원형이다.
본 명세서에서 사용될 때 용어 "핵산 분자" 또는 "핵산 서열"은 일반적으로 데옥시리보뉴클레오티드(DNA) 또는 리보뉴클레오티드(RNA)와 같은 다양한 길이를 가질 수 있는 중합체 형태의 뉴클레오티드 또는 폴리뉴클레오티드, 또는 이의 유사체를 지칭한다. "핵산 서열"이라는 용어는 뉴클레오티드의 순서를 정의하는 폴리뉴클레오티드의 알파벳순 표현을 지칭하며, "핵산 분자"라는 용어는 폴리뉴클레오티드 자체의 물리적 인스턴스를 지칭한다. 이 알파벳 표현은 중앙 처리 장치가 있는 컴퓨터의 데이터베이스에 입력할 수 있으며 핵산 서열 또는 핵산 분자를 디지털 정보를 인코딩하는 심볼 또는 비트에 매핑하는 데 사용할 수 있다. 핵산 서열 또는 올리고뉴클레오티드는 하나 이상의 비표준 뉴클레오티드(들), 뉴클레오티드 유사체(들) 및/또는 변형된 뉴클레오티드를 포함할 수 있다.
본 명세서에서 사용될 때 "올리고뉴클레오티드(oligonucleotide)"는 일반적으로 단일 가닥 핵산 서열을 지칭하며, 전형적으로 다음의 4개의 뉴클레오티드 염기의 특정 서열로 구성된다: 아데닌(A), 시토신(C), 구아닌(G), 및 티민(T) 또는 폴리뉴클레오티드가 RNA인 경우 우라실(U).
변형된 뉴클레오티드의 예는 변형된 뉴클레오티드의 예는 디아미노퓨린, 5-플루오로우라실, 5-브로모우라실, 5-클로로우라실, 5-요오도우라실, 하이포크산틴, 크산틴, 4-아세틸시토신, 5-(카르복시히드록실메틸)우라실, 5-카르복시메틸아미노메틸-2-티오우리딘, 5-카르복시메틸아미노메틸우라실, 디히드로우라실, 베타-D-갈락토실퀘오신, 이노신, N6-이소펜테닐아데닌, 1-메틸구아닌, 1-메틸이노신, 2,2-디메틸구아닌, 2-메틸아데닌, 2-메틸구아닌, 3-메틸시토신, 5-메틸시토신, N6-아데닌, 7-메틸구아닌, 5-메틸아미노메틸우라실, 5-메톡시아미노메틸-2-티오우라실, 베타-D-만노실퀘오신, 5'-메톡시카르복시메틸우라실, 5-메톡시우라실, 2-메틸티오-D46-이소펜테닐아데닌, 우라실-5-옥시아세트산(v), 와이부톡소신, 슈도우라실, 퀘오신, 2-티오시토신, 5-메틸-2-티오우라실, 2-티오우라실, 4-티오우라실, 5-메틸우라실, 우라실-5-옥시아세트산 메틸에스테르, 우라실-5-옥시아세트산 (v), 5-메틸-2-티오우라실, 3-(3-아미노-3-N-2-카르복시프로필)우라실, (acp3)w, 2,6-디아미노푸린 등을 포함하나, 이에 한정되는 않는다. 핵산 분자는 또한 염기 모이어티에서(가령, 상보적 뉴클레오티드와 수소 결합을 형성하는 데 일반적으로 이용 가능한 하나 이상의 원자 및/또는 일반적으로 상보적 뉴클레오티드와 수소 결합을 형성할 수 없는 하나 이상의 원자에서), 당 모이어티 또는 포스페이트 백본에서도 변경될 수 있다. 핵산 분자는 또한 아민 변형된 기, 가령, 아민 반응성 부분의 공유 부착을 허용하기 위해 아미노알릴-dUTP(aa-dUTP) 및 아미노헥실아크릴아미드-dCTP(aha-dCTP), 가령, N-히드록시 숙신이미드 에스테르(NHS)를 함유할 수 있다.
본 명세서에서 사용될 때 용어 "프라이머(primer)"는 일반적으로 핵산 합성, 가령, 중합효소 연쇄 반응(PCR)을 위한 시작점으로서 역할 하는 핵산의 가닥을 지칭한다. 예를 들어, DNA 샘플의 복제 동안, 복제를 촉매하는 효소는 DNA 샘플에 부착된 프라이머의 3'-말단에서 복제를 시작하고 반대쪽 가닥을 복사한다.
본 명세서에서 사용될 때 "중합효소(polymerase)" 또는 "중합효소(polymerase enzyme)"는 일반적으로 중합효소 반응을 촉매할 수 있는 임의의 효소를 지칭한다. 중합효소의 비제한적 예를 들면, 핵산 중합효소가 있다. 중합효소는 자연적으로 발생하거나 합성될 수 있다. 중합효소의 예는 Φ29 중합효소 또는 이의 유도체이다. 일부 경우에, 전사효소 또는 리가아제(즉, 결합 형성을 촉매하는 효소)가 중합효소와 함께 또는 중합효소의 대안으로서 사용되어 새로운 핵산 서열을 구성할 수 있다. 중합효소의 예로는 DNA 중합효소, RNA 중합효소, 열안정성 중합효소, 야생형 중합효소, 변형된 중합효소, E.coli DNA 중합효소 I, T7 DNA 중합효소, 박테리오파지 T4 DNA 중합효소 Φ29 (phi29) DNA 중합효소, Taq 중합효소, Tth 중합효소, Tli 중합효소, Pfu 중합효소 Pwo 중합효소, VENT 중합효소, DEEPVENT 중합효소, Ex-Taq 중합효소, LA-Taw 중합효소, Sso 중합효소 Poc 중합효소, Pab 중합효소, Mth 중합효소 ES4 중합효소, Tru 중합효소, Tac 중합효소, Tne 중합효소, Tma 중합효소, Tca 중합효소, Tih 중합효소, Tfi 중합효소, 백금 Taq 중합효소s, Tbr 중합효소, Tfl 중합효소, Pfutubo 중합효소, Pyrobest 중합효소, KOD 중합효소, Bst 중합효소, Sac 중합효소, 3' 내지 5' 엑소뉴클레아제 활성을 갖는 Klenow 단편 중합효소 및 이들의 변이, 변형 산물 및 유도체를 포함하나, 이에 한정되지는 않는다.
디지털 정보, 가령, 이진 코드 형태의 컴퓨터 데이터가 서열 또는 심볼 스트링을 포함할 수 있다. 이진 코드는 예를 들어 비트라고 하는 일반적으로 0과 1인 2개의 이진 심볼를 갖는 이진수 시스템을 사용하여 텍스트 또는 컴퓨터 프로세서 명령을 인코딩하거나 나타낼 수 있다. 디지털 정보는 비-이진 심볼의 서열을 포함할 수 있는 비-이진 코드의 형태로 표현될 수 있다. 각각의 인코딩된 심볼은 고유한 비트 스트링(또는 "바이트")에 재할당될 수 있으며 고유한 비트 스트링 또는 바이트는 바이트 또는 바이트 스트림의 스트링로 배열될 수 있다. 주어진 비트에 대한 비트 값은 두 개의 심볼(가령, 0 또는 1) 중 하나일 수 있다. N 비트의 스트링을 포함할 수 있는 바이트는 총 2N의 고유한 바이트-값을 가질 수 있다. 예를 들어, 8비트로 구성된 바이트는 총 28 즉 256개의 고유한 바이트 값을 생성할 수 있으며, 각각의 256바이트는 256개의 가능한 구별되는 심볼, 문자 또는 바이트로 인코딩될 수 있는 명령 중 하나에 대응할 수 있다. 원시 데이터(가령, 텍스트 파일 및 컴퓨터 명령)는 바이트 또는 바이트 스트림의 스트링으로 표현될 수 있다. Zip 파일, 또는 원시 데이터(raw data)로 구성된 압축 데이터 파일은 바이트 스트림에 저장할 수도 있고, 이들 파일은 압축된 형식의 바이트 스트림으로서 저장될 수 수 있고, 그런 다음 컴퓨터에 의해 판독되기 전에 원시 데이터로 압축해제될 수 있다.
용어 "인덱스(index)"와 "위치(position)"는 본 개시내용에서 상호교환가능하게 사용되는 것으로 이해되어야 하고, 두 용어 모두 순서화된 컬렉션의 특정 원소 또는 개체, 가령, 리스트 또는 스트링을 지칭하기 위해 사용되는 것으로 이해되어야 한다. 예를 들어, 인덱스 또는 위치가 사용되어 배열, 벡터, 스트링 또는 데이터 구조의 하나의 원소를 특정할 수 있다. 인덱스/위치 표기법은 번호 매기기 체계를 사용하여 각각의 항목/개체에 명목 번호를 할당한다. 본 개시내용에서의 예는 종종 0 기반 넘버링으로서 해당 분야에 공지된, 0의 첫 번째 인덱스/위치를 사용한다. 배열/스트링의 첫 번째 위치(0번째 위치라고도 함)는 특정 위치와 관련된 계산을 위해 0으로 표시된다. 길이 n의 세트는 0, 1, ... , n - 1의 넘버링 체계를 가질 것이다. 그 밖의 다른 넘버링 체계가 본 명세서에 기재된 시스템 및 방법에서 사용될 수 있음이 또한 자명하다. 예를 들어, 넘버링 체계는 1에서 시작할 수 있고 길이 n의 세트에 대해 n까지 계속될 수 있다.
본 개시 내용은 도면고 관련하여 방법을 설명한다. 계산 단계를 포함하는 이러한 방법은 DNA에서 수행되도록 구성됨을 이해해야 한다. 본 개시내용의 방법 및 시스템은 복수의 식별자에서의 컴퓨터 데이터 또는 정보를 인코딩하는 데 사용될 수 있으며, 각각의 식별자가 본래 정보의 하나 이상의 비트를 나타낼 수 있다. 일부 예에서, 본 개시내용의 방법 및 시스템은 각각이 원래 정보의 2비트를 나타내는 식별자를 사용하여 데이터 또는 정보를 인코딩한다.
핵산 서열에 대한 인코딩 및 정보 기록
이하의 설명은 핵산 분자의 데이터를 인코딩하기 위한 다양한 시스템 및 방법의 개요로 시작하고, 도 1-10과 관련하여 기재될 바와 같이, 디지털 데이터를 인코딩하는 핵산 분자 인쇄 및 저장을 위해 구성된 다양한 기록 및 보관 시스템을 기재한다.
도 1은 예시적인 구현 형태에 따라, 정보를 핵산 서열로 인코딩하고, 핵산 서열에 정보를 기록하고, 핵산 서열에 기록된 정보를 판독하고, 판독된 정보를 디코딩하기 위한 개략적 프로세스를 예시한다. 디지털 정보 또는 데이터는 하나 이상의 심볼 스트링으로서 표현된다. 예를 들어, 심볼는 비트이고 각각의 비트는 '0' 또는 '1'의 값을 가진다. 각각의 심볼이 구별되는 식별자에 의해 표현되도록, 각각의 심볼은 해당 심볼을 나타내는 객체(가령, 식별자)에 매핑되거나 인코딩될 수 있다. 구별되는 식별자는 구성요소 핵산 서열(본 명세서에서 구성요소로 지칭될 수 있음)로 구성된 특정 핵산 서열을 갖는 하나 이상의 핵산 분자일 수 있다. 디지털 정보를 핵산 서열에 기록하기 위해 프로세스는 디지털 정보의 각각의 심볼에 대응하는 식별자를 물리적으로 구성함으로써 물리적으로 생성될 수 있는 "식별자 라이브러리"를 생성한다. 식별자 라이브러리로부터 디지털 정보를 판독하기 위해, 식별자를 시퀀싱 및 식별함으로써, 프로세스는 식별자 라이브러리 내 식별자의 모든 또는 서브세트를 액세스한다. 그런 다음, 식별된 식별자는 대응하는 심볼와 연관되어 원본 디지털 데이터를 디코딩할 수 있다. 일반적으로, 현재 접근 방식에 의해 디지털 정보의 전체 또는 일부가 한 번에 액세스될 수 있다.
예를 들어, 도 1의 방식을 사용하여 정보를 인코딩하고 판독하기 위한 방법은 비트 스트림을 수신하고 식별자 순위 또는 핵산 인덱스를 이용해 비트 스트림의 각각의 1비트(비트 값이 '1'인 비트)를 구별되는 핵산 식별자로 매핑하는 단계를 포함한다. 그런 다음, 프로세스는 1의 비트 값에 대응하는 식별자의 복제본을 포함하는(0의 비트 값에 대한 식별자 제외) 핵산 분자의 풀로서 식별자 라이브러리를 구성한다. 즉, 식별자 라이브러리는 비트 스트림 내 특정 위치 또는 순위에서 1비트를 나타내는 각각의 식별자의 복수의 복사본을 포함하며, 여기서 각각의 식별자는 비트 스트림 내 특정 위치 또는 순위를 나타내는 특정 서열을 공유하는 풀 내 식별자 분자의 복수의 인스턴스와 연관되고, 비트 스트림 내 0-비트를 나타내는 식별자가 풀에서 제외된다. 핵산 분자의 풀에서 디지털 데이터를 판독하기 위해, 분자 생물학 방법(가령, 시퀀싱, 혼성화, PCR 등)이 사용되어 식별자 라이브러리에서 표현되는 식별자를 결정할 수 있다. 식별자 라이브러리에 존재하는 식별자의 경우, 대응하는 식별자 순위(따라서 비트 스트림 내 비트 위치)가 결정되고 이 위치에 '1'의 비트 값이 할당된다. 식별자 라이브러리에 부재하는 임의의 식별자의 경우, 대응하는 식별자 순위(따라서 비트 스트림 내 비트 위치)가 결정되고 이 위치에 '0'의 비트 값이 할당된다. 이러한 방식으로, 핵산 분자의 풀은 본래의 인코딩된 비트 스트림을 결정하기 위해 디코딩될 수 있다.
앞서 기재된 방식은 N개의 구별되는 비트의 스트링을 인코딩하는 것을 포함하며, 가능한 식별자로서 동일한 수 N의 고유 핵산 서열을 사용한다. 정보 인코딩에 대한 이러한 방식은 저장할 각각의 새로운 정보(N 비트의 또 다른 스트링)에 대한 식별자(가령, 핵산 분자)의 신규한 합성을 사용할 수 있다. 다른 경우에, 저장할 각각의 새로운 정보에 대한 식별자(N 이하의 수)를 새롭게 합성하는 비용은 일회성 신규한 합성 및 가능한 모든 N개의 식별자의 후속 유지 관리로 감소될 수 있다. 이러한 방식으로, 새로운 정보 항목(가령, 길이 N 이하의 비트 스트링)을 인코딩하는 것은 기계적으로 선택하고 미리 합성된(또는 미리 제작된) 식별자를 함께 혼합하여 식별자 라이브러리를 형성하는 것을 포함한다. 다른 경우에, (1) 저장할 각각의 새로운 정보 항목에 대해 최대 N개의 식별자를 신규하게 합성하는 것, 또는 (2) 저장할 각각의 새로운 정보 항목에 대해 N개의 가능한 식별자를 유지 및 선택하는 것, 또는 둘 모두의 비용이, 수(N보다 작은 수, 일부 경우 N보다 훨씬 작은 수)의 핵산 서열을 합성 및 유지하고 그런 다음 효소 반응을 통해 이들 서열을 수정하여 저장할 각각의 새로운 정보 항목에 대해 최대 N개의 식별자를 생성함으로써, 감소될 수 있다. 예를 들어, 합성 및 유지되는 핵산 서열은 N개의 식별자, 가령, 구성요소를 구성하는 특정 부분에 대응할 수 있다.
식별자는 읽기, 쓰기, 액세스, 복사 및 삭제 작업의 용이성을 위해 합리적으로 설계되고 선택될 수 있다. 식별자는 기록 오류, 돌연변이, 성능 저하 및 판독 오류를 최소화하도록 설계 및 선택될 수 있다.
특정 예로서, 이용가능한 식별자 서열의 세트는 15개의 레이어를 포함할 수 있고, 그 중 14개의 레이어는 각각 6개의 고유한 DNA 구성요소 서열을 포함한다. 15번째 레이어는 28개의 DNA 구성요소 서열(6개가 아닌)을 포함하는 다중 층일 수 있으며, 이는 또한 통합될 것이다. 따라서 각각의 식별자는 전체 길이 식별자 핵산 분자에 15개의 구성 요소(각각의 레이어에 하나씩의 구성요소)를 포함할 수 있다. 기록 프로세스 동안, 구성요소 분자는 반응 구획에서 함께 조립되어 식별자 분자를 형성한다. 일부 구현예에서, "멀티플렉스 레이어"만으로부터의 복수의 구성요소가 동일한 반응 구획으로 조합될 것이다.
또 다른 예로서, 86,400초(24시간)에 1테라바이트를 기록하기 위해 (식별자당 인코딩된 10비트 정보 가정할 때) 대략 8×1011개의 식별자 분자 또는 대략 5×1010 액적 반응 구획이 조립될 필요가 있을 수 있다. 각각의 반응은 28개의 식별자의 가능한 세트로부터 14개의 식별자를 조립할 수 있다. 14개의 구성요소(각각 6개의 가능한 구성요소가 있는 14개의 레이어에서 하나씩)는 식별자의 "베이스"를 특정하고 조립한다. 멀티플렉스 레이어로부터의 28개 가능한 구성요소 중 나머지 14개 구성요소는 (28개 가능성 중) 어떤 14개의 식별자를 조립할지 특정한다. 따라서 각각의 반응 구획은 28개의 DNA 구성요소와 리가아제 또는 기타 반응 혼합물이 필요할 수 있다.
본 명세서에 기재된 방법은 아래에 설명된 바와 같이 쓰기 시스템을 사용하여 구현될 수 있다. 기록 시스템은 Printer-Finisher System for Data Storage in DNA라는 명칭으로 2019년 5월 16일자로 출원된 미국 출원 번호 16/414,752에 기재된 것과 같은 프린터-피니셔 시스템일 수 있다. 기록 시스템은 기질 상의 구별되는 위치(가령, 반응 구획)에서 DNA 구성요소를 분배하고, 결찰 마스터 믹스를 분배하고, 결찰 반응을 위한 최적의 조건을 제공하고, 라이브러리를 포함하는 모든 DNA 식별자를 풀링할 수 있다.
본 명세서에 기재된 기록 시스템은 식별자를 구성하기 위한 결찰 반응의 고처리율 병렬 인쇄를 실행할 수 있다. 반응은 롤러 위를 이동하는 유연한 시트(웨빙(webbing) 또는 기질(substrate)이라고도 함)에 인쇄된 피코리터(pL) 규모 액적으로 수행될 수 있다. 앞서 언급된 출원에서 기재된 바와 같이, 쓰기 시스템은 적절한 기성품 프린트 헤드, 드라이버 및 기계 기반 시설을 사용하여 디지털 잉크젯 인쇄 및 웹 처리와 같은 기술을 통합할 수 있다. 일부 구현예에서, 본 명세서에 기재된 시스템 및 방법은 저장 용량 및 기록 처리량을 달성하기 위해 웹 속도, 프린트 헤드 분배 속도, 액적 크기, 및 결찰 화학과 같은 인자의 최적화를 포함한다. 이를 위해, 그리고 잠재적인 화학 및 하드웨어 오류에 대한 데이터 내성을 보장하기 위해, 본 명세서에 기재된 시스템 및 방법은 데이터를 인코딩하고 인쇄 명령을 개발하기 위한 구성, 가령, DNA 구성요소 서열을 레이어로 분할하는 방식 및 각각의 인쇄된 반응에서구성될 식별자 분자의 수에 대한 사양을 포함한다. 예를 들어, 이러한 구성은 쓰기 시스템과 통신하고 그 성능을 추적하는 컴퓨터 시스템을 포함할 수 있다.
도 2a 및 2b는 예시적인 구현에 따라, 객체 또는 식별자(가령, 핵산 분자)의 디지털 데이터를 인코딩하는 "주소에서의 데이터(data at address)"로 지칭되는 예시적인 방법을 도식적으로 예시한다. 도 2a는 비트 스트림을 식별자 라이브러리로 인코딩하는 것을 예시하며, 여기서, 식별자 순위를 특정하는 단일 구성요소를 바이트-값을 특정하는 단일 구성요소와 연결 또는 조립함으로써, 개별 식별자가 구성된다. 일반적으로, 주소에서의 데이터 방법은 다음의 두 개의 객체를 포함하여 정보를 모듈식으로 인코딩하는 식별자를 사용한다: 바이트-값을 식별하는 하나의 객체, 즉, "바이트-값 객체" (또는 "데이터 객체") 및 식별자 순위(또는 본래의 비트-스트림 내 바이트의 상대 위치)를 식별하는 하나의 객체, 즉, "순위 객체" (또는 "주소 객체"). 도 2b는 각각의 순위 객체 구성요소들의 세트로부터 조합적으로 구성될 수 있고 각각의 바이트-값 객체가 구성요소들의 세트로부터 조합적으로 구성될 수 있는 주소에서의 데이터 방법의 예를 예시한다. 순위 및 바이트-값 객체의 이러한 조합 구성에 의해, 객체가 단일 구성요소만으로 만들어진 경우(가령, 도 2a)보다 더 많은 정보가 식별자에 기록될 수 있다.
도 3a 및 3b는 예시적인 구현에 따라, 객체 또는 식별자(예를 들어, 핵산 서열)에서 디지털 정보를 인코딩하는 다른 예시적인 방법을 개략적으로 도시한다. 도 3a는 비트 스트림을 식별자 라이브러리로 인코딩하는 것을 예시하고, 여기서 식별자는 비트 스트림에서의 위치에 대응하는, 식별자 순위를 특정하는 단일 구성요소로부터 구성된다. 특정 순위(또는 주소)에 식별자가 있으면 '1'의 비트-값을 특정하고 특정 순위(또는 주소)에 식별자가 없으면 '0'의 비트 값을 지정한다. 이러한 유형의 인코딩은 순위(본래 비트 스트림 내 비트의 상대적 위치)만을 인코딩하는 식별자를 사용할 수 있으며 식별자 라이브러리에서 이러한 식별자의 존재 여부를 사용하여 '1' 또는 '0'의 비트 값을 인코딩할 수 있다. 정보를 판독하고 디코딩하는 것은 식별자 라이브러리에 존재하는 식별자를 식별하고, '1'의 비트-값을 이들의 대응하는 순위에 할당하고, '0'의 비트-값을 다른 곳에 할당하는 것을 포함할 수 있다. 예시에서 식별자의 존재가 1비트를 인코딩하고 식별자의 부재가 0비트를 인코딩하지만, 식별자의 존재가 0비트를 인코딩할 수 있는 반면 식별자의 부재가 1비트를 인코딩할 수 있는 것이, 본 개시의 범위를 벗어나지 않는 것으로 이해될 것이다.
도 3b는 도 3a와 유사하지만, 도 3b의 예시적인 인코딩 방법에서, 각 식별자는 각각의 가능한 조합 구성이 순위를 지정하도록 구성요소 세트로부터 조합적으로 구성된다. 이러한 조합 구성은 식별자가 단일 구성요소만으로 만들어지는 경우(가령, 도 3a)보다 더 많은 정보가 식별자에 기록될 수 있게 한다. 예를 들어, 도 3b에 도식된 바와 같이, 길이 N = 10의 비트 스트링에 대응하는 10개의 어드레스는 5개의 구별되는 구성요소의 구성요소 세트를 사용하여 표현된다. 5개의 구별되는 구성요소는 조합 방식으로 조립되어 각각 5개의 구성 요소 중 2개를 포함하는 10개의 구별되는 식별자를 생성한다. 10개의 구별되는 식별자 각각은 비트 스트림 중 비트의 위치에 대응하는 순위(또는 주소)를 가진다. 식별자 라이브러리는 비트-값 '1'의 위치에 대응하는 10개의 가능한 식별자의 서브세트를 포함할 수 있고, 길이 10의 비트 스트림 내 비트-값 '0'의 위치에 대응하는 10개의 가능한 식별자의 서브세트를 배제한다.
도 4는 도 3a 및 3b에 나타난 인코딩 방법을 이용해 가능한 식별자의 조합 공간(C, x-축)과 주어진 본래 비트 크기의 정보(D, 등고선)를 저장하기 위해 물리적으로 구성될 평균 평균 개수의 식별자(k, y-축) 간 관계의 예시적 구현을, 로그 공간에서 도시한다. 이 플롯은 크기 D의 본래 정보가 C비트의 스트링으로 재코딩됨을 가정한다(C는 D보다 클 수 있음), 이때 특정 비트 수 k가 '1'의 비트-값을 가진다. 또한, 플롯은 재코딩된 비트 스트링에 대해 정보-핵산 인코딩이 수행되고 비트-값이 '1'인 위치에 대한 식별자가 구성되고 비트-값이 '0'인 위치에 대한 식별자가 구성되지 않음을 가정한다. 가정에 따르면, 가능한 식별자의 조합 공간은 재코딩된 비트 스트링의 모든 위치를 식별하기 위해 크기 C를 가지며 크기 D의 비트 스트링을 인코딩하는 데 사용되는 식별자의 수는 D = log2(Cchoosek)이도록 정해지되, 여기서 Cchoosek은 C개의 가능성으로부터 순서가 지정되지 않은 k개의 결과를 선택하는 방법의 수입니다. 따라서 가능한 식별자의 조합 공간이 주어진 정보 항목의 크기(비트 단위) 이상으로 증가함에 따라 주어진 정보를 저장하기 위해 물리적으로 구성된 식별자의 수가 감소해야 한다.
도 5는 예시적인 구현에 따른, 핵산 서열에 정보를 기록하기 위한 개요 방법을 도시한다. 핵산 분자에 기록되기 전에, 예시적인 구현에 따라, 정보는 심볼의 스트링으로 번역되고 복수의 식별자 서열로 인코딩된다. 예를 들어, 정보를 핵산 분자에 기록하는 것은 풀에서 결합하도록 식별자 분자를 생성하기 위해 다양한 화학 반응을 설정하는 것을 포함한다. 구체적으로, 입력(예를 들어 핵산, 구성요소, 주형, 효소 또는 화학 시약)을 구획(본원에서는 컨테이너, 가령, 웰, 튜브, 표면 상의 위치, 미세유체 장치의 챔버, 또는 에멀젼 내의 액적 등)으로 침전시킴으로써 반응이 설정된다. 반응은 한 번에 단일 구획에서 설정되거나 병렬 처리를 위해 여러 구획에서 설정될 수 있다. 반응은 특정 프로세스 단계, 가령, 프로그래밍된 온도 배양 또는 순환을 포함할 수 있거나, 선택적으로 또는 편재적으로 제거(가령, 삭제)될 수 있거나, 선택적으로 또는 편재적으로 중단, 통합 및 정제되어 결과 식별자 분자를 하나의 풀에 수집할 수 있거나, 이들의 임의의 적절한 조합일 수 있다. 복수의 식별자 라이브러리로부터의 식별자가 동일한 풀에 수집되거나 상이한 식별자 라이브러리가 각각 별도의 개별 풀에 수집될 수 있다. 일부 예에서, 개별 식별자는 고유 바코드 또는 그것이 속하는 해당 식별자 라이브러리를 식별하는 태그를 포함한다. 일부 예에서, 그 바코드는 인코딩된 정보를 나타내는 메타데이터를 포함한다. 인코딩된 정보 자체를 나타내는 식별자 분자에 추가로, 보조 핵산 또는 추가 식별자가 식별자 라이브러리와 함께 식별자 풀에 포함될 수도 있다. 예를 들어, 보조 핵산 또는 추가 식별자는 인코딩된 정보에 대한 메타데이터를 나타내거나 인코딩된 정보를 난독화하거나 은닉하는 역할을 할 수 있다.
식별자 순위(가령, 핵산 인덱스)는 식별자의 순서를 기반으로 한다. 이 방법은 모든 식별자 및 해당 순위를 가진 룩업 테이블을 포함할 수 있다. 이 방법은 또한 식별자를 구성하는 모든 구성요소의 순위와 이들 구성요소의 조합을 포함하는 임의의 식별자의 순서를 결정하기 위한 기능을 갖는 룩업 테이블을 포함할 수 있다. 이러한 방법은 사전순 정렬이라고 할 수 있으며 사전의 단어가 알파벳순으로 정렬되는 방식과 유사할 수 있다. 예를 들어, 조합 공간의 각각의 식별자는 고정된 개수 N개의 구성 요소를 포함할 수 있으며, 여기서 각각의 구성요소는 N개의 레이어의 세트의 구별되는 레이어로부터 유래하고 상기 레이어 내 가능한 다수의 구성요소 세트 중 하니이다. 각각의 구성요소는 좌표(j, Xj)로 특정될 수 있으며, 여기서 j는 레이어의 라벨이고 Xj는 레이어 내 구성요소의 라벨이다. N개의 레이어가 있는 상기 방식의 경우, j는 집합 {1, 2, ..., N}의 원소이고 Xj는 집합 {1,2, ..., Mj)의 원소이며, 여기서 Mj는 레이어 j의 구성요소의 수이다. 레이어에 대한 논리적 순서를 정의할 수 있다. 또한 각각의 레이어 내 각각의 구성요소에 대한 논리적 순서를 정의할 수 있다. 이 라벨링을 이용해 함수 또는 알고리즘을 통해 조합 공간 내 모든 가능한 식별자에 대한 논리적 순서를 정의할 수 있다. 예를 들어, 먼저 레이어(1) 내 구성요소의 순서에 따라 식별자를 정렬한 다음 레이어(2)의 구성요소의 순서에 따라 정렬하는 식으로 계속할 수 있다.
주소에서의 데이터 인코딩 방법에서, (식별자의 순위 객체에 의해 인코딩된) 식별자 순위는 비트 스트림 내 (식별자의 바이트-값 객체에 의해 인코딩된) 바이트의 위치를 결정하는 데 사용될 수 있다. 대안적인 방법에서, 현재 식별자에 대한 (전체 식별자 자체에 의해 인코딩된) 식별자 순위는 비트 스트림 내에서 '1'의 비트-값의 위치를 결정하는 데 사용될 수 있다. 특정 순위를 결정하거나 하나 이상의 식별자의 순위를 사용하는 다양한 방법을 기술하는 시스템 및 방법은 도 23-29와 관련하여 설명된다.
키는 샘플 내 식별자(가령, 핵산 분자)의 고유한 서브세트에 정보의 구별되는 바이트 또는 일부분을 할당할 수 있다. 예를 들어, 간단한 형식에서, 키는 바이트의 각각의 비트를 비트의 위치를 특정하는 고유한 핵산 서열에 할당할 수 있고, 그런 다음, 샘플 내 해당 핵산 서열의 존재 또는 부재는 1 또는 0의 비트-값을 특정할 수 있다. 본 개시의 범위를 벗어나지 않으면서 다른 유형의 키가 또한 사용될 수 있다. 핵산 샘플로부터 인코딩된 정보를 판독하는 것은 시퀀싱, 혼성화 또는 PCR을 포함하는 임의의 수의 분자 생물학 기술을 포함할 수 있다. 일부 구현예에서, 인코딩된 데이터세트를 판독하는 것은 데이터세트의 일부를 재구성하거나 각각의 핵산 샘플로부터 전체 인코딩된 데이터세트를 재구성하는 것을 포함할 수 있다. 서열이 판독될 때, 고유한 핵산 서열의 존재 또는 부재와 함께 핵산 인덱스가 결정되고 핵산 샘플은 비트 스트림(가령, 비트 스트링, 바이트, 바이트 또는 바이트 스트링 각각)으로 디코딩될 수 있다.
일부 구현예에서, 식별자는 구성요소 핵산 서열을 조합적으로 조립함으로써 구성된다. 예를 들어, 정보는 정의된 분자 그룹(가령, 조합 공간)으로부터 핵산 분자(가령, 식별자) 세트를 취함으로써 인코딩될 수 있다. 정의된 분자 그룹의 각각의 가능한 식별자는 레이러로 분할될 수 있는 사전 구성된 구성요소 세트로부터의 핵산 서열(가령, 구성요소)의 조립일 수 있다. 각각의 개별 식별자는 모든 레이어로부터의 하나의 구성요소를 고정된 순서로 연결함으로써 구성될 수 있다. 예를 들어, M개의 레이어가 있고 각각의 레이어가 n개의 구성요소를 가질 수 있는 경우 최대 C = n M 개의 고유 식별자가 구성될 수 있고 최대 2 C 개의 상이한 정보 항목 또는 C 비트가 인코딩 및 저장될 수 있다. 예를 들어 메가비트의 정보를 저장하려면 1 x 106개의 구별되는 식별자 또는 C = 1 × 106 크기의 조합 공간을 사용할 수 있다. 이 예에서 식별자는 다양한 방식으로 구성된 다양한 구성요소로부터 조립될 수 있다. 조립은 각각 n = 1 × 103개의 구성요소를 포함하는 M = 2개의 사전 제작된 레이어로 만들 수 있다. 대안으로, 조립은 각각 n = 1 × 102개의 구성요소를 포함하는 M = 3개의 레이어로 만들어질 수 있다. 일부 구현예에서, 조립은 M = 2, M = 3, M = 4, M = 5 또는 그 이상의 레이어로 만들어질 수 있다. 이 예가 설명하는 바와 같이, 더 많은 수의 레이어를 사용하여 동일한 양의 정보를 인코딩하면 구성요소의 총 수가 더 작아질 수 있다. 적은 수의 전체 구성요소를 사용하는 것이 기록 비용 측면에서 유리할 수 있다.
예에서, 각각 x 및 y 구성요소(예를 들어, 핵산 서열)을 각각 갖는 고유한 핵산 서열 또는 층, X 및 Y의 두 세트가 있다. X로부터의 각각의 핵산 서열은 Y로부터의 각각의 핵산 서열로 조립될 수 있다. 두 세트에서 유지되는 핵산 서열의 총 수는 x와 y의 합, 즉 핵산 분자의 총 수이고 따라서 생성될 수 있는 가능한 식별자의 총 수는 x와 y의 곱이다. X로부터의 서열이 임의의 순서로 Y의 서열에 조립될 수 있는 경우 훨씬 더 많은 핵산 서열(가령, 식별자)이 생성될 수 있다. 예를 들어, 생성된 핵산 서열(가령, 식별자)의 수는 조립 순서가 프로그래밍 가능한 경우 x와 y의 곱의 두 배가 될 수 있다. 생성될 수 있는 모든 가능한 핵산 서열의 이 세트는 XY로 지칭될 수 있다. XY에서 고유한 핵산 서열의 조립된 유닛의 순서는 구별되는 5' 및 3' 말단을 가진 핵산을 사용하여 제어할 수 있으며, 제한 분해, 결찰, 중합효소 연쇄 반응(PCR) 및 시퀀싱이 서열의 구별되는 5' 및 3' 말단에 대해 발생할 수 있다. 따라서, 모든 단위 및 필요한 시약은 반응 구획에서 동시에 침착될 수 있으며, 각각의 단위의 구별되는 5' 및 3' 말단은 단위(가령, 구성요소)가 원하는 고유한 핵산 분자로 자가 조립되도록 허용되는데, 조립된 단위의 순서는 말단의 설계에 의해 제어되기 때문이다. 이러한 방식은 조립 제품의 조합 및 순서로 정보를 인코딩함으로써 N개의 구별되는 비트를 인코딩하는 데 사용되는 핵산 서열(가령, 구성요소)의 총 수를 줄일 수 있다. 예를 들어, 100비트의 정보를 인코딩하기 위해, 10개의 구별되는 핵산 분자(가령, 구성요소)의 2개 레이어가 고정된 순서로 조립되어 102개 즉 100개의 구별되는 핵산 분자(가령, 식별자) 또는 5개의 구별되는 핵산 분자(가령, 구성요소)의 하나의 레이어 및 10개의 구별되는 핵산 분자(가령, 구성요소)의 또 다른 레이어가 임의의 순서로 조립되어 100개의 개별 핵산 분자(가령, 식별자)를 생성할 수 있다.
각각의 레이어 내의 핵산 서열(예를 들어, 구성요소)은 중간에 고유한(또는 구별되는) 서열 또는 바코드를 포함할 수 있고, 한쪽 말단에는 공통 혼성화 영역이 있고 다른 쪽 말단에는 또 다른 공통 혼성화 영역이 있을 수 있다. 바코드는 레이어 내의 모든 서열을 고유하게 식별하기에 충분한 수의 뉴클레오티드를 포함할 수 있다. 예를 들어, 일반적으로 바코드 내의 각각의 염기 위치에 대해 4개의 가능한 뉴클레오티드가 있다. 따라서 3개 염기 바코드는 43 = 64개의 핵산 서열을 고유하게 식별할 수 있다. 바코드는 무작위로 생성되도록 설계될 수 있다. 대안으로, 바코드는 식별자 또는 시퀀싱의 구성 화학에 복잡성을 생성할 수 있는 서열을 피하도록 설계될 수 있다. 추가로, 바코드는 각각이 다른 바코드로부터 최소 해밍 거리를 가질 수 있도록 설계될 수 있으며, 이에 의해 염기-분해능 돌연변이 또는 판독 오류가 바코드의 적절한 식별을 방해할 수 있는 가능성을 감소시킬 수 있다. 또한, 바코드 영역은 프로브, 가령, PCR용 프라이머, CRISPR-Cas 가이드 RNA 또는 친화성 태깅된 올리고뉴클레오티드(예를 들어, 비오틴화된 올리고뉴클레오티드)와 결합하도록 설계될 수 있다.
핵산 서열(예를 들어, 구성요소)의 한쪽 말단 상의 혼성화 영역은 각각의 층에서 상이할 수 있지만, 혼성화 영역은 층 내의 각각의 구성원에 대해 동일할 수 있다. 인접 레이어는 구성요소에 상호 작용할 수 있는 상보적인 하이브리드 영역이 있는 레이어이다. 예를 들어, 층 X로부터의 임의의 구성요소는 상보적인 혼성화 영역을 가질 수 있기 때문에 층 Y로부터의 임의의 구성요소에 부착될 수 있다. 반대쪽 말단의 혼성화 영역은 제1 말단의 혼성화 영역과 동일한 목적을 수행할 수 있다. 예를 들어, 레이어 Y로부터의 임의의 구성요소는 한쪽 말단에 있는 레이어 X의 임의의 구성요소 및 반대쪽 말단에 있는 레이어 Z의 구성 요소에 부착될 수 있다. 따라서, 모든 구성요소 및 복수의 식별자를 형성하는 데 필요한 시약은 반응 구획에 동시에 증착될 수 있으며, 각각의 구성요소 상의 혼성화 영역은 이들이 원하는 고유한 식별자 분자로 자체-조립될 수 있게 하는데, 이는 조립되는 구성요소의 순서가 혼성화 영역의 설계에 의해 제어되기 때문이다.
도 6a 및 6b는 예시적 구현에 따라, 고정된 순서로 각각의 레이어로부터 구별되는 구성요소(가령, 핵산 서열)를 조합적으로 조립함으로써 식별자(가령, 핵산 분자)를 구성하기 위한, "제품 구성표"라고 지칭되는 예시적 방법을 예시한다. 도 6a는 제품 구성표를 사용하여 구성된 식별자의 아키텍처를 도시한다. 식별자는 각각의 레이어로부터의 단일 구성요소를 고정된 순서로 결합함으로써 구성될 수 있다. 각각 N개의 구성요소가 있는 M개의 레이어에 대해 N M 개의 가능한 식별자가 있다. 도 6b는 제품 구성표를 사용하여 구성될 수 있는 식별자의 조합적 공간의 예를 도시한다. 예를 들어, 조합 공간은 각각 3개의 구별되는 구성요소를 포함하는 3개의 레이어로부터 생성될 수 있다. 각각의 레이어로부터의 하나의 구성요소가 고정된 순서로 결합될 수 있도록 구성요소가 결합될 수 있다. 이 조립 방법을 위한 전체 조합 공간은 27개의 가능한 식별자를 포함할 수 있다.
도 7-10은 제품 계획을 구현하기 위한 화학적 방법을 예시한다(도 6 참조). 둘 이상의 구별되는 구성요소를 고정된 순서로 조립하기 위한 임의의 다른 방법과 함께 도 7-10에 도시된 방법은 예를 들어 식별자 라이브러리 내 임의의 하나 이상의 식별자를 생성하는 데 사용될 수 있다. 이들 방법은 2017년 12월 21일자로 출원된 "NUCLEIC ACID-BASED DATA STORAGE"라는 제목의 미국 특허 번호 10,650,312에 기재되어 있으며, 그 전체 내용이 참고로 포함된다. 식별자는 본 명세서에 기재된 방법 또는 시스템 중 임의의 때에 도 7-10에 기재된 구현 방법 중 임의의 것을 이용해 식별자가 구성될 수 있다. 어떤 경우에는, 가능한 식별자의 조합 공간의 전체 또는 일부가 디지털 정보가 인코딩되거나 기록되기 전에 구성될 수 있으며, 그런 다음 기록 프로세스는 이미 존재하는 집합에서 (정보를 인코딩하는) 식별자를 기계적으로 선택하고 풀링하는 작업을 포함할 수 있다. 또 다른 경우에, 식별자는 데이터 인코딩 또는 기록 프로세스의 하나 이상의 단계가 발생한 후에(즉, 정보가 기록될 때) 구성될 수 있다.
효소 반응이 사용되어 상이한 레이어 또는 세트로부터의 구성요소를 조립할 수 있다. 각각의 레이어의 구성요소(가령, 핵산 서열)는 인접 레이어의 구성요소에 대해 특정한 혼성화 또는 부착 영역을 갖기 때문에 조립은 원 포트 반응에서 발생할 수 있다. 예를 들어, 층 X로부터의 핵산 서열(가령, 구성요소) X1, 층 Y로부터의 핵산 서열 Y1, 및 층 Z로부터의 핵산 서열 Z1은 조립된 핵산 분자(가령, 식별자) X1Y1Z1을 형성할 수 있다. 추가로, 다중 핵산 분자(가령, 식별자)는 각각의 레이어로부터의 다수의 핵산 서열을 포함함으로써 하나의 반응으로 조립될 수 있다. 한 가지 반응은 구성요소를 식별자로 자체-조립하는 것을 포함할 수 있다.
식별자는 예시적 구현에 따라 도 7에 예시된 바와 같이 중첩 확장 중합효소 연쇄 반응(OEPCR)을 사용하는 생산 방식에 따라 구성될 수 있다. 각각의 레이어 내 각각의 구성요소는 인접 레이어로부터의 구성요소의 서열 상의 공통 혼성화 영역과 상동성 및/또는 상보성일 수 있는 서열 말단 상의 공통 혼성화 영역을 갖는 이중 가닥 또는 단일 가닥(도면에 도시된 바와 같음) 핵산 서열을 포함할 수 있다 따라서, 모든 구성요소 및 복수의 식별자를 형성하는 데 필요한 시약은 반응 구획에 동시에 증착될 수 있으며, 각각의 구성요소 상의 혼성화 영역은 이들이 원하는 고유한 식별자 분자로 자체-조립될 수 있게 하는데, 이는 조립되는 구성요소의 순서가 혼성화 영역의 설계에 의해 제어되기 때문이다.
식별자는 예시적인 구현에 따라 도 8에 예시된 바와 같이 점착성 말단 결찰을 사용하는 생성 방식에 따라 조립될 수 있다. 단일 가닥 3' 돌출부가 있는 이중 가닥 구성요소(가령, 이중가닥 DNA(dsDNA))를 각각 포함하는 3개의 레이어가 사용되어 구별되는 식별자를 조립할 수 있다. 점착성 말단 결찰을 위한 점착성 말단은 각각의 레이어의 구성요소를 제한 엔도뉴클레아제로 처리함으로써 생성될 수 있다. 일부 구현예에서, 복수의 레이어의 구성요소는 구성요소의 하나의 "부모" 세트로부터 생성될 수 있다.
식별자는 예시적인 구현에 따라 도 9에 예시된 바와 같이 부위 특정 재조합을 사용하는 생성 방식에 따라 조립될 수 있다. 식별자는 세 개의 상이한 레이어로부터 구성요소를 조합함으로써 구성될 수 있다. 층 X(또는 층 1)의 구성요소는 분자의 한 쪽에 attBx 재조합효소 부위가 있는 이중 가닥 분자를 포함할 수 있고, 층 Y(또는 층 2)의 구성요소는 한쪽에 attPx 재조합효소 부위 및 다른 한쪽에 attBy 재조합효소 부위가 있는 이중 가닥 분자를 포함할 수 있으며, 층 Z(또는 층 3)의 구성요소는 분자의 한 측면에 attPy 재조합효소 부위를 포함할 수 있다. 한 쌍 내의 attB 및 attP 부위는 아래 첨자로 표시되어 있으며 대응하는 재조합 효소의 존재 하에 재결합할 수 있다. 레이어 X로부터의 하나의 구성요소가 레이어 Y로부터의 하나의 구성요소와 연관되고, 레이어 Y로부터의 하나의 구성요소가 레이어 Z로부터의 하나의 구성요소와 연관되도록 각각의 레이어로부터의 하나의 구성요소가 조합될 수 있다. 따라서, 모든 구성요소 및 복수의 식별자를 형성하는 데 필요한 시약은 반응 구획에 동시에 증착될 수 있으며, 각각의 구성요소 상의 재조합효소 자리는 이들이 원하는 고유한 식별자 분자로 자체-조립될 수 있게 하는데, 이는 조립되는 구성요소의 순서가 재조합효소 자리의 설계에 의해 제어되기 때문이다.
식별자는 예시적 구현예에 따라, 도 10a에 도시된 바와 같이, 주형 지정 결찰(TDL)을 이용한 생산 방식에 다라 구성될 수 있다. 주형 지정 결찰은 "주형(template)" 또는 "스테이플(staple)"이라고 하는 단일 가닥 핵산 서열을 활용하여 구성요소의 순서화된 결찰을 촉진하여 식별자를 형성한다. 주형은 인접한 층으로부터의 구성요소에 동시에 혼성화하고 리가아제가 이들을 연결하는 동안 서로(5' 말단에 대해 3' 말단) 인접하게 유지한다. 따라서, 모든 구성요소 및 복수의 식별자를 형성하는 데 필요한 시약은 반응 구획에 동시에 증착될 수 있으며, 각각의 구성요소 상의 혼성화 영역은 이들이 원하는 고유한 식별자 분자로 자체-조립될 수 있게 하는데, 이는 조립되는 구성요소의 순서가 주형의 설계에 의해 제어되기 때문이다.
도 10b는 예시적인 구현에 따른, 6-레이어 TDL로 각각 조립된 256개의 구별되는 핵산 서열의 복제수(풍부함)의 히스토그램을 나타낸다. 가장자리 레이어(첫 번째 레이어와 마지막 레이어) 각각은 하나의 구성 요소를 갖고 내부 레이어(나머지 4개 레이어) 각각은 4개의 구성 요소를 가진다. 각각의 가장자리 레이어 구성요소는 10개 염기 혼성화 영역을 포함하는 28개 염기였다. 각각의 내부 레이어 구성요소는 5' 말단 상의 10 염기 공통 혼성화 영역, 10 염기 가변(바코드) 영역, 및 3' 말단 상의 10 염기 공통 혼성화 영역을 포함하는 30 염기였다. 3개의 주형 가닥 각각의 길이는 20개 염기였다. 모든 256개의 구별되는 서열은 모든 구성요소와 주형, T4 폴리뉴클레오타이드 키나아제(구성요소 인산화용) 및 T4 리가아제, ATP 및 그 밖의 다른 적절한 반응 시약을 모두 포함하는 하나의 반응으로 다중 방식으로 조립되었다. 반응물은 37도에서 30분 동안 배양된 다음 실온에서 1시간 동안 배양된다. 시퀀싱 어댑터가 PCR로 반응 생성물에 추가되고, 생성물은 Illumina MiSeq 기기로 시퀀싱됐다. 총 192910개의 조립된 서열 리드 중 각각의 구별되는 조립된 서열의 상대 복제수가 나타난다. 이 방법의 다른 구현은 이중 가닥 구성요소를 사용할 수 있으며, 여기서 구성요소는 초기에 용융되어 스테이플에 어닐링될 수 있는 단일 가닥 버전을 형성할 수 있다. 이 방법(즉, TDL)의 또 다른 구현 또는 파생이 사용되어 생성 방식에서 달성될 수 있는 것보다 더 복잡한 식별자의 조합 공간을 구성할 수 있다. 식별자는 다양한 화학적 구현, 가령, 골든 게이트 조립, 깁슨 조립, 및 리가제 순환 반응 조립을 이용하는 생산 방식에 따라 구성될 수 있다.
핵산 서열 내 효율적인 데이터 저장을 위한 데이터 구조 및 데이터 블록
이 섹션은 효율적인 방식으로 DNA의 데이터를 인코딩하기 위한 시스템 및 방법을 논의하고, 도 11-19와 관련된다. 구체적으로, 특정 데이터 구조 및 제어 방식이 기재된다. 데이터 구조는 저장된 데이터에 대한 효율적인 액세스 및 수정을 가능하게 하는 데이터 구성, 관리 및/또는 저장을 위한 형식을 포함한다. 보다 정확하게는, 데이터 구조는 데이터 값의 집합, 이들 간의 관계, 데이터에 적용될 수 있는 기능 또는 연산을 포함한다. 예시적인 데이터 구조 및 인코딩 방식은 2019년 8월 5일에 "SYSTEMS AND METHODS FOR STORING AND READING NUCLEIC ACID-BASED DATA WITH ERROR PROTECTION"이라는 명칭으로 출원된 미국 출원 번호 16/532,077에 기재되어 있으며, 이의 전체 내용이 참조로 본 명세서에 포함된다. 이들 구조 또는 방식으로 DNA를 인코딩함으로써, 저장된 데이터가 더 쉽게 액세스되거나 조작될 수 있다.
앞서 논의된 바와 같이, 스트링은 스트링 내의 1-비트의 위치 또는 심볼 스트링 내의 심볼의 위치를 나타내는 식별자의 라이브러리로서 인코딩될 수 있다. 그러나 "코드워드" 및 "코드북"을 사용함으로써 추가 번역 레이어가 사용될 수 있다. "코드워드"는 순서화된 식별자 라이브러리에 있는 n c 개의 연속적인 식별자의 그룹이며 n c 개의 사용 가능한 식별자 중에서 k c 개의 식별자만 설정함으로써 심볼(가령, 임의 알파벳)를 인코딩한다. k c 의 값을 코드워드의 "가중치"라고 부른다. "코드북"은 가능한 모든 코드워드의 세트이다. 예를 들어, 본 명세서에 기재된 시스템 및 방법은 8개의 식별자의 모든 인접 그룹에서 6비트의 데이터를 인코딩하는 코드북을 사용할 수 있다. 이 예에서, 코드북은 6비트의 각각의 가능한 스트링을 n c = 8개의 식별자 중에서 k c = 4의 고유한 서브세트로 매핑할 수 있다(8개의 선택 4 = 70 이러한 하위 집합이 있으므로 floor(log2(70)) = 6비트 데이터까지 저장하는 것이 가능하다). 이들 식별자 조합이 코드워드라고 지칭되며, 이들이 인코딩하는 데이터가 워드라고 지칭된다. 데이터 내 인접 워드가 논리적으로 정렬된 식별자 중 인접 코드워드에 저장될 수 있다. 코드워드는 모든 비트 위치가 순서화된 식별자에 대응하는 비트 스트링으로서 심볼로 표현될 수 있으며, 여기서, '0'의 비트-값은 코드워드 내 대응하는 식별자의 부재를 나타내고 '1'의 비트-값은 코드워드 내 대응하는 식별자의 존재를 나타낸다. 코드북은 "저-가중치" 또는 "고-가중치"일 수 있으며, 여기서 예를 들어 저-가중치 코드북은 25개의 식별자 중 2개를 설정할 수 있고 고-가중치 코드북은 357개의 식별자 중 178개를 설정할 수 있다. 고-가중치 코드북은 더 높은 밀도의 데이터 저장(즉, 라이브러리당 더 많은 비트 저장)을 허용할 수 있지만, 저-가중치 코드북은 에러-정정 방식 및 더 강건한 인코더의 더 나은 구현을 가능하게 할 수 있다.
도 11은 예시적인 구현에 따라, 트라이 데이터 구조로부터 구성된 식별자 서열에 따라 반응 구획으로 용액을 분배함으로써 식별자 라이브러리에서 스트링을 인코딩하는 다이어그램을 도시한다. 트라이는 트라이의 각각의 레이어/레벨이 식별자의 레이어를 나타내고 각각의 트라이 레이어의 각각의 가장자리가 대응하는 식별자 레이어 내의 구성 요소를 나타내는 순서화된 트리 데이터 구조이다. 트라이의 최종 레이어는 식별자의 멀티플렉스 레이어를 나타낼 수 있다. 심볼 스트링(1100)은 DNA 식별자 핵산 분자에 저장될 코드워드 세트를 나타낸다. 코드워드는 소스 워드라고 불리는 소스 알파벳의 특정 심볼 스트링을 나타내는 심볼 스트링이다. 코드는 인코딩이라고 알려진 프로세스에서 소스 단어를 코드워드에 매핑한다. 액적(1104)은 개별 반응 구획(예를 들어, 구획(1106))으로 분배된다. 심볼 스트링(1100)은 '1'의 심볼 값을 가리키는 최종(멀티플렉스) 레이어(1102)의 리프에 트리의 루트(도시되지 않음)를 연결하는 트리 경로에 의해 표현되는 식별자를 구성함으로써 인코딩된다.
일반적으로, 코드워드의 가중치는 코드워드의 비트 수에 비해, '1' 값을 갖는 비트 수를 포함한다. 5 비트의 각각의 스트링(가령, 서브-스트링)이 반응 구획에서 인코딩되도록 심볼 스트링(1100)이 분할되기 때문에, 코드워드의 "가중치"는 코드워드에 걸쳐 고르게 분산되고, (5개 중에서) 정확히 3개의 '1' 값을 가짐으로써 각각의 구획이 멀티플렉스 층으로부터 3개의 구성요소를 수신하여, 3개의 식별자를 형성할 수 있다. 예를 들어, 반응 구획(1106)은 기본 층으로부터의 구성요소(가령, 멀티플렉스 층까지의 트라이의 경로를 구성하는 구성요소 - 구성요소 7, B, D,...) 및 멀티플렉스 레이어에서 각각 나타난 바와 같이 그리고 심볼 스트링 "10101"의 위치에 대응하는 멀티플렉스 레이어로부터의 구성요소 0, 2, 및 4의 고유한 조합을 갖는 식별자를 포함하도록 구성된다. 각각의 '1' 값에 대해 해당 심볼 위치에 대한 대응하는 식별자 분자(해당 심볼 위치로 이어지는 경로를 구성하는 구성요소 포함)가 반응 구획에 침착된다.
앞서 기재된 바와 같이, 심볼 스트링의 기록 프로세스로부터의 출력이 장기 저장 및 드문 액세스를 필요로 할 수 있는 인코딩된 DNA(식별자)의 라이브러리이다. 인코딩된 DNA의 생성된 풀은 각각의 식별자 서열의 많은 수(가령, 수십만)의 분자를 포함한다. 그램 단위로 볼 때, 생산된 물질의 총량은 마이크로그램 수량일 수 있다. 풀은 이중화, 보관 및 액세스를 위한 충분한 물질이 있는지 확인하기 위해 PCR로 증폭될 수 있다. 증폭 후 풀은 여러 컨테이너에 할당되고 상이한 위치에 저장될 수 있다. 풀은 다양한 핵산 저장 및 보관 시스템에 저장될 수 있다. 예를 들어, DNA는 Eppendorf 튜브, 냉동고에 저장되거나 액체 질소에 저온-보존되거나, Tris-EDTA에 저장될 수 있다. 가속화된 안정성 조건, 가령, 상이한 온도 하에서 물질을 판독함으로써 DNA의 저장 수명이 평가된다. 본 명세서에 기재된 시스템 및 방법은 저장된 DNA의 장기 보관 및 무작위 액세스를 모두 허용하는 자동화된 샘플 관리 시스템을 포함할 수 있다.
일부 구현예에서, 운영 체제(OS)는 기록, 읽기, 엑사바이트 크기로 확장 가능한 아카이브의 발견 가능한 쿼리, 또는 이들의 임의의 조합을 조화시킬 수 있다. OS는 저장 매체를 고정된 크기의 "블록" 모음으로 나타내도록 구성될 수 있다. 각각의 블록은 단일 식별자 풀에 저장된 단일 식별자 라이브러리에 있는 식별자 서열의 연속 서열이다. 그러나 블록은 장애 대비용으로 여러 풀에서 미러링될 수 있다. OS는 블록 구성, 할당 및 쓰기를 담당할 수 있다. "블록 인덱스"는 "블록 ID"를 물리 주소(컨테이너 및 식별자로 구성)로 매핑하는 계층적 데이터 구조이며, 여기서 "블록 ID"는 각각의 블록에 할당된 논리 주소, 바코드 또는 태그이다. 물리 주소는 대응하는 블록을 액세스하는 데 필요한 정보를 포함한다. 구체적으로, 일부 구현예에서, OS는 위에서 설명된 읽기/쓰기 플랫폼에 최적화된 코덱을 통해 의미론적으로 주석이 달린 블록과 인덱싱된 블록의 트리를 읽고 쓰는 것을 가능하게 한다. OS는 인제스트 API를 포함할 수 있는 번역 스택과, 장기(long-term) 그러나 세분화된 데이터 쿼리 및 발견을 위한 데이터 구성 및 포맷화를 위한 모듈을 포함한다. OS의 이들 측면은 기록, 판독 또는 액세스 방법에 광범위하게 적합할 수 있다. OS의 다른 측면은 정보 기록, 액세스 및 판독을 위한 방법을 특별히 최적화하도록 설계될 수 있다. 이들은 데이터를 압축하고 에러로부터 보호하기 위한 모듈, 및 데이터를 구성하고 앞서 기재된 기록 시스템으로 전송하기 위한 모듈을 포함한다. 상기의 방법으로 DNA 분자에 기록된 데이터는 모든 시퀀서(sequencer)에 의해 판독될 것이지만, 특정 판독 방법이 이하에서 기재된다. OS는 예를 들어, 엑사바이트의 정보를 지원할 수 있는 저장 컨테이너 시스템에서 DNA를 할당하고, DNA에 액세스하고, DNA를 보충함으로써 기록자와 판독자 간의 DNA 기반 정보의 처리를 중재하는 자동화 소프트웨어 및 워크플로도 포함할 수 있다.
일부 구현예에서, 모든 블록은 고정되고 균일한 크기를 가진다. 복수의 블록에 대해, 각각의 블록은 연관된 블록 ID를 가지며, 블록 ID는 예를 들어 순서화된 값 또는 표현을 가짐으로써 순서화될 수 있다. 블록 ID의 순서화는 순서화된 블록 ID를 갖는 각각의 블록의 물리 주소를 암시적으로 나타내도록 구성될 수 있다. 물리 주소는 순서화될 수 있으므로 각각의 블록은 순서화된 블록 ID에 대응하는 순서화된 물리 주소에 위치한다. 예를 들어, 제1 블록 ID는 값 또는 표현 "0"을 가질 수 있고, 제2 블록 ID는 값 또는 표현 "1"을 가질 수 있다. 제1 블록 ID는 대응하는 제1 블록이 제1 주소 공간에 있음을 나타내고, 제2 블록 ID는 대응하는 제2 블록이 제2 주소 공간에 있음을 나타낸다.
예를 들어, on은 식별자의 조합 공간을 고정 크기 c 코드워드의 인접 블록으로 분할하도록 선택할 수 있다. 이와 같이, 블록의 g번째 인스턴스를 인코딩하는 식별자의 범위는 코드워드 인스턴스 (g-1)*c+1 내지 g*c를 인코딩하는 범위로서 유추될 수 있다. 이들 특정 식별자는 공통으로 특정된 구성요소 집합을 공유하는 식별자만 검색하는 화학적 액세스 프로그램을 통해 쉽게 액세스될 수 있다. 이들 액세스 프로그램은 프로브, 예를 들어 프라이머 및 PCR 또는 친화성 태깅된 올리고뉴클레오티드 및 친화성 풀다운 분석을 사용하여 상기 특정 구성요소 세트로 식별자를 선택적으로 표적화하고 후속적으로 농축 또는 선택함으로써 작동한다. 프로브는 일련의 선택 반응에 적용될 수 있으며, 각각의 반응은 개별 구성요소를 표적으로 한다. 하나의 반응으로부터의 출력이 다른 반응의 입력으로서 사용될 수 있다. 식별자는 구성요소별로 논리적으로 정렬될 수 있으며 블록은 이들 순서화된 식별자의 연속 범위에 의해 표현될 수 있기 때문에 블록을 포함하는 식별자는 이들이 이질적인 경우보다 구성요소를 공유할 가능성이 더 높다. 이는 이들 식별자를 검색하는 데 필요한 액세스 프로그램의 복잡성을 줄인다. 블록이 공통되는 구성요소들의 세트를 독점적으로 공유하는 식별자의 범위에 할당되면 복잡성이 더 개선될 수 있다.
일부 구현예에서, 심볼의 기본 스트링은 기본 스트링을 복수의 서브-스트링으로 분할함으로써 복수의 블록에 걸쳐 저장된다. 각각의 블록에 저장된 심볼 스트링은 기본 심볼 스트링으로부터 얻은 하나의 심볼의 하나의 서브-스트링이다. 서브-스트링은 순서대로 기본 스트링을 구성한다. 따라서, 각각의 서브-스트링을 저장하는 블록은 기본 스트링에서 대응하는 서브-스트링의 위치 또는 순서에 따라 순서화된 블록 ID를 가질 수 있다. 예를 들어, 기본 스트링은 5개의 서브-스트링으로 분할되어 5개의 블록에 걸쳐 저장될 수 있으며, 각각의 블록은 1 내지 5의 값의 블록 ID를 가진다(즉, 5개의 서브-스트링 중 첫 번째 서브-스트링이 블록 ID "1"인 블록에 저장된다).
도 12는 예시적인 구현에 따른, 기능 레이어로 구성된 OS에 의해 관리되는 능력의 계층화된 조직을 도시하며, 그 중 일부는 데이터 블록 및/또는 데이터 구조를 포함한다. 각각의 레이어는 아래 리스트로 요약되는, 레이어에 의해 제공되는 서비스를 이끌어 낸다. 7개의 레이어는 다음의 설계 및 구성과 관련된 6개의 개발 영역으로 변환된다:
(1) 코덱: 기록자별 최적화가 포함된 인코더/디코더 파이프라인
(2) 화학 인터페이스: 비트 연산에서 화학 연산으로의 변환기
(3) 자동화 인터페이스: 자동화 장치에 대한 인터페이스 및 변환기
(4) 블록 추상화: 블록-기반 인터페이스 및 핵심 데이터 구조 지원
(5) 검색 및 인덱싱: 시맨틱 주석 및 인덱싱을 위한 인프라구조
(6) 아카이브 애플리케이션: OS를 시연하는 아카이브 애플리케이션
본 명세서에 기재된 인코딩 스킴 및 OS의 이점은 기록 속도, 기록 비용, 판독 비용, 또는 액세스 비용에 최적화된 인코딩 스킴을 선택할 능력, 디코딩된 풋프린트를 최소화하기 위해 인덱스 데이터를 블록으로 매핑하는 것을 최적화할 능력, 큰 블록으로부터 단일 비트로 모든 스케일로 정보를 조작하고 데이터 구조를 자연스럽게 모델링할 능력, 및 데이터 및 관계에 대한 보관, 쿼리, 및 추론을 가능하게 하는 현재 보관 표준 및 실시와의 밀접한 통합을 포함한다.
코덱은 정보에 대한 인코더/디코더 역할을 한다. 위의 레이어는 이를 필요로 하고 아래의 레이어는 그것 없이는 의미있게 테스트될 수 없기 때문에, 코덱의 적절한 작동이 매우 중요하다. 코덱은 소스 비트 스트림을 수신하고 이를 화학적 방법을 사용하여 기록되기에 적합한 형식으로 변환하는 역할을 한다. 소스 비트 스트림은 모든 패킷의 크기가 고정된 패킷으로 나뉩니다. 패킷은 독립적으로 처리될 수 있으며 병렬 처리를 위한 단위 역할을 한다. 패킷은 하나 이상의 블록으로 구성된다. 블록은 아카이브에서 가장 작은 할당 단위이며, 아카이브의 조합 공간은 블록이라고 하는 일련의 연속 비트 스트링로 분할된다. 고정 레이어는 표준 암호화 해싱 알고리즘을 사용하여 블록 해시를 계산하는 역할을 하며 이 해시는 부모 블록에 포함된다. 블록이 디코딩될 때 해시를 다시 계산하고 이를 부모 블록을 통해 체크함으로써 이의 무결성이 체크될 수 있다.
일부 구현예에서, 코덱은 도 13에 도시된 예시적인 인코딩 방식을 포함하는 B-트리 구조 또는 트라이 구조와 같은 데이터 구조에 따라 인코딩을 수행하거나 조화시킨다.
도 13은 예시적인 구현에 따른, 식별자를 설계하고 순서화하기 위한 계층 데카르트 곱 조합 생성자(LCPCC: Layered Cartesian Product combinatorial constructor)의 시스템 다이어그램이다. 곱 생성자는 3개의 레이어(M = 3)와 8개의 구성요소 서열(C = 8)의 구성요소 라이브러리를 가진다. 레이어당 {3,3,2} 구성요소 서열이 있는 조합 분할 방식이 나타나며, 이는 제1 레이어 내 3개의 구성요소, 제2 레이어 내 3개의 구성요소, 및 제3 레이어 내 2개의 구성요소를 의미한다. 가능한 모든 식별자 서열의 공간은 조합 공간을 형성한다. 조합 체계의 범위라고 할 수 있는, 구성요소 라이브러리로부터 구성될 수 있는 조합 객체의 총 수는 단일 식별자 풀에 기록될 수 있는 비트 스트림의 길이를 결정한다. 이 특정 방식의 범위는 3×3×2, 즉 18이다. 일반적으로, 모든 조합 분할 방식은 M개의 레이어로 분리된 C개의 구성요소와 함께 사용될 수 있는데, 이때 i번째 레이어는 Ci개의 구성요소를 가지며, Ci의 M개의 값에 걸친 합이 C이고, Ci의 M개의 값의 곱이 가능한 식별자 서열의 수, 따라서 기록 가능한 비트 스트림의 길이를 정의하는 조합 공간의 범위이다. 구성요소 서열에 대한 순위화를 여기서 구성된 식별자로 확장시킴으로써 조합 객체가 조합 공간에서 사전순으로(lexicographically) 순서화된다. 이 순서화 정보는 식별자에 내재되어 있고, 조합 공간에서 자신의 위치를 식별하며, 소스 심볼 스트림 내 식별자에 의해 인코딩된 심볼의 위치를 식별하는 데 사용될 수 있다. 예를 들어, LCPCC는 이진 알파벳을 인코딩하는데 사용될 수 있고, 구성된 식별자에 의해 인코딩된 심볼을 "1"로 정의할 수 있다. "0" 심볼는 대응하는 식별자를 구성하지 않음으로써 나타낼 수 있다. 소스 비트 스트림은 해당 비트 스트림에 고유한 식별자(즉, 식별자 라이브러리)의 특정 세트를 구성함으로써 인코딩될 수 있다.
도 14는 예시적인 구현에 따른, 데이터 블록을 매핑하고 데이터 구조를 사용하기 위한 아카이브 동작의 시스템도를 도시한다. 아카이브(CAR)는 부트(boot), 온톨로지(ontology), 인덱스 및 콘텐츠 영역으로 분할된다. 부트 파티션은 어떠한 외부 메타데이터도 없이 디코딩될 수 있는 표준 인코딩 방식을 사용하여 기록될 수 있으며 다른 파티션을 판독하는 데 필요한 파라미터, 키 및 주소를 저장할 수 있다. OS는 앞서 기재된 대로 저장 매체를 고정 크기 블록의 모음으로 추상화한다.
각각의 블록은 단일 식별자 풀로 저장되는 단일 식별자 라이브러리에 식별자 서열의 연속 서열을 포함할 수 있고, 장애 방지용으로 여러 식별자 풀에 미러링될 수 있다. 일반적으로 OS는 블록을 구성, 할당 및 기록하는 역할을 한다. 블록 레이어가 소스 비트 스트림 패킷을 수신할 때, 블록 인덱스는 패킷을 분할하여 아카이브의 블록에 할당한다. 부트 파티션은 블록 ID를 물리 주소(컨테이너 및 식별자로 구성)로 매핑하는 계층적 데이터 구조인 블록 인덱스를 포함한다. 블록 인덱스는 사용 가능한/사용된 블록을 추적하고 블록을 새 패킷에 할당한다.
각각의 블록 ID는 논리적 주소일 수 있고 분자 아카이브에서 물리 주소로 변환될 수 있다. 이는 도 14에 도시된 바와 같이 블록 인덱스를 순회함으로써 달성된다. 데이터 구조의 각각의 노드(가령, 주소 노드)는 B-트리 데이터 구조(가령, 도 15와 관련하여 아래에 설명됨)와 유사한 자식 블록 식별자 범위의 서열을 포함할 수 있다. 각각의 범위는 관심 블록으로의 경로 상의 다음 블록을 가리킨다. 이러한 방식으로, 시스템은 실제 데이터를 포함하는 분자 아카이브 내 블록을 참조하는 리프 노드에 도달하는 주소 노드 트리를 유지 관리한다. 즉, 리프 노드는 블록의 물리 주소를 식별하는 블록 ID를 저장하고, 블록의 해시를 추가로 저장할 수 있다. 내부 노드는 또한 해시, 가령, 이의 자식 노드의 해시의 연결을 포함하며, 따라서 해시 트리를 형성할 수 있다. 도 14에 도시된 바와 같이, 블록의 물리 주소는 위치 코드, 컨테이너 코드, 및 관련 정보를 인코딩하는 복수의 식별자를 참조하는 시작 및 끝 식별자로 정의되는 식별자 범위를 포함할 수 있다. 일반적으로, 블록 ID가 장애 방지를 활성화하기 위해 둘 이상의 물리 주소로 분해될 수 있다. 이 경우, 블록 ID에 저장된 정보는 둘 이상의 서로 다른 컨테이너 또는 둘 이상의 서로 다른 식별자 범위에 걸쳐 분산될 수 있다.
비트 블록에 대한 각각의 하이 레벨 연산은 화학적 방법 또는 물리적 단계에 의존하는 다수의 물리적 연산에 의존하고 그 결과를 낳는다. 이러한 화학적 또는 물리적 프로세스를 조정하기 위해 두 가지 유형의 소프트웨어 도구가 사용될 수 있다. 먼저, 최적화 도구는 블록 작업을 최적화된 물리적 작업 세트로 변환한다. 그런 다음, 번역 도구는 물리적 작업을 기술자 또는 자동화 장치에 의해 실행될 세부적인 작업 프로그램으로 변환하고, 비트 블록에 대한 작업과 물리적 및 화학적 작업 간의 변환기를 설계 및 구현하는 것을 포함할 수 있다.
본 명세서에 기재된 시스템 및 방법은 아카이브의 보존 및 표적화된 발견 및 쿼리를 제공한다. 본 개시가 아카이브의 많은 부분의 디코딩을 필요로 하지 않는 특정 표적화된 액세스 작업을 수행하기 위해 데이터 블록 및 데이터 구조를 활용한다는 것이 중요하다. 대신, 본 발명의 시스템 및 방법을 사용하면, 아카이브에 대한 결합 작업 및 그 밖의 다른 구조를 계산할 필요성을 최소화하면서, 선택적으로 그리고 증분적으로, 표적화된 콘텐츠를 발견, 쿼리 및 판독하는 것이 가능하다. 최소화될 핵심 메트릭은 쿼리 서열을 충족하기 위해 디코딩된 총 비트 수이다.
도 15는 예시적인 구현에 따라, 컨테이너에 블록 식별(ID)과 연관된 데이터 블록을 저장하는 단계를 개략적으로 나타내는 흐름도(1500)를 도시한다. 단계(1502)에서, 복수의 블록이 획득된다. 각각의 블록은 심볼 스트링을 포함하고 하나의 블록 ID와 연관된다. 블록 ID는 특정 블록과 연관된 임의의 식별 특성 또는 심볼일 수 있다. 예를 들어, 이는 트리플 형태의 시맨틱 주석일 수 있다. 일부 구현예에서, 블록 ID는 정수, 스트링, 위치, 트리플, 속성의 리스트, 또는 시맨틱 주석이다. 예를 들어, 블록에 포함된 심볼 스트링의 처음 X개의 심볼은 해당 블록에 대한 숫자 ID를 나타낼 수 있다.
단계(1504)에서, 블록(단계(1502)에서 수신된 복수의 블록에 속하는 블록 중 하나)이 컨테이너에 할당된다. 컨테이너는 물리적 위치, 가령, 빈, 튜브 또는 핵산 분자가 저장될 수 있는 그 밖의 다른 물리적 저장 매체일 수 있다. 컨테이너는 단일 블록 또는 복수의 블록에 연결될 수 있다. 예를 들어, 하나의 컨테이너는 정보의 B 블록과 연관될 수 있다. 일부 구현예에서, 컨테이너는 복수의 서브-컨테이너를 포함할 수 있다.
단계(1506)에서, 블록은 컨테이너와 연관될 식별자 서열에 매핑된다. 이들 식별자는 식별자 범위 또는 식별자 범위의 서로 다른 여러 식별자로 구성된다. 식별자 범위는 범위 옆에 있는 식별자를 포함하는 구성요소 서열에 의해 특정된다. 일부 구현예에서, 각각의 개별 식별자는 식별자 범위가 2개의 정수로 특정될 수 있도록 별개의 정수와 연관된다. 복수의 식별자 서열의 개별 식별자 서열은 블록에 저장된 심볼 스트링의 개별 심볼에 대응한다. 각각의 식별자 서열은 대응하는 복수의 구성요소 서열을 포함한다. 이들 구성요소 서열 각각은 별개의 핵산 서열을 포함한다.
단계(1508)에서, 복수의 식별자 서열의 개별 식별자가 구성된다. 예를 들어, Q 식별자 서열의 세트는 특정 컨테이너와 연관된다. 이들 Q 식별자 서열의 서브세트 V는 앞서 기재된 다양한 방법에서 설명된 바와 같이 블록의 정보를 나타내도록 물리적으로 구성될 수 있다. 단계(1510)에서, 단계(1508)에서 구성된 식별자는 할당된 컨테이너에 저장된다. 예를 들어, 할당된 컨테이너는 블록에 저장된 정보를 나타내는 V개의 식별자를 보유한다. 컨테이너의 신원 및 이와 연관된 복수의 식별자 핵산 서열은 연관된 블록 ID를 사용하여 결정되도록 구성된다. 일부 구현예에서, 신원은 연관된 블록 ID를 사용하여 각각의 컨테이너의 신원의 액세스를 용이하게 하도록 설계된 데이터 구조에 저장된다. 예를 들어, 데이터 구조는 B-트리, 트라이 또는 배열 중 하나이다. 일부 구현예에서, 데이터 구조의 적어도 일부는 인덱스에 디지털 정보와 함께 저장된다. 인덱스는 제2 컨테이너와 연관된 제2 복수의 식별자 서열을 포함한다. 일부 구현예에서, 인덱스는 자기 저장 장치, 광학 저장 장치, 플래시 메모리 장치 또는 클라우드 저장소에 저장된다.
일부 구현예에서, 인덱스는 B-트리 데이터 구조를 포함한다. 이 경우, B-트리의 각각의 노드는 제2의 복수의 식별자 서열의 별개의 복수의 식별자(즉, 단계(1508)에서 구성된 식별자의 세트와 상이함)를 포함할 수 있다. 이 프로세스는 B-트리를 검색하여 구별되는 복수 식별자의 ID를 결정하는 것을 포함한다. 구체적으로, B-트리에서 특정 블록 ID를 검색하는 것은 제1 노드를 포함하는 구별되는 복수의 식별자를 선택하고 제1 노드의 값을 읽는 것을 포함한다. 식별자를 선택하고 노드의 값을 읽는 단계는 후속 노드에서 반복될 수 있다. 후속 노드를 포함하는 구별되는 복수의 식별자의 신원은 제1 노드의 값과 관련하여 블록 ID에 의해 결정된다. 예를 들어, 제1 노드는 B-트리의 루트 노드이고 노드를 선택하고 읽는 프로세스는 B-트리의 리프 노드의 값이 읽힐 때까지 계속된다. 리프 노드의 값은 블록 ID에 대한 블록이 있는지 여부를 통신하도록 구성된다. 블록 ID가 존재하는 경우, 컨테이너의 신원 및 상기 블록(가령, 식별자 범위)을 포함하는 복수의 식별자 핵산 서열의 신원이 사용자 또는 시스템에 전달될 수 있다.
일부 구현예에서, 인덱스는 트라이 데이터 구조이다. 이 경우, 트라이의 각각의 노드는 제2의 복수의 식별자 서열의 구별되는 복수의 식별자를 포함할 수 있다. 일부 구현에서, 블록 ID는 심볼 스트링이고 트라이의 각각의 노드는 심볼 스트링의 가능한 프리픽스에 대응한다. 특정 블록 ID에 대한 트라이를 통한 경로가 존재하는 경우, 대응하는 블록의 물리 주소(컨테이너 및 식별자 범위로 구성됨)는 해당 경로의 리프 노드에 의해 특정될 수 있다. 트라이의 각각의 중간 노드는 별도의 개별 복수의 식별자로 표현될 수 있으며 딸 노드의 개수, 딸 노드가 나타내는 심볼, 및 딸 노드의 물리 주소(컨테이너 신원 및 식별자 범위 또는 식별자 범위로 구성됨)에 관한 정보를 포함할 수 있다. 그런 식으로, 트라이는 본 명세서에 기재된 액세스 및 판독 작업을 사용하여 B-트리와 유사하게 DNA에서 탐색될 수 있다. 방법(1500)은 제2 복수의 식별자 서열을 포함하는 식별자의 풀로부터, 일련의 프로브를 사용하여, 물리 주소를 액세스하는 단계를 더 포함할 수 있다.
일부 구현예에서, 데이터 구조는 배열이다. 이 경우, 배열의 각각의 원소는 제2의 복수의 식별자 서열의 구별되는 복수의 식별자를 포함한다. 배열 내 각각의 원소는 블록 ID에 대응할 수 있으며 해당 블록 ID의 물리 주소(컨테이너 신원 및 식별자 범위 포함)를 포함할 수 있다.
물리 주소는 블록 ID로 본질적으로 구성되어, 블록 ID가 추가 데이터 구조에 물리 주소를 저장하지 않고 물리 주소로 매핑될 수 있다. 예를 들어, 블록 ID는 물리 주소와 연관된 복수의 식별자 서열의 모든 식별자 서열에 의해 공유되는 복수의 구성요소 서열에 매핑된다. 블록과 연관된 복수의 식별자 서열은 (예를 들어, 도 13과 관련하여 기재된 바와 같이) 연속적으로 정렬된 식별자 핵산 서열을 포함할 수 있으므로, 상기 복수의 식별자 서열은 범위의 첫 번째 및 마지막 식별자의 신원을 포함하는 식별자 범위에 의해 대응하는 물리 주소에서 특정된다. 첫 번째 및 마지막 식별자는 정수로 나타날 수 있다. 복수의 식별자(가령, 블록과 연관된 식별자)는 순차적일 수 있는 프로브 시리즈를 사용하여 액세스될 수 있다. 프로브는 액세스가 PCR을 통해 실행되도록 PCR 프라이머이거나, 액세스가 친화성 풀다운 분석을 통해 실행되도록 친화성 태깅된 올리고뉴클레오타이드일 수 있다.
블록 ID가 위치인 구현에서, 상기 위치는 부모 심볼 스트링의 대응하는 블록에 의해 표현되는 심볼 스트링 내 위치일 수 있다. 상기 부모 스트링은 예를 들어, 또 다른 심볼 스트링에서 패턴의 발생을 카운트하거나 찾기 위한 데이터 구조를 포함한다. 이하에서 논의되는 바와 같이, 상기 데이터 구조는 BWT(Burrows-Wheeler Transform), 접미부 배열, 접미부 트리 또는 역 인덱스일 수 있다.
데이터 구조는 블록에 저장되어 접미부 트리 기반 접근 방식을 사용하여 데이터에서 패턴 발생을 결정하고, 찾고, 카운트하는 것을 보조할 수 있다. 접미부 트리에서, 블록은 접미부 트리의 노드를 나타내도록 구성된다. 접미부 트리는 루트 노드에서 리프까지의 모든 경로가 심볼 스트링 S의 접미부를 나타내는 트라이이다. 트라이의 가장자리는 각각의 경로를 포함하는 심볼의 서브스트링을 나타낸다. 접미부 트리는 모든 블록이 접미부 트리 내 노드에 대응하고 자신의 딸 노드에 대한 정보를 포함하는 식별자 핵산 라이브러리로 나타낼 수 있다. 예를 들어, 딸 노드에 대한 정보는 각각의 딸 노드로 이어지는 가장자리를 포함하는 심볼의 서브스트링과 딸 노드를 포함하는 블록의 물리 주소를 포함한다. 루트 노드는 규정된 블록, 가령, 제1 블록일 수 있다. 패턴의 멤버쉽, 카운트, 또는 위치에 대해 쿼리하는 것은, 루트 노드에 대응하는 블록의 식별자를 액세스하고, 여기에 포함된 정보를 디코딩하며, 여기에 포함된 정보 및 쿼리 패턴에 기초하여 다음 블록의 물리 주소를 결정하고, 대응하는 쿼리를 만족시킬 어떠한 다운스트림 블록(또는 노드)도 남지 않을 때까지 또는 리프 노드에 도달할 때까지 프로세스를 계속함으로써, 접두부 트리를 따르는 경로 따르는 것을 포함한다. 전자의 경우, 스트링 S에 쿼리 패턴이 존재하지 않는다. 후자의 경우, 리프 노드에 대응하는 블록이 쿼리 패턴의 카운트 또는 위치를 포함하도록 구성될 수 있다.
데이터 구조는 블록에 저장되어 역 인덱스 접근 방식을 사용하여 데이터에서 패턴 발생을 결정하고, 찾고, 카운트하는 것을 보조할 수 있다. 역 인덱스에서, 심볼 스트링 S를 포함하는 심볼 알파벳에 대해 고정 길이의 각 가능한 서브스트링에 대한 블록이 존재할 수 있다. 각각의 블록은 S 내 대응하는 서브스트링의 시작하는 위치에 대한 정보를 포함할 수 있다. 블록 ID는 서브스트링에 대응하거나 정렬된 서브스트링의 위치에 대응하여, 서브스트링에 대응하는 블록의 물리 주소가 추가 정보 없이 확인될 수 있다. 쿼리 패턴은 반전된 인덱스의 서브스트링에 매핑될 수 있으며, 블록이 액세스되고 디코딩될 수 있다. 본 명세서에 포함된 위치 정보는 S 내의 쿼리 패턴의 카운트와 위치를 결정하는 데 사용될 수 있다. 반전된 인덱스는 고정 길이의 서브스트링으로 한정될 필요가 없다. 예를 들어, 이는 하나의 문서 또는 여러 문서에서 단어의 위치를 나타내는 데 사용될 수도 있다.
데이터 구조는 블록에 저장되어 FM-인덱스(full-text index in minute space) 기반 접근 방식을 사용하여 데이터에서 패턴 발생을 결정하고, 찾고, 카운트하는 것을 보조할 수 있다. FM-인덱스는 BWT(Burrows-Wheeler Transform)를 기반으로 하는 서브스트링 인덱스로, 접미부 배열과 유사하다. FM-인덱스는 빠른 서브-스트링 쿼리를 허용하면서 입력 데이터 또는 텍스트의 압축을 가능하게 하는 데이터 구조이다. FM-인덱스의 구성은 이하에서 상세히 기재된다. FM-인덱스는 압축된 데이터/텍스트 내에서 패턴의 발생 횟수를 효율적으로 찾고 각각의 발생 위치를 찾는 데 사용될 수 있다. 따라서, 일부 구현에서, 블록에 저장된 심볼 스트링은 제1 스트링보다 클 수 있는 제2 심볼 스트링 내 임의의 심볼 서브-스트링의 멤버쉽을 찾고, 카운팅하며, 및/또는 결정하는 것을 지원하도록 의도된 데이터 구조의 일부분이다. 데이터 구조는 FM-인덱스, 카운터 배열, 버로우즈-휠러(Burrows-Wheeler) 변환 또는 접미부 배열일 수 있으며, 이들 데이터 구조 각각은 도 16-19를 참조하여 이하에서 더 상세히 기재된다. 일부 구현예에서, 데이터 구조는 예를 들어 제2 스트링이 저장되는 컨테이너와 별개인 하나 이상의 컨테이너의 구별되는 세트에 저장된다.
앞서 언급한 바와 같이, 데이터 구조는 스트링 S를 스트링의 변환: bw(S)로 변환하는 BWT를 포함할 수 있다. 변환은 스트링 S를 검색하는 데 도움이 되는 특정 속성을 가진다(도 26-32와 관련하여 아래 설명 참조). 일반적으로, BWT는 변환되지 않은 스트링 S에 비해 구현하기 더 쉬운 방법을 통해 압축에 적합한 방식으로 변환에서 정렬된 입력 심볼/비트의 순열 또는 무손실 변환으로 간주될 수 있다. BWT는 입력 스트링 S의 심볼를 재배열하여 bw(S)를 형성하는 순방향 변환; 및 BWT bw(S)에서 원래 스트링 S를 재구성하는 역방향 변환의 한 쌍의 변환을 포함한다.
일반적으로, 길이n을 갖는 입력 스트링 S = s 1 , s 2 , ... , s n 에 대해, S의 심볼이 순서화된 알파벳 Σ (가령, 영어 알파벳, 양의 정수의 세트, 캐릭터 또는 심볼의 임의의 세트, 또는 이의 조합)으로부터 선택된다. 순방향 변환은 이 입력 스트링 S에 대해 다음과 같이 진행된다. 스트링 s$가 생성되고 여기서 $는 순서화된 알파벳Σ에서 발생하지 않는 특수 심볼이며 전체 순서에 따라 알파벳의 다른 심볼보다 작은 것으로 간주된다. 예를 들어, 영어 알파벳의 경우, 총 순서는 $, A, B, C, ... X, Y, Z일 것이다. 개념적으로 크기가 (n+1)×(n+1)인 행렬 M은 스트링s$의 모든 순환 왼쪽 시프트인 행을 포함한다. 행렬 M은 s의 회전 행렬이라고 지칭될 수 있다. 스트링의 왼쪽 시프트는 스트링의 첫 번째 심볼을 스트링의 끝으로 이동시키고 나머지 모든 심볼을 왼쪽으로 한 위치씩 이동시키는 것을 수반한다. 이 왼쪽 시프트는 s$의 모든 가능한 순환 왼쪽 시프트가 M에 포함될 때까지 반복된다(도 16의 왼쪽 참조). 행렬 M은 Burrows-Wheeler 변환 중에 명시적으로 구성할 필요가 없습니다. 그런 다음, M의 행은 사전순으로 정렬되어, 왼쪽에서 오른쪽으로 그리고 알파벳 Σ에 정의된 순서에 따라 행을 읽고, 이때, $가 순서의 첫 번째로 간주된다. $Σ의 어떠한 심볼보다도 작고 스트링에서 한 번만 나타나기 때문에 최종 정렬된 행렬 M'$s인 첫 번째 행을 포함한다(도 16의 오른쪽 참조). 행렬 M'의 마지막 열은 $를 포함하는 열 L에 대응하는 반면, 버로우즈-휠러(Burrows-Wheeler) 변환 bw(s)는 (L', r)과 같으며, 여기서 L'M'의 마지막 열을 판독하고 심볼 $ 을 생략시킴으로써 얻어진 스트링이고, r은 마지막 열 내 심볼 $의 위치이다.
도 16은 예시적인 구현에 따른, 스트링S = "abracadabra"에 대한 BWT의 예시적인 예를 도시한다. 정렬되지 않은 12×12 행렬 M이 왼쪽에 표시되며 S$의 각 순환 왼쪽 시프트가 있어 S의 11개 심볼과 추가 심볼 $에 대해 12개의 행을 생성한다. 도 16의 오른쪽은, $가 S$의 모든 심볼의 순서에서 첫 번째로 정의되고, 스트링의 나머지가 영어 알파벳의 순서에 따라 정열되기 때문에, $로 시작하는 스트링 "$abracadabra"에 대응하는 첫 번째 행을 갖는 12×12 행렬 M'의 정렬된 버전을 나타낸다. 심볼 a로 시작하는 5개의 행(문자 a가 단어 "abracadabra"에 5번 나타나기 때문에)은 다음 심볼(가령, 두 번째, 세 번째, 네 번째, 다섯 번째 심볼)에 따라 알파벳 순서로 정렬된다. 이러한 행렬 M을 변환하여 M'을 도출하는 프로세스가 접미부 정렬 또는 오른쪽 정렬이라고 할 수 있다.
F로 표시된 정렬된 행렬 M'의 첫 번째 열을 읽으면 S에 있는 모든 심볼의 정렬된 서열인 스트링 "$aaaaabbcdr"이 제공된다. 동일한, 그러나 첫 번째 캐릭터 $가 없는 스트링이 F'로, 즉, "aaaaabbcdr"로 표현된다. 출력 스트링 L'은 마지막 열을 판독하고(L ("ard$rcaaaabb")), 심볼 $을 배제함으로써 획득되며, 따라서 L'은 "ardrcaaaabb"와 동일하다. 마지막 열에서 심볼 $의 단일 등장의 위치가 3과 동일한 r로 표시된다. 출력 스트링 L'은 압축 설정에서 특히 유용한 로컬한 동종 속성을 가지고 있다. 구체적으로, 도 16의 마지막 열 L의 마지막 6개의 심볼이 압축 방식을 통해 고도로 압축될 수 있는 고도로 반복적인 스트링 "aaaabb"를 형성한다는 점에서 로컬한 동종 속성이 명백하다. 이 로컬 동종 속성은 BWT에 내생적인데, 왜냐하면 오른쪽 맥락(즉, 접미부)에 따라 스트링이 알파벳 순으로 정렬되기 때문이다.
이때 접미부 배열(SA)이 사용될 수 있다. 길이 n 심볼의 스트링 s에 대해 구성된 접미부 배열 sa[0, n - 1]은 사전순으로 i번째 접미부의 위치를 sa[i]에 저장한다. 접미부 위치 sa[i]는 log2(n)와 동일한 비트 수로 인코딩될 수 있으며, 접미부 배열 sa이 이진으로 직렬화될 수 있다. 이 직렬화는 접미부 배열 내 접미부 위치의 각각의 비트 표현을 연결하고 식별자의 각각의 비트 표현을 구별되는 컨테이너에 저장하는 것을 포함한다.
도 17은 예시적인 구현에 따른, 동일한 스트링의 BWT와 비교하여, 스트링 S = "abracadabra"에 대한 예시적인 접미부 배열을 도시한다. 도 17은 심볼 $이 추가된 입력 스트링 S인 스트링 S$의 모든 접미부를 보여두며, 여기서 심볼 $은 전체 심볼 순서에서 첫 번째로 정의된다. 각 접미부는 스트링 S$의 각 위치에 대해 해당 위치의 심볼와 다음 모든 심볼를 취함으로써 획득된다. S$에서 각 접미부의 시작 위치인 대응하는 접미부 위치는 도 17의 두 번째 열에 있다. 예를 들어, 맨 위 행의 첫 번째 접미부는 접미부 위치 0을 가지므로 전체 스트링 S$ 또는 "abracadabra$"이다. 맨 위 행의 두 번째 접미부는 접미부 위치 1을 가지므로 첫 번째 위치 또는 "bracadabra$" 다음에 시작하는 스트링 S$ 부분이다. 나머지 접미부도 비슷하게 결정된다.
BWT가 사전순으로 행을 정렬하는 것을 포함하는 것처럼, 도 17의 첫 번째 열로부터의 접미부가 알파벳 순서에 따라 사전순으로 정렬되고 도 17의 세 번째 열에 나열되고 대응하는 접미부 위치는 도 17의 네 번째 열에 나열된다. 여기에서 접미부 "$"는 정렬된 접미부 배열의 첫 번째 행에 항상 있을 것인데, 왜냐하면 심볼 $가 사전 순서에서 첫 번째로 정의되기 때문이다. 열 4의 정렬된 접미부 위치 목록은 물리적으로 저장된 접미부 배열일 수 있다.
도 17의 마지막 두 열은 도 16에 도시된 바와 같이 BWT로 변환된 동일한 입력 스트링에 대한 정렬 회전 행렬 M' 및 대응하는 마지막 열 L을 나타낸다. 세 번째 열의 정렬된 접미부는 행렬 M'의 행에 대응하고, 행렬 M'의 각각의 행에 대해 대응하는 정렬된 접미부는 심볼 $까지 포함하는 심볼 세트이다. i번째 행에 대한 마지막 열 L의 모든 심볼 L[i]는 도 17의 동일한 행(즉, i번째 행)에서 접미부 위치 sa[i] 앞에 오는 입력 스트링 s의 심볼에 대응한다. 그러나 접미부가 전체 스트링인 경우(즉, sa[i] = 0) $가 선행 심볼로 사용된다. 이러한 방식으로 SA에 대한 접미부를 정렬하는 것은 BWT에 대해 M의 행을 정렬하는 것과 동일할 수 있다. 각 구조 간의 관계는 다음 방정식으로 공식화된다:
Figure pct00001
수학식 1
이 관계는 회전된 행렬 M' 의 행과 스트링 s의 접미부 사이에 전단사 대응이 있음을 보여준다. 스트링 s의 접미부 배열이 주어지면 BWT에 대한 스트링 L을 유도하는 데 선형 시간이 걸린다.
도 18 및 19는 예시적인 구현에 따라 본 명세서에 기재된 데이터 구조를 구현하는 랩 예를 보여준다. 이 랩 예제는 378개 구성요소의 구성요소 라이브러리 크기를 사용하여 구현되며, 이 구성요소는 파티션 구성표(3, 3, 3, 3, 3, 3, 3, 357)에 따라 8개 수준으로 세분화된다. 이 라이브러리에 대응하는 트라이에 대한 팬아웃은 처음 7개 레벨에 대해 값 c = 3을 취한 다음 마지막 레벨에 대해 값 c = 357을 취한다. 총 780,759개의 고유 식별자가 이 구성요소 라이브러리로 인코딩될 수 있다(즉, 37 × 357 = 780,759). 일부 구현예에서, 예를 들어, 그러한 식별자를 작성하고 접근을 실현 가능하고 강력하게 만들기 위한 오류 수정 코드를 설계할 때 기술 제약이 있기 때문에 이러한 식별자가 모두 인덱스된 스트링 s의 심볼를 인코딩하는 데 사용되는 것은 아니다. 도 18 및 도 19에 도시된 예는 예시 목적으로만 도시되며, 본 개시내용은 임의의 수의 레벨에 대해 임의의 크기의 구성요소 라이브러리에 적용가능하다는 것이 이해될 것이다. 용어 "컨테이너(container)"는 종종 본 개시내용에서 물리적 구획을 지칭하지만, 도 18 및 19와 관련하여 설명된 컨테이너가 구별되는 구획에서 반드시 물리적으로 분할될 필요는 없는 핵산 분자 세트를 지칭한다.
도 18은 예시적인 구현에 따른, 스트링의 버로우즈-휠러 변환의 인코딩의 예시적인 표현을 도시한다. 이 예에서, 컨테이너는 동일한 7 구성요소 길이 접두부를 공유하고 마지막 레이어에서 분할된 357개의 가능한 구성요소 중 마지막 구성요소에 따라 자신을 구별하는 식별자 그룹을 나타낸다. 동일한 7개의 "기본" 레벨을 공유하는 식별자는 예를 들어 단일 자체 조립 반응에서 식별자를 다중화하여 단일 컨테이너에서 병렬로 구성된다. 37 = 2,187개의 컨테이너가 있으며 각각의 컨테이너는 식별자 구성을 위해 마지막 계층에서 사용할 수 있는 357개의 구성 요소에 따라 357개의 고유 식별자를 포함할 수 있다. 7개의 기본 레벨이 병렬로 구성될 때 마지막 계층에서 고유한 구성요소를 갖는 식별자의 수와 동일한 양으로 복제될 수 있다.
357개의 가용 식별자 중에서 컨테이너당 350개의 식별자만을 사용하는 저중량 코드북이 구현될 수 있다. 일반적으로, 컨테이너당 식별자의 수가 임계값보다 작은 한, 낮은 가중치 코드북은 컨테이너당 사용 가능한 식별자의 수에 비해 컨테이너당 임의의 적절한 수의 식별자를 사용할 수 있다. 코드북은 350개의 식별자를 25개의 식별자 블록으로 분할하여 컨테이너당 14개의 블록을 생성한다. 각각의 블록은 코드워드에 대응할 수 있다. 각각의 컨테이너는 일부 정보 비트를 인코딩하는 12개의 데이터 코드워드와 오류 수정 코드를 구현하는 2개의 EDAC(오류 감지 및 수정) 코드워드로 분할될 수 있다. 각각의 코드워드가 25개의 사용 가능한 식별자 중 2개의 식별자를 설정하는 경우 300개의 가능한 코드워드 구성(25개 선택 2)은 1바이트(8비트) 인코딩을 허용하므로 오류 수정이 있는 컨테이너당 96개의 소스 비트가 허용된다. 2,187개의 컨테이너 세트에 대해 26,244바이트의 정보를 인코딩할 수 있으며 오류 수정을 위한 4,374바이트가 포함된다.
213 = 8,1922비트(1킬로바이트)와 동일한 크기 n의 이진 스트링 s가 주어지면, 버로우즈-휠러 변환이 스트링 s의 인코딩에 사용될 수 있다. 스트링 s의 BWT 길이(즉, BWT(s))는 스트링 s의 길이와 동일하다, 특히 이 예에서 n = 213이다. s의 BWT를 구축하기 위해 교육 스타일 알고리즘이 사용될 수 있다. 저중량 코드북에 따르면 각각의 컨테이너는 12바이트 또는 96비트의 정보(각각의 데이터 코드워드에 대해 1바이트 또는 8비트)를 인코딩한다. 길이가 8,192비트인 BWT인 s의 BWT는 86개의 컨테이너(8,192비트 나누기 컨테이너당 96비트의 천장값)로 직렬화된다. 크기 w = 96 비트의 블록은 각각의 컨테이너가 BWT(들)의 블록을 인코딩하도록 정의될 수 있다. 또한 BWT(들)의 블록(96비트)당 특정 심볼 값의 실행 카운트를 저장하는 카운터 배열이 인코딩될 수 있다.
도 19는 예시적인 구현에 따른, 도 18의 버로우즈-휠러 변환으로부터 유도된 카운터 배열을 인코딩하는 예시적인 표현을 도시한다. 카운터 배열은 BWT의 심볼 수와 길이가 동일한 213 = 8192 크기의 수를 저장하기에 충분한 길이 b = 13 비트의 블록 또는 카운터로 나뉜다. 따라서 컨테이너는 12개의 코드워드 및 추가 2개의 edac 코드워드를 갖고 floor(96/13) = 7 카운터를 저장할 수 있다. 이 예에서, 카운터 배열의 각각의 블록은 s의 BWT 내 블록, BWT s 에 대응할 수 있고, 해당 위치의 접두부에서 1의 수를 저장한다. 이 관계는 카운터 배열을 c[0,floor((n - 1)/w)](길이 floor((n - 1)/w) + 1을 갖는 카운터 배열 c)로 정의하기 위해 공식화되며, 따라서, c[i] (주어진 블록 또는 카운터에 대해, c의 i번째 블록)은 접두부 BWT s [0, i × w - 1]에 1의 수를 저장한다. 따라서 c[0](c의 첫 번째 블록)은 0과 같다. 주어진 카운터 c[i]는 위치 floor(i/7)의 컨테이너에 저장되고 i번째 컨테이너 이전의 BWT s 의 일부에서 발생하는 1의 수(비트 값 1)를 카운트한다.
BWT s 는 길이 n = 213 비트이고, 각각의 카운터는 13비트와 동일한 log2(n) 비트로 인코딩될 수 있다. 카운터 배열 c는 컨테이너당 7개의 카운터를 할당함으로써 바이너리로 직렬화되는데, 각각 13비트의 7개의 카운터는 96비트의 컨테이너당 최대 스토리지보다 적은 총 91비트와 같기 때문이다. 따라서, 13비트로 표현되는 주어진 카운터 c[i]는 floor(i/7)라고 라벨링된 컨테이너에 저장되어 0부터 컨테이너를 카운팅한다.86개의 컨테이너는 s의 변환, BWT s 를 변환을 저장하므로 배열 c를 형성하는 총 86개의 카운터가 존재한다. 총 86개의 카운터는 13개의 컨테이너에 걸쳐 저장된다(컨테이너당 86개의 카운터를 7개의 카운터로 나눈 값의 천장값). 도 19는 이러한 예시적인 분포를 그래프로 도시한다.
카운터 배열에 대해 앞서 기재된 바와 같이, 동일한 스트링 s에 대한 접미부 배열의 접미부 위치는 13비트로 인코딩될 수 있다(log2(n) bits). 접미부 배열은 컨테이너당 7개의 접미부 위치를 저장하여 이진수로 직렬화된다. 위와 같은 예에서 주어진 접미부 위치 sa[i]는 컨테이너 floor(i/7)에 있으며 0부터 컨테이너를 카운팅한다. 접미부 배열은 ceiling(8,192/7) 컨테이너, 즉, 1,171 컨테이너와 동일한 ceiling(n/7) 컨테이너를 취한다.
앞서 기재된 데이터 구조는 총 1,270개의 컨테이너(BWT의 경우 86개 + 카운터 배열의 경우 13개 + 접미부 배열의 경우 1,171개)에 저장된다. 이러한 컨테이너 사용량은 구성요소에 따라 사용 가능한 2,187개의 컨테이너의 일부이다. 이 예에 사용된 라이브러리 전체 대상 라이브러리는 BWT 라이브러리 L BWT , 카운터 라이브러리L C 및 접미부 라이브러리L SA 표기법에 따라 세분화될 수 있다. 일부 구현예에서 이 세분화는 논리적이거나 암시적이므로 이들 라이브러리의 액세스는 병렬로 발생할 수 있다. 병렬 액세스의 경우, 각각의 라이브러리에 대한 쿼리가 결합될 수 있다.
위의 예에서, BWTs의 비트 위치 x까지 포함하는 비트 값 '1'의 총 발생 횟수인 rank1(x)를 구하는 것은 다음을 포함한다. 먼저, 블록 위치 z = floor(x/w)인 BWTs에서 해당 비트 위치의 블록을 계산하며, 여기서 w = 96은 BWTs의 블록 크기이다. 두번째로, LBWT의 컨테이너 위치 z에 있는 컨테이너에 액세스하여 해당 블록을 읽고 그 안에 인코딩된 데이터를 디코딩하여 위치 x까지 포함하는 '1'의 비트 값 수의 제1 카운트 nBWT를 계산한다. 세번째로, 컨테이너당 7개의 카운터가 있으므로 LC의 컨테이너 위치floor(z/7)에 있는 카운터 배열에서 해당 카운터 z를 판독하고 그 안의 데이터를 디코딩하여 비트-값 '1'의 수가 비트 위치 x까지 포함하는 경우 제2 카운트 nC를 계산할 수 있다. 마지막으로, 제1 카운트와 제2 카운트의 합을 취한다((rank1(x) = nBWT + nC). 이 방법은 rank0(x) = x - rank1(x) + 1이기 때문에, 0에 대해 순위를 계산하도록 확장될 수 있다.
이 예에서, 카운터 배열의 i번째 블록은 BWT의 i번째 블록까지 특정 심볼 값을 카운트하지만, 다른 실시예에서, 카운터 배열의 i번째 블록은 BWT의 i번째 블록까지 특정 심볼 값을 카운트할 수 있다. 이러한 차이는 nC가 위치 z 대신 위치 z-1의 카운터에 대응하는 위의 세 번째 단계만 변경할 것이다. 또는, 단계는 블록 z를 통해 '1'의 비트 값의 총 수를 카운트하도록 구성되고, 그런 다음 블록 z 내의 위치 x 이후에 발생하는 '1'의 비트 값 수를 빼도록 단계를 구성할 수 있다. 일반적으로 BWT 블록을 카운터 블록 f(z)에 매핑하는 것은 방법의 효율성에 영향을 주지 않고 정의할 수 있다. 또한 이 예에서 사용된 컨테이너에 속하는 식별자는 구성 요소를 각각 바인딩하는 일련의 프로브로 효율적으로 액세스할 수 있도록 구성되어 있음을 이해해야 한다(각 컨테이너의 식별자는 공통적으로 7개의 구성 요소의 배타적 집합을 공유하기 때문에). 또한, 컨테이너에 포함된 정보는 컨테이너당 2개의 연관된 edac 코드워드로 인해 특정 허용 오차로 수정 가능하도록 구성된다. 일반적으로 식별자에 대한 카운터 배열과 BWT의 서로 다른 매핑이 정의되었을 수 있다.
핵산 서열에 저장된 데이터의 효율적인 판독 및 액세스 작업
인코딩된 정보를 나타내기 위해 식별자에 액세스하고 읽을 수 있다; 판독 및 액세스 동작은 도 20-22와 관련하여 설명된다. 식별자 라이브러리 L이 주어지면, 판독 연산 Read(L)이 수행되어 L에 포함된 식별자 집합을 완전히 판독할 수 있고 액세스 연산 Access(L,Q)을 수행하여 적절한 쿼리 공식화 Q를 특정함으로써 L로부터 식별자를 선택할 수 있다. 라이브러리 L를 판독하는 것은 L로부터 식별자의 랜덤 서브세트를 획득하는 프로세스를 지칭하며, 각각의 식별자는 다중도(또는 복제수)를 가진다. 이 프로세스를 실행하기 위해 DNA 시퀀서가 사용될 수 있다. DNA 시퀀싱을 사용하는 판독 방법은 다음의 두 가지 파라미터로 정의된다: 시퀀싱 작업이 단일 실행에서 샘플링하고 보고할 수 있는 L의 서브세트의 최대 크기, 이른바 L의 크기에 독립적인 리드(read)의 수, 및 판독될 수 있는 식별자의 최대 길이, 리드 길이(read length). 특정 식별자가 판독 프로세스에서 샘플링되는 횟수를 복제 카운트 또는 이 특정 프로세스 실행에서 해당 식별자의 커버리지라고 지칭된다. 용어 "액세스" 및 "쿼리" 모두는 본 개시내용에서 핵산 분자의 서브세트, 데이터 또는 그 세트로부터의 정보를 표적화하기 위한 프로세스에 사용됨을 이해해야 한다. 이들 용어는 본 명세서에서 상호교환적으로 사용될 수 있다.
R max 식별자의 최대 랜덤 판독 처리량을 갖는 기술이 주어지면, 함수≤f(R max , δ)는 식별자에 다중성을 갖는 L이, 무시할 수 있는 실패 확률 ≤ 1/|L| δ 의 필요충분조건은 |L| ≤ f(R max , δ)로 완전히 판독될 수 있도록 정의될 수 있다. 즉, 라이브러리 L은 동일한 식별자 서열을 갖는 중복된 식별자 분자를 가지고 있으므로 f는 무시할 수 있는 실패 확률로 편안하게 읽을 수 있는 별개의 식별자의 수를 나타낸다. 예를 들어, 현재 기술은 랜덤 리드 수 R max
Figure pct00002
25 × 106 및 150개 뉴클레오티드의 리드 길이를 지원한다. 이 기술에 대한 ≤f(R max , δ)의 합리적인 추정은 L의 모든 구별되는 식별자를 샘플링할 때 10-6보다 작은 실패 확률을 보장하기 위해 25 × 104이다.
더 작은 라이브러리의 경우, 각각의 가능한 식별자의 존재 또는 부재가 혼성화 분석, 예를 들어 DNA 마이크로배열, CRISPR 기반 프로브 또는 PCR로 결정되는 비-랜덤 판독 프로세스가 수행된다. 이 비-랜덤 판독 방법은 예를 들어 크기가 1,000개 이하인 식별자의 라이브러리를 판독할 때 DNA 시퀀싱보다 빠르고 저렴할 수 있다.
식별자는 서로 다른 계층에 해당하는 구성 요소로 구성되므로 일부 특정 수준 또는 계층에서 특정 구성 요소를 가진 식별자에 액세스할 수 있다. 쿼리 공식은 논리 AND 및 OR로 구성된 정규식과 DAG(방향성 비순환 그래프), 액세스 프로그램 형식으로 조정되는 쿼리 트리라고 하는 트리 구조의 세트의 형태로 공식화된 매치-구성요소 연산자에 의해 작성된다. DAG는 식별자를 포함하는 다양한 컨테이너에서 화학 반응이 실행되는 순서를 특정할 것이다. 예를 들어, 도 13의 식별자의 조합 공간에 대한 쿼리가 다음과 같이 특정될 수 있다: 구성요소가 일치하는 모든 식별자(0 또는 2) 및 5 및 6. 이러한 표현식은 액세스 프로그램으로 조화될 때 이 조합 공간에 의해 정의된 라이브러리 내의 식별자 4 및 16를 액세스할 것이다. 액세스 프로그램은 연속적으로 수행되는 세 가지 반응일 수 있다. 구성요소 0 또는 2(가령, 다중 PCR 사용)가 있는 식별자에 대해 프로브를 사용하여 선택하는 첫 번째 반응이다. 첫 번째 반응에서 출력 핵산을 가져오고 프로브를 사용하여 구성요소 5가 있는 식별자를 선택하는 두 번째 반응. 마지막으로 두 번째 반응에서 출력 핵산을 선택하고 프로브를 사용하여 구성요소 6가 있는 식별자를 선택하는 세 번째 반응.
L의 서브세트를 액세스하기 위해, 선택자(i,c i' )는 i번째 레이어 내 구성요소의 전체 세트 C i 의 서브세트 c i' 의 구성원인 i번째 구성요소를 갖는 식별자로 제한한다. 선택자 s와 t는 L을 s와 t 모두와 매칭하는 식별자로 제한하는 선택자를 얻기 위해 함께 구성되어 AND 논리를 얻을 수 있다. AND 논리는 연속적인 레벨에 적용되며, 도 11 및 도 13의 시도와 같이 트리 T(L)에서 하나 이상의 하위 경로에 대한 선택을 구현하지만 라이브러리 L에 대해 특이성을 가진다. 위에서 논의한 바와 같이 , 액세스에는 예를 들어 PCR 또는 선호도 태깅이 포함된다. 식별자는 서로 다른 계층에 해당하는 구성 요소로 구성되므로 일부 특정 수준에서 특정 구성요소를 가진 식별자에 액세스할 수 있다. 쿼리 공식은 논리 AND 및 OR로 구성된 정규식과 DAG(방향성 비순환 그래프), 액세스 프로그램 형식으로 조정되는 쿼리 트리라고 하는 트리 구조의 세트의 형태로 공식화된 매치-구성요소 연산자에 의해 작성된다. DAG는 식별자를 포함하는 다양한 컨테이너에서 화학 반응이 실행되는 순서를 특정할 것이다.
m개의 선택자의 집합은 모든 m개의 선택자의 레벨이 구별되고 트라이 T(L)의 처음 m개의 레벨을 참조할 때 왼쪽 선택자 또는 5' 선택자라고 한다. 선택자 집합 σσ가 T(L)의 π이하 레벨을 액세스하는 적어도 하나의 왼쪽 선택자를 포함할 때 접근자라고 하며, 여기서 π는 액세스 작업을 위해 사용되는 화학적 방법, 가령, PCR의 파라미터이다. PCR의 경우, 두개의 PCT 프라이머 각각으로 하나의 구성요소를 표적화함으로써, 2개의 구성요소가 반응에서 표적화되기 때문에, π의 값이 2일 수 있다. 접근자는 결합되어 T(L)의 하위 트리인 쿼리 트리 Q를 형성한다.
도 20은 예시적인 구현에 따른, 트라이 T(L)에 대해 수행된 쿼리 트리(2000)의 그래픽 예를 도시한다. 트라이 T(L)은 트라이의 9개 하단 노드로 표시된 9개의 식별자의 조합 공간을 열거한다. 도 20에 도시된 바와 같이, 각각의 식별자는 다음의 2개의 구성요소를 가진다: 레이어 1로부터의 하나의 구성요소 및 레이어 2로부터의 하나의 구성요소. 쿼리 Q는 T(L)에 대해 수행되어 5개의 식별자, 그룹(2002a)의 3개의 식별자 및 그룹(2002b)의 2개의 식별자를 선택할 수 있다. 5개의 식별자에 도달하기 위해 5개의 경로를 구문 분석하는 대신 쿼리 Q에 축소된 경로 집합이 포함된다. 특히, 쿼리 Q에는 부분 경로 1개와 전체 경로 2개의 세 가지 경로 집합만 포함된다.
부분 경로는 루트(트라이에서 단일, 최상위 노드)에서 시작하여 내부 노드 중 하나(도 20의 T(L)의 중간 레벨 내 3개의 노드 중 하나)로 이어지는 T(L)의 하향 경로이다. 부분 경로는 길이 <M를 가지며 라이브러리 L의 식별자를 정의하는 데 사용되는 레이어 수이다. Q의 부분 경로에는 두 개의 노드만 포함되므로 π = 2 구성요소의 접근자만으로도 부분 경로를 특정하기에 충분하다. 도 20에 도시된 바와 같이, 부분 경로는 그룹(2002a)에서 3개의 식별자를 선택한다.
전체 경로는 루트에서 리프(트라이의 맨 아래 노드 중 하나, 고유한 식별자 서열을 나타냄)로 확장되는 T(L)의 하향 루트 대 리프 경로이다. 전체 경로는 길이= M 를 가진다. 두 개의 전체 경로는 각각 세 개의 노드를 포함하므로 하나는 π = 2 구성요소 중 하나와 구성요소 하나 중 하나인 2개의 접근자로 각각의 전체 경로를 특정하기에 충분하다. 도 20의 두 개의 전체 경로는 루트 노드와 첫 번째 레벨의 또 다른 노드를 공유하므로 두 개의 전체 경로는 크기 π = 2(루트에서 또 다른 노드로 이동하기 위해)의 접근자와 각각의 전체 경로의 말단에서 두 개의 구별되는 리프에 대한 두 개의 구별되는 선택자로 분해될 수 있다.
다시 말해, 쿼리 트리 Q가 L에 있는 식별자의 서브세트를 액세스하기 위해 실행될 때, 전체 경로가 단 하나의 리프(전체 경로에 의해 도달되는 리프)만 선택하고, 부분 경로가 복수의 리프(부분 경루의 전체 경로 범위에 의해 뻗어 있을 수 있는 리프)를 선택한다. T(L)의 리프와 L의 식별자 사이에는 전단사(일대일 페어링)가 있으므로 L에서 Q를 실행하면 쿼리 트리 Q에 의해 도달될 수 있는 T(L)의 리프가 나타내는 식별자가 선택된다. L Q 는 Q에 의해 선택된 L의 서브세트를 나타낸다. 도 20의 예에서, 쿼리 트리 Q는 L의 5개의 식별자를 선택하므로 L Q 는 그룹(2002a 및 2002b)에 의해 표시된 5개의 식별자를 포함한다.
Q가 액세스 방법에 의해 물리적으로 허용되는 것보다 더 많은 식별자를 인출할 수 있기 때문에 쿼리 트리는 단 하나의 화학 반응에 의해 구현되지 않을 수 있다. 예를 들어, 주어진 Q가 f(R max , δ)보다 더 많은 식별자를 선택하거나 Q가 π = 2보다 큰 심도를 가지므로 많은 접근자의 실행이 필요하다. 이들 문제는 노드가 쿼리 트리의 일부이고 에지가 연결된 노드 간의 입력/출력을 나타내는 DAG인 액세스 프로그램, 즉, 쿼리 트리에 의해 해결될 수 있다.
L에 있는 식별자의 임의의 서브세트 S는 대응하는 쿼리 트리 Q S 로 변환될 수 있다. S의 식별자에 대응하는 각각의 리프 x에 대해 Q S 는 먼저 T(L)의 임의의 x로 이어지는 전체 경로로 표시되는 트리이다. Q S 의 노드는 모든 자식(부모 노드에서 분기를 따르는 노드)이 Q S 에 속하거나 Q S 의 리프인 경우 전체로 표시된다. 그런 다음 Q S 에서 전체 노드의 모든 자식을 가지치기(pruning)하고 더 이상 잘라내기가 불가능할 때까지 이 단계를 반복하여 Q S 를 마무리한다. 나머지 노드는 S의 식별자를 정확히 선택하는 가장 작은 서브-트리인 T(L)의 연결된 서브-트리를 형성한다. 이 서브-트리를 구성하는 노드의 수는 서브-트리의 크기를 나타내며 |SM 노드가 상한인데, 왜냐하면 S에 대한 적절한 서브-트리의 가장 큰 인스턴스는 S의 각각의 식별자에 대응하는 모든 리프 x에 대해 길이 M의 구별되는 전체 경로를 포함하기 때문이다. 가지치기의 예로서, 도 20의 쿼리 트리 Q는 2002a의 세 식별자 모두가 서브세트 S의 일부이기 때문에 자식이 가지치기된 전체 노드로 간주되는 부분에서 끝나는 부분 경로를 가지고 있다.
일부 구현예에서, S는 L에서 연속 범위 R = [id[x], id[y]] of (y - x + 1) 식별자를 형성한다. R은 T( L)의 대응하는 연속 범위의 리프로 변환되고 Q S 를 생성하기 위한 위의 단계가 적용된다. 이진 트리 T(L) 내의 전체 및 부분 경로 세트에서 식별자의 인접 범위 R(리프로 표시됨)의 분해의 그래픽 예를 보여주는 예시적인 구현에 따라, 이 구현의 예가 도 21에 도시되어 있다. 맨 왼쪽 및 맨 오른쪽 경로는 각각 맨 왼쪽 및 맨 오른쪽 식별자 id[x] 및 id[y]로 이어지는 두 개의 전체 경로이다. 빈 원으로 표시된 노드는 트리가 바이너리인 경우 레벨당 두 개의 노드에서 내려오는 전체 서브-트리를 나타낸다. 각각의 레벨에서 노드(즉, 구성요소의 수)의 "팬-아웃"은 c로 표시되며, 이는 도 21의 예에서 2와 같다. R은 (M-1) 레벨당 최대 2(c-1) 경로로 구성된 Q S 에 의해 선택되므로 Q R 은 최대 2(M-1)(c-1) 조회된 경로 및 따라서 선택자로 구성된다. 경로의 수는 c 대신 계수 (c-1)을 기반으로 하는데, 왜냐하면 동일한 부모 노드에서 시작되는 일부 레벨 i에 c개의 부분 경로가 있는 경우 이러한 부분 경로는, 여전히 동일한 서브-범위를 커버하는, 상위 레벨에서의 공유되는 부모 노드에서 종료하는 더 짧은 부분 경로로 축소되거나 압출될 수 있기 때문이다.
일반 쿼리 트리 Q의 경우, 액세스된 식별자가 T(L)의 대응하는 리프 순서로 정렬되는 경우, 식별자는 대응하는 인접 리프 <(s1,t1), (...), (sn,tn)> 를 갖는 인접 식별자의 범위를 형성하며, 여기서 각각의
Figure pct00003
는 식별자/리프의 비어 있지 않고 연결되지 않은 최대 인접 서열이다.
적절한 쿼리 트리 Q S 는 (i) 쿼리된 부분집합 S를 만족하고, (ii) 특정 제한을 갖는 채택된 판독 기술에 따라 실행 가능하고, (iii) 판독 비용이 최소화되는 것이다. 일부 구현예에서는 QS가 S에 없고 자동 또는 수동 검사를 통해 사후 처리 단계에서 폐기될 수 있는 일부 위양성 식별자에 도달하도록 필요한 것보다 더 많은 식별자를 읽는 것이 유용하다. 쿼리 트리 Q S 에 대한 최소화된 실행 시간을 갖는 경우가, 가장 깊은 레벨로부터 시작하여, 현재 쿼리 트리에 의해 커버되는 리프의 총 개수가 f(R max , δ)(주어진 판독 방법의 단일 실행에서 판독될 수 있는 고유 식별자의 최대 개수)보다 작을 때까지 하나의 레벨 후 다른 한 레벨에서 트리Q를 가지치기 함으로써 구현될 수 있다. 노드 수가 최소화된 경우는 Q의 (제거될) 자식의 수 및 이들 자식의 제거로 인해 커버되는 추가 리프의 수의 함수로서 표현되는, 현재 쿼리 트리로부터 노드의 자식을 제거함으로써 유도되는 이득을 측정하는 모든 노드 u에 우선순위 prio(u)이 할당되는 탐욕 솔루션(greedy solution)에 의해 달성될 수 있다. 그런 다음 탐욕 솔루션은 가지치기된 쿼리 트리에 의해 커버되는 전체 리프 수가 f(R max ,δ)보다 클 때까지 우선순위에 따라 Q에서 노드를 제거함으로써 진행된다.
앞서 언급한 바와 같이, 액세스 프로그램은, 예를 들어 판독될 식별자 세트가 f(R max ,δ)보다 크거나 전체 식별자 세트를 시퀀싱하는 것이 엄청난 비용을 발생시키는 경우, 주어진 쿼리의 실행 가능서와 관련된 문제를 극복하는 데 사용될 수 있다. 액세스 프로그램 P는 방향성 비순환 그래프(DAG)이며, 여기서, (i) 각각의 노드가 액세스 또는 판독 작업이고, (ii) 각각의 방향성 에지가 두 개의 노드 간 입/출력을 나타내며(표적 라이브러리에 존재하는 식별자의 농도가 농후화될 가능성이 있음), (iii) DAG의 루트로의 입력이 본래의 식별자 라이브러리 L이고, (iv) DAG의 출력이 말단 노드의 수만큼의 라이브러리 L의 서브세트로 구성된다. 판독 작업이 실행될 때마다, P의 실행 가능성이 보장되고, 리드에 입력되는 식별자의 풀이 f(R max ,δ)보다 작은 크기를 가진다. 실행 가능성은 쿼리 트리를 실행하는 데 사용되는 컨테이너 내 식별자의 농도에 따라 달라지며, 이는 적어도 고정 값 m c 일 수 있다. 일부 구현예에서, 농도 요건을 충족하기 위해 표적 라이브러리 L의 식별자는 대략적인 상수 m r 에 의해 복제된다. 일부 구현예에서, l 길이의 하향 경로(루트에서 노드/리프로)로 구성된 쿼리 트리의 실행에서, 라이브러리 L은 l 개의 개별 컨테이너(가령, 웰-플레이트의 웰, 시험관)에서 분취량(샘플의 부피 분할)으로 분할된다. 각각의 식별자의 최소 농도 m c 는 여전히 각각의 분취량에서 충족될 수 있다. 분취는 하나의 컨테이너에서 l개의 컨테이너로 피펫팅하는 것을 포함하지만 자동화된 액체 처리 기계에 의해 자동으로 수행될 수도 있다. 라이브러리 L의 트라이 T(L)에 대한 l 길이의 독립 경로의 실행은 식별자당 m c × l 개의 복제본을 보장하는 m r = l 로 복제 작업을 수행하는 것을 포함한다. 그런 다음, 식별자를 l개의 개별 컨테이너로 분할하기 위해 l-way 분취 작업이 수행되며, 각각의 컨테이너는 식별자당 약 m c 개의 복제본을 가진다. l 길이 하향 경로에 대한 l개의 접근자는 이들 l개의 튜브에 대해 개별적으로 및/또는 병렬로 실행된다.
쿼리 트리의 경로가 비교적 짧은 구현에서, 동일한 컨테이너에서 병렬로 실행될 수 있으며, 단 하나의 반응 또는 적은 수의 반응을 필요로 한다. 일부 경로가 길고 일부 동일한 서브-경로 중 일부를 공유하는 구현에서, 일부 반응은 동일한 컨테이너에 병합되어 필요한 분취량의 수 l를 줄일 수 있다. 병합 반응은 쿼리 트리의 구조에 존재하는 대칭과 관련이 있으므로 액세스 프로그램은 쿼리 트리에서 가능한 병합을 감지하도록 구성될 수 있다.
도 22는 예시적 구현에 따라, 트라이 T(3)에 적용된 쿼리 트리 Q(2200)에 대한 이러한 병합 프로세스의 예를 보여주며, 여기서 문자 A 내지 I는 접근자를 나타내고 노드로 연결되지 않는 분기는 쿼리 트리(2200)에 존재하지 않는 전체 트라이(2200)의 경로이다. 도 22의 예에서, 쿼리 트리(2200)는 6개의 전체 경로: ADG, ADH, AFG, CDG, CDH 및 CFG를 포함한다. 모든 노드는 해당 노드를 라벨링하는 선택자 또는 접근자와의 화학 반응을 특정하고, 반응은 들어오는 반응(이전 노드)로부터의 식별자들에 걸쳐 실행된다. 쿼리 트리(2200)의 크기와 구조에 기초하여, 총 12개의 선택자가 결국 사용되며, 레벨당 최대 6개의 반응(자식 노드당 하나의 반응)이 필요하다.
도 22의 우측에 있는 쿼리-DAG(2202)는 쿼리 트리(2200) 내 공유 접미부를 병합한 결과이다. 쿼리-DAG(2202)는 AFG와 CFG 간에 공유되는 접미부 FG, ADG와 CDG 간에 공유되는 접미부 DG를 병합하고, ADH와 CDH 간에 공유되는 접미부 DH를 병합한다. 결과 쿼리-DAG(2202)는 6개의 접근자와 레벨당 2개 이하의 반응으로 구현된다. 노드의 많은 분취량이 팬아웃에 따라 달라지므로 쿼리-DAG(2202)는 레벨당 최대 2개의 컨테이너를 사용하여 최대 2-way 분취 작업으로 구현되며, 따라서 레벨 당 최대 2-way 복제 작업으로 구현된다.
일반적으로 액세스 프로그램은 l개의 하향 경로(선택자)로 구성된 쿼리 트리를 사용하여 구현된다. 일부 구현예에서 쿼리 트리는 얕다, 즉, 경로의 길이가 p≤π이며, 여기서 π는 판독 기술에 따라 앞서 정의한 바와 같으며, 하나의 반응이 쿼리 트리를 실행하는 데 충분하다. 쿼리 트리는 경로의 OR 논리, 즉 선택자의 결과로 구성되므로, 선택자를 동일한 컨테이너에 병렬로 적용할 수 있다. 일부 구현예에서, 쿼리 트리는 π보다 긴 일부 경로가 있으며 실행 시 구별되는 (p/π) 접근자의 AND에 의해 실행되어야 한다. 그러나 이들 제한은 쿼리 트리가 대응하는 하향 경로에서 발생하는 하나 이상의 반복을 포함하는 구현에서 극복될 수 있다. 반복의 형태는 도 21과 관련하여 위에서 설명된 바와 같으며, 반복은 액세스 작업에 대응하는 쿼리 트리에서 둘 이상의 경로 사이에서 공유되는 접미부이다. 2개의 경로가 도 21의 (2200)의 두 경로 ADG 및 CDG의 DG 접미부와 같이 접미부 s를 공유할 때 |s| 선택기의 마지막 서열을 공유하고, 따라서 두 개의 경로에 의해 선택되는 식별자 세트가 동일한 컨테이너로 병합될 수 있다. 이 프로세스는 쿼리 트리 Q S (가령, 2200)를 쿼리-DAG D S (가령, 2202)로 변환하는 것을 포함하며, 변환은 Q S 에서의 경로의 동일한 접미부의 축소를 포함한다. D S 에서의 노드는 접근자(π-길이 선택자)로 라벨링되며, 각각의 노드는 서브-경로에 따라 컨테이너에서 병합되는 식별자에 걸쳐 대응하는 접근자를 적용함으로써 수행되는 반응을 나타낸다. 액세스 프로그램에 의해 병렬로 실행될 반응의 수는 D S 의 각각의 레벨에 있는 노드의 수와 같다.
일부 구현예에서, 액세스 프로그램은 구성하는 경로의 OR 논리인 쿼리 트리를 갖고, 구성하는 (p/π) 접근자들을 AND 논리에서 조합함으로써 p≤L의 쿼리 경로 길이 가 실행된다. 액세스 프로그램은 길이가 최대 p인 r 경로의 실행을 포함하며, 각각 최대 r개의 접근자(경로당 하나의 접근자)의 (p/π) 세트의 서열에서 레벨별로 분해될 수 있다. 이러한 각각의 세트는 컨테이너에서 작동하는 하나의 반응을 통해 실행된다. 이 구현은 예를 들어 경로가 일부 접두부를 공유하는 경우(따라서 함께 실행될 수 있는 경우) 또는 경로의 부분들을 병합하는 것이 분취 및 복제 작업의 횟수(따라서 병렬 반응의 수)를 감소시키는 경우 액세스 프로그램의 실제 비용을 과다-산정한다. m개의 리프를 가진 쿼리 트리 Q에 의해 특정된 액세스 프로그램의 실행 시간은 깊이를 π로 나눈 값에 비례한다: (1/π) × depth(Q). 액세스 프로그램은 쿼리 트리 Q의 π 레벨당 하나의 반응을 실행함으로써 진행되며, 여기에는 가능한 구별되는 컨테이너에 걸쳐 많은 접근자를 실행시키는 것이 포함될 수 있다. 실행 시간은 복제 및 분취에 의해 소요된 시간을 설명한다. 일부 구현예에서, 쿼리 트리 Q는 π의 배수인 레벨에서 노드를 유지하고 단일 심볼로 간주되는 길이 π의 메타-구성요소를 형성하기 위해 π-구성요소의 서브-경로를 축소함으로써 축소된다. 모든 π 레벨에서 c π 경로가 탐색되므로 축소된 트라이의 깊이는 L/π이고 팬아웃은 c π 이다. 노드는 팬아웃 f를 가지며, 부모 노드로부터의 입력이 f번 복제된다. 쿼리가 트리 Q로부터 파생된 쿼리-DAG D에 따라 실행되는 구현에서, 실행 시간은 (1/π) × depth(D)에 D의 노드에 기초하여 앞서 결정된 복제 시간을 더하고, 각각의 노드의 팬아웃을 고려함으로써 근사된다. 앞서 언급된 바와 같이 쿼리-DAG의 정의별로, depth(D) = depth(Q) 및 |D| ≤ |Q| 이기 때문에, 이 실행 시간은 Q 에 대한 실행 시간보다 짧을 수 있다.
액세스 프로그램의 설정 시간은, 접근자가 π개의 구성요소로 형성된다고 가정할 때, Q의 크기를 π으로 나눈 값에 비례한다. 설정 시간은 다음의 크기를 상한으로 가진다: |Q|, 또는 m 개별 경로의 길이를 π로 나눈 값의 합: π: (1/π) × m × depth(Q) 중 작은 값. Q S 에 대응하는 쿼리-DAG D S 가 Q를 대신하여 사용되어 설정 시간을 특정할 수 있다.
본 명세서에서 논의된 판독 및 액세스 작업은 DNA 기반 저장 시스템에서 다른 작업을 수행하기 위한 기초를 형성한다.
핵산 서열에 저장된 데이터의 순위화 및 인출 작업
도 23 및 24는 예시적인 구현에 따른, 스트링 내의 특정 위치까지 포함하는, 데이터 스트링의 범위에 대한 심볼 또는 비트 값의 카운트를 결정하기 위해 순위 연산을 수행하는 예시적인 방법들을 도시한다. 순위화 작업은 앞서 기재된 복수의 액세스 및 판독 작업을 포함한다. 유사하게, 인출 작업은 심볼 스트링의 서브세트를 검색하기 위해 수행될 수 있다. 위에서 논의된 바와 같이, 본 개시의 양태는 이진 스트링을 저장, 인덱싱 및 검색하는 것에 관한 것이다. 길이 n 이진 비트의 스트링 S는 크기 c의 세트에서 선택된 M개의 구성요소로 구축된 식별자 L S 의 풀을 통해 식별자 핵산 분자로 표시될 수 있다. 예를 들어, 크기 |L[M]|의 조합 라이브러리 L은 c L n과 동일하게 설정되므로, 레이어의 수 M은 log c n으로 근사된다. 스트링 S는 S의 위치 x에 있는 비트 S[x]의 비트 값이 1인 경우 위치 x의 식별자 id[x]가 L S 에 속하도록 식별자 풀로 인코딩된다. 일부 구현예에서, 이는 1의 비트 값에 대응하는 L의 유일한 식별자가 구성되고 후속적으로 풀링되는 반면, 0의 비트 값에 대응하는 L의 식별자는 구성되지 않는다.
본 개시는 이진 스트링에 대해 순위화 연산 rank(x)을 수행하고, 접두부 스트링 S[0,x] (위치 x에 선행하고 이를 포함하는 비트 스트링 S의 일부분)내 1의 개수의 카운트를 반환하는 시스템 및 방법을 포함한다. 비이진 스트링(nonbinary string)의 경우, 순위화 연산은 접두부 스트링에서 특정 심볼 값을 갖는 심볼의 수의 카운트를 반환한다. 본 명세서에 설명된 예 중 일부는 이진 스트링에 관한 것이지만, 본 개시내용은 2개보다 많은 가능한 심볼 값을 갖는 심볼 스트링에 대한 순위화 연산에 적용된다는 것이 이해될 것이다.
일부 구현예에서, b는 이진 비트 스트링 S의 길이를 나타내는 정수 n을 인코딩하는 데 필요한 비트 수이다. 비트 수 b는 log2(n + 1)에 의해 추정된다. 스트링 S는 크기가 b의 블록으로 나뉘며, 스트링 S에서의 위치 x를 포함하는 블록은 B(x)로 나타낼 수 있다. 스트링 S의 한쪽 끝에서 0부터 카운팅하여, 정렬된 인덱스 B(x)는 floor(x/b)와 같다. 순위 계산은 두 단계로 분해될 수 있다: (i) S[0, b × B(x) - 1]에서 1의 개수 카운트(x를 포함하는 블록 B(x)에 선행하는 블록 내 1 개수); 및 (ii) S[b×B(x), x]에서 1의 개수 카운트(x까지 포함하여 블록 B(x) 내 1의 개수). 이들 단계는 어떤 순서로든 수행할 수 있다. 그런 다음 두 단계의 카운트를 합산하여 위치 x의 순위를 결정한다. 일부 구현예에서, 연산 rank(x)는 병렬로 실행될 수 있는, 두 번의 액세스 작업과 두 번의 판독 작업으로 구성된 액세스 프로그램을 통해 구현되는데, 액세스 작업과 판독 작업의 각각의 쌍이 구별되는 표적 라이브러리로 적용되기 때문이며, 이때 구별되는 표적 라이브러리는 각각의 단계 (i) 및 (ii)에 대응한다.
본 명세서에 기재된 예 중 일부는 위의 두 단계에 관한 것이지만, 본 개시내용은 동등한 결과에 도달하는 순위를 결정하는 다른 방법을 포함한다. 예를 들어, 일부 구현예에서, 위에서 설명한 두 단계가 약간 수정된다. 구체적으로, 순위 계산은 다음의 두 가지 상이한 단계로 분해될 수 있다: (i) S[0, (b + 1) × B(x) - 1]에서 1의 개수(x를 포함하는 블록 B(x)을 포함하여 이를 선행하는 블록 내 1의 개수)를 카운트, 및 (ii) S[x +1, (b + 1) × B(x)] 내 1의 개수(단계 (i)에서 포함되지만 x 이후에만 발생되는 블록 B(x) 내 1의 개수)를 카운트. 그런 다음, 단계 (i) 및 (ii)에서 이중으로 계산된 1의 개수를 제거함으로써, 위치 x에서의 순위를 얻기 위해 단계 (ii)의 카운트가 단계 (i)의 카운트로부터 빼진다. 보다 일반적으로, 스트링 S는 b와 동일할 필요가 없는 블록 크기 w로 분할될 수 있다. 일부 구현예에서, 연산 rank(x)는 병렬로 실행될 수 있는, 두 번의 액세스 작업과 두 번의 판독 작업으로 구성된 액세스 프로그램을 통해 구현되는데, 액세스 작업과 판독 작업의 각각의 쌍이 구별되는 표적 라이브러리로 적용되기 때문이며, 이때 구별되는 표적 라이브러리는 각각의 단계 (i) 및 (ii)에 대응한다.
도 23은 예시적인 구현에 따른, 본 명세서에 기재된 방법에 따른 식별자를 사용하여 저장된 n = 30 비트의 이진 스트링 S에서 rank(22)의 계산을 위한 예를 도시한다. 따라서 이 연산은 S에서 x = 22까지의 위치에서 비트 값 1의 수를 결정한다. 이 예에서 표적 라이브러리 L S 는 S에서 값 1로 설정된 13비트에 대응하는 13개의 식별자를 포함한다. 식별자는 각각 3개의 구성요소로 구성되며, 이는 도 23의 각각의 트라이의 3개 레벨에 대응한다. 따라서 도 23에서 스트링 S 위의 트라이 T S [3]은 13개의 리프(1비트에 대한 13개의 식별자에 대응), 리프 위의 3개 레벨, 및 c = 4의 팬아웃으로 구성된다. 기존 리프로 이어지는 경로(비트 값 1에 대응하는 식별자)만 그려진다.
도 23의 첫 번째 쿼리 트리는 위에서 논의된 바와 같은 순위 연산의 단계 (ii)에 대응한다. 이 예에서 블록 크기 b는 log(n + 1) = 5이고 위치(22)를 포함하는 블록은 B(22) = 4이다. 쿼리 트리 Q R (트리 구조에서 두꺼운 선으로 표시됨)은 위치(20)에서 위치(22)로의 범위 R[20, 22]을 커버한다. Q R 은 각각 1, 1 및 0의 비트 값에 대응하는 위치 20, 21 및 22에서 세 개의 리프를 선택하는 세 개의 전체 경로로 구성된다. 이들 값 중 단 2개만 1이므로, 위치 20 및 21에서의 식별자, id[20] 및 id[21]가 각각 검색된다. 이 쿼리 트리 Q R 에 대한 카운트는 위에 명시된 단계 (ii)에 따라 위치 x = 22까지 포함하는 B(22) 내 1의 개수에 대응하는 n S = 2로 설정된다.
B(22)에 선행하는 블록에서 나머지 1은 이제 순위 연산의 단계 (i)에 따라 결정될 수 있다. 이 단계는 각각 b = 5 비트의 ceiling(n/b) = 6개 카운터를 인코딩하는 이진 카운터 스트링 C를 참조하여 수행된다. C는 본 명세서에 기재된 방법에 따라 식별자를 사용하여 저장되며 따라서 S와 유사하게 액세스되고 판독될 수 있다. C의 각각의 5비트 카운터는 각각의 카운터에 선행하는 S의 접두부에서 1의 개수를 카운트한다. 참조를 위해 C 아래에 S가 복제된다. 첫 번째 카운터에 선행하는 S의 접두부가 없기 때문에 C의 첫 번째 5비트 카운터는 이진수로 0과 같다. 두 번째 5-비트 카운터는 2개의 1을 포함하는 S의 첫 번째 블록을 따르기 때문에 이진수로 3과 동일한 "00011"이다. C의 비트는 C에 적용된 쿼리 트리 Q C 의 c = 4 팬아웃에 대응하는 4비트의 그룹을 나타내기 위해 점선 수직선으로 분리된다. C에 적용된 Q C 는 B(22)의 접두부인 S[0,19]에서 1비트의 개수의 카운터에 대응하는 범위 C[20,24]에서 식별자를 선택한다. Q C 는 노드 u에서 끝나는 하나의 부분 경로와 위치(24)의 비트를 커버하는 하나의 전체 경로로 구성된다. 위치(24)의 식별자 id[24]는, 해당 비트가 0으로 설정되어 있으므로 존재하지 않고, 따라서 전체 경로가 아무 것도 검색하지 않는다. 노드 u에서 끝나는 부분 경로는 각각 위치(22와 23)에서 두 개의 식별자 id[22]와 id[23]을 검색한다. 카운터 C[20,24]의 비트는 B(22)의 접두부인 S[0,19] 내 1의 개수에 대응하는, 정수 값 6을 인코딩하는 "00110"을 판독한다. 이 쿼리 트리 Q C 에 대한 카운트는 위에서 설명한 단계 (i)에 따라 S에서 B(22)까지의 1의 개수에 대응하는 n C = 6으로 설정된다. 액세스 프로그램을 통해 이 예시적인 순위 연산을 실행하면 n S + n C = 2 + 6 = 8이 반환되며, 이는 S[0,22] 내 1=비트의 올바른 개수이다.
도 23에서 예시로 기재되고 도시된 바와 같이, 순위 계산은 두 단계로 분해될 수 있다: (i) S[0, b × B(x) - 1]에서 1의 개수(x를 포함하는 블록 B(x)에 선행하는 블록 내 1 개수)를 카운트; 및 (ii) S[b×B(x), x]에서 1의 개수(x까지 포함하여 블록 B(x) 내 1의 개수)를 더함. 이 연산은 길이가 n인 비트 스트링 S에 대해 형식화되고 다음 단계에 따라 실행된다. 1 단계에서는 블록 B(x)의 접두부인S[0, b × B(x) - 1] 내 1의 개수 n 1 (C)를 계산한다. 접두부는 특정 비트 또는 블록에 선행하는 비트를 지칭한다. 첫 번째 표적 라이브러리 L C 는 이진 스트링 C[1, b × B(n)], 스트링 S에 대한 카운터 스트링을 나타낸다. 카운터 스트링 C는 C[ib, (i + 1)b - 1]이 S의 값 rank(ib- 1)의 b 비트로 된 이진 표현을 저장하며, 여기서 i = 1, ... B(n) - 1이다. C의 길이 ≤ n(S의 길이 이하)를 가진다. C(0)은 정의에 따라 0과 같기 때문에 저장되지 않는다. 1 단계는 특정된 위치 x를 포함하는 블록 B(x)까지 S의 순위를 인코딩하는 C의 카운터에 대응하는 범위 R C = (id[b × B(x)], id[b × (B(x) + 1) - 1])에서 제1 라이브러리 L C 의 식별자를 인출하는 쿼리 트리 Q C 를 생성하는 것을 포함한다. QC는 log c n 정도의 깊이와 cL 정도의 크기를 가지며, 깊이 곱하기 팬아웃이며, 여기서 크기는 블록 크기 b와 무관하다. 1 단계는 다음 두 가지 작업을 통해 R C 로 구분된 C의 서브스트링을 구성하는 비트를 판독하는 액세스 프로그램을 만드는 것과 관련이 있다: Y = access(L C , R C ) (범위 R C 에서 L C 의 식별자를 액세스) 및 그런 다음 read(Y), 여기서 Y는 액세스 작업을 통해 획득된 식별자의 서브세트이다. 이 액세스 프로그램은 이전에 논의된 기준에 따라 실행 가능한데, 왜냐하면 판독 작업이 최대 b개의 식별자 범위에 걸쳐 실행되기 때문이며, 여기서 b는 f(Rmax, d)보다 작은 log(n) 차수입니다. 액세스 프로그램에 의해 검색된 식별자는 R C 로 구분된 C의 서브스트링에서 1비트의 위치를 나타낸다. 1 단계는 n 1(C)를 해당 위치만 1로 설정되는 b 비트의 이진 서브스트링로 인코딩된 정수 값으로 설정하여 끝난다.
2 단계는 위치 x를 포함하는 블록 B(x)에 대응하는 S의 서브스트링인 S[b × B(x), x] 내 1의 개수n 1 (R)을 계산하는 것을 포함한다. 제2 표적 라이브러리 L S 는 S의 대응하는 위치에 있는 비트 값이 1인 경우, 식별자가 물리적으로 존재하도록, 즉 id[x]가 존재하는 것의 필요충분조건이 S[x] = 1이도록 이진 스트링 S를 나타낸다. 1 단계는 위치 x까지 포함하는 S 내 블록 B(x)의 위치에 대응하는, 범위 R S = (id[b × B(x)], id[x])에서 제2 라이브러리 L S 의 식별자를 인출하는 쿼리 트리 Q R 를 생성하는 것을 포함한다. Q R 는 log c n 정도의 깊이와 cL 정도의 크기를 가지며, 깊이 곱하기 팬아웃이다. 1 단계는 다음 두 가지 작업을 통해 R S 로 구분된 S의 서브스트링을 구성하는 비트를 판독하는 액세스 프로그램을 만드는 것과 관련이 있다: X = access(L S , R S )(범위 R S 에서 L S 의 식별자를 액세스) 및 그런 다음 read(X), 여기서 X는 액세스 작업을 통해 획득된 식별자의 서브세트이다. 액세스 프로그램에 의해 검색된 식별자는 R S 로 구분된 S의 서브-스트링에서의 1비트의 위치를 나타낸다. 2 단계는 n 1(R)을 검색된 식별자의 수와 동일하게 설정하여 끝납니다. 순위 연산은 위상 1과 위상 2에서 각각 n1(C) + n1(R) 값을 반환함으로써 끝나는데, 여기서 순위는 0에서 위치 x까지의 범위에 있는 S 내 1비트의 개수다.
도 24는 예시적인 구현에 따른, 비트 스트링에 대한 순위화 연산을 수행하기 위한 흐름도(2400)를 도시한다. 도 23에 대해 위에서 설명된 방법 및 1 및 2 단계의 일반적인 경우가 흐름도(2400)의 방법에서 사용될 수 있다. 단계(2402)에서, 비트 스트링, 가령, 상기 S를 나타내는 식별자의 제1 풀이 획득된다. 단계(2404)에서, 카운터 심볼, 가령, 상기 C의 스트링을 나타내는 식별자의 제2 풀이 획득된다. 단계(2406)에서, 특정 값의 비트의 러닝 카운트를 나타내는 표적 식별자에 대해 순차적일 수 있는 제2 프로브 시리즈를 사용하여 제2 풀을 액세스함으로써 제1 카운트가 획득된다. 표적화된 식별자는 (1) 상기 특정 비트에 선행하는 w 비트의 모든 블록, 또는 (2) 상기 특정 비트를 포함하는 w 비트의 블록을 포함해 상기 특정 비트에 선행하는 w 비트의 모든 블록에 대해, 주어진 값의 비트의 개수의 러닝 카운트를 나타내는 카운터 심볼을 나타낸다. 단계(2408)에서, 제2 카운트가, 표적 식별자에게 순차적일 수 있는, 제1 프로브 시리즈를 이용해 제1 풀을 액세스함으로써, 획득된다. 표적화된 식별자는, 단계(2406)에서 카운트되지 않고 특정 비트에 선행하거나 특정 비트를 포함하는 비트를 나타내거나 (2) 단계 (2406)에서 카운트되지만 특정 비트에 선행하지 않거나 특정 비트를 포함하지 않는 비트를 나타낸다. 단계(2410)에서, 비트 스트링의 특정 비트의 순위는 (예를 들어, 카운트의 합 또는 차를 결정함으로써) 제1 카운트 및 제2 카운트로부터 획득된다.
비트 스트링의 각각의 비트는 비트 값과 비트 위치를 가진다. 각각의 풀은 고체, 액체 또는 고체 형태일 수 있으며 복수의 식별자 핵산 분자를 형성함으로써 형성된다. 각각의 식별자는 각자의 비트 위치에 대응하며 M개의 선택된 구성요소 핵산 분자를 물리적으로 조립함으로써 형성된다. M개의 선택된 구성요소 각각은 M개의 상이한 레이어로 분리되는 구별되는 구성요소 핵산 분자의 세트로부터 선택된다. 식별자는 비트의 스트링을 나타내도록 제1 풀에서 수집되어, 비트 값이 제1 풀 내 대응하는 식별자의 존재 또는 부재에 의해 지시되게 할 수 있다. 유사하게, 식별자의 제2 풀은 각각 카운터 스트링 내 비트를 나타내는 식별자를 수집함으로써 형성된다. 일부 구현에서, 제1 풀은 제2 풀과 동일하고, 다른 구현에서, 제1 풀 및 제2 풀은 별개이다.
일부 구현예에서, 제1 풀 내 대응하는 식별자의 물리적 존재는 1의 비트 값을 나타내고, 대응하는 식별자의 물리적 부재는 0의 비트 값을 나타낸다. 각각의 카운터 심볼은 b 카운터 비트의 스트링에 의해 나타날 수 있고, b는 함수 log2(n + 1)의 천장값에 의해 결정될 수 있으며, 이때 n은 비트 스트링의 길이이다. b 카운터 비트의 각각의 스트링은 특정 값, 예를 들어 1 또는 0을 갖는 비트 스트링의 모든 w 비트에 대한 비트 수의 러닝 카운트를 나타낼 수 있다. 카운터 심볼의 스트링은 n을 w 카운터 심볼로 나눈 천장값을 포함할 수 있으며 길이 n을 갖는 카운터 비트의 스트링으로 표현된다. 일부 구현예에서, 초기 카운터 심볼은 값 0을 가지며, 모두 값 0을 갖는 b 카운터 비트의 스트링으로 표현된다. 특정 비트가 w비트의 제1 블록 내에 있는 경우, w 비트의 제1 블록에 선행하는 러닝 카운트가 0이다.
제1 및 제2 카운트는 본 명세서에 설명된 판독 동작에 따라 각각의 쿼리로부터 표적 식별자를 판독함으로써 획득된다. 예를 들어, 제1 카운트는 (2406)의 표적화된 식별자에 대응하는 카운터 심볼 값을 판독함으로써 획득되거나, 제2 카운터가 (2408)의 표적화된 식별자를 판독함으로써 획득된다. 일부 구현예에서, 각각의 스트링의 첫 번째 인덱스는 0과 동일하게 설정된다. 단계(2408)에서 제1 카운트를 얻기 위해 사용된 카운터 심볼은 범위 0 내지 w × B(x) - 1 내에서 값 1을 갖는 비트의 스트링 내 비트의 개수에 대응할 수 있으며, x는 비트 스트링 내 특정 비트의 위치에 대응하며, B(x)는 x 나누기 w의 바닥값이다. 적어도 b 식별자는 제2 풀로부터 표적화될 수 있고, 표적화된 적어도 b 식별자는 범위 b × B(x) 내지 (B(x) + 1) - 1 내에 있을 수 있다.
일부 구현예에서, 제2 카운트는 범위 w × B(x) 내지 x 내에서 값 1을 갖는 비트의 스트링 내 비트의 개수에 대응하며, 이때 x는 비트 스트링 내 특정 비트의 위치에 대응하고, B(x)는 x 나누기 w의 바닥값이다. 단계(2408)에서, 제1 카운트가 특정 비트를 포함하는 w 비트의 블록에 대응하는 카운터 심볼을 나타내는 제2 풀로부터 쿼리된 식별자를 표적화함으로써 획득될 수 있으며, 단계(2412)의 제2 카운트는 (2408)에서 카운트되었지만 특정 비트를 선행하지 않거나 특정 비트를 포함하지 않는 비트를 나타내는 (2410)에서 표적화된 고유한 식별자를 표적화하고 카운팅함으로써 획득된다. 따라서, 제1 카운트로부터 제2 카운트를 뺌으로써, 순위가 (2414)에서 획득된다.
일부 구현예에서, 카운터 스트링 블록 크기 w가 비트 스트링 블록 크기 b와 동일하도록 설정될 수 있다. 대안으로, 카운터 스트링 블록 크기 w가 1로 설정될 수 있다. (2408)에서의 제1 카운트가, 특정 비트를 포함하는 w 비트의 블록에 대응하는 카운터 심볼을 나타내는 (2406)에서의 제2 풀에서 쿼리된 식별자를 표적화함으로써 획득될 수 있고, 순위는 제1 카운트와 동일하다. 따라서, 단계(2412 및 2414)가 방법으로부터 생략될 수 있다.
일부 구현예에서, 식별자 핵산의 제1 풀은 비트의 스트링의 번역을 나타내는데, 따라서 식별자의 존재 또는 부재가 비트의 스트링의 한 비트 값 또는 다른 비트 값과 직접적으로 상관되지 않고, 코드워드라고 하는 연속적으로 정렬된 식별자의 블록이 비트의 스트링 내 비트의 블록으로 번역될 수 있다. 코드워드는 고정된 개수의 가능한 고유한 식별자 핵산 분자 중에서 고정된 개수의 고유한 식별자 핵산의 존재를 포함한다. 추가 정보는 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 기록, 액세스, 및 판독하는 데 에러를 검출하고 정정하는 데 사용될 수 있다. 상기 추가 정보는 제1 및 제2 풀의 식별자에 저장된다.
일부 구현예에서, (2406)의 제1 카운트가 특정 비트를 선행하는 w 비트의 모든 블록을 나타내며, (2408)의 제1 프로브 시리즈가 (2406)에서 카운트되지 않고 특정 비트에 선행하거나 특정 비트를 포함하는 비트를 나타내는 제1 풀 내 하나 이상의 구별되는 식별자 핵산 분자를 표적화하며, 비트의 스트링 내 특정 비트의 순위는 (2410)에서 제1 카운트 및 제2 카운트를 합산함으로써 획득된다. 또 다른 구현예에서, (2406)의 제1 카운트가 특정 비트를 포함하는 w 비트의 블록을 포함하여 특정 비트에 선행하는 w 비트의 모든 블록을 나타내고, 제1 프로브 시리즈는 제1 풀 내에서 (2406)에서 카운트되지만 특정 비트를 선행하지 않거나 포함하지 않는 제1 풀 내 하나 이상의 구별되는 식별자 핵산을 표적화하며, 비트의 스트링 내 특정 비트의 순위가 (2410)에서 제1 카운트로부터 제2 카운트를 뺌으로써 획득된다.
일부 구현예에서, S에서 판독될 이진 블록의 크기가 조정된다. 블록 크기를 늘리면 C의 카운터 수가 줄어들어 C의 길이가 줄어든다. 예를 들어, w를 S의 이진 블록 길이로 설정함으로써 C의 길이는 (n/w)log(n) 정도가 되며, w는 2 단계에서 read(X)로부터 인출된 비트의 양이다. 상기의 분해에서, C의 크기는 w를 log(n)로 대략 동일하게 설정함으로써, S의 크기인 n보다 작거나 같도록 선택되었다.
방법(2400)에 의해 기재된 순위 연산이 비트의 이진 스트링에 초점을 맞추는 반면, 방법(2400)은 심볼의 스트링에도 적용될 수 있다는 것이 이해될 것이다. 일부 구현예에서, 비트 스트링은 심볼 스트링을 나타내며, 순위는 심볼의 스트링 내 특정 심볼에 대해 획득된다. 심볼 스트링 내 심볼은 심볼 값의 세트로부터 선택되며, (2404)에서의 카운터 심볼의 스트링은 특정 심볼 값을 갖는 심볼의 개수의 러닝 카운트를 나타낸다. 일부 구현예에서, (2404)에서 제2 식별자 풀이 존재하며, 각각의 제2 풀이 특정 심볼 값의 인스턴스의 수를 카운트하는 카운터 심볼의 상이한 스트링을 나타내며, 카운터 심볼의 각각의 상이한 스트링은 대응하는 특정 심볼 값의 인스턴스를 카운팅한다.
도 23의 상기 예 및 임의의 이진 순위화 연산은 대안적으로 S 내 0비트의 개수를 카운팅함으로써 실행될 수 있으며, 이 연산은 rank0(x)로 표시된다. rank0(x)는 rank0(x) = x - rank1(x) + 1로 계산될 수 있다. 순위화 연산은 심볼 값의 세트로부터 선택된 심볼의 스트링에 대해 수행될 수 있으며, 심볼의 스트링 내 특정 심볼에 대한 순위를 획득할 수 있다. 예를 들어, 카운터 심볼 스트링은 특정 심볼 값을 가진 심볼의 개수의 러닝 카운트를 나타낸다. 단계(2404)에서, 상이한 식별자 풀은 특정 심볼 값의 인스턴스의 개수를 카운트하는 카운터 심볼의 상이한 스트링을 나타내고, 카운터 심볼의 각각의 상이한 스트링은 대응하는 특정 심볼 값의 인스턴스를 카운팅한다.
일부 구현예에서, 주어진 순위화 연산을 수행하기 위해 판독되어야 하는 식별자의 개수는 순위화 연산이 큰 비트 스트링(예를 들어, 큰 입력 메시지)에 대해 수행되더라도 매우 작다. 예를 들어, 테라비트 크기 메시지에서 특정 비트를 순위화하려면 구성에 따라 40~100개 정도의 식별자를 읽는 것이 포함된다. 이 소량의 식별자를 사용하면, 고비용이 수반되는 DNA 시퀀싱과 같은 고처리량 방법을 사용하는 대신 DNA 마이크로배열 또는 PCR(가령, qPCR 또는 디지털 PCR)과 같은 저처리량 혼성화 방법으로 판독을 수행할 수 있다.
본 명세서에 기재된 DNA 기반 저장 시스템에서 수행될 수 있는 또 다른 작업은 예를 들어 정수 배열을 처리하기 위해 카운터 배열 C에서 하나의 항목을 검색하기 위해 상기의 프로세스를 확장하는 인출 작업이다. 각각 b 비트로 구성된 n 정수 배열이 주어지면, 배열은 b 고정 크기 표현으로 n 정수를 직렬화함으로써 이진 스트링로 변환될 수 있다. 직렬화로 인해 길이가 n 곱하기 b인 이진 스트링이 생성되기 때문에, 변환된 이진 스트링은 A[0, nb - 1]로 표현된다. A는 본 명세서에 기재된 방법에 따라 인코딩된 식별자 풀 L A 로 표현되며, 여기서 각각의 식별자는 A에서 비트 값 1에 대응하는 경우 물리적으로 구성됩니다(즉, id[x]의 필요충분조건은 A[x] = 1) 인출 작업은 범위 [x,y]에서 발생하는 정수를 반환하는 fetch(x,y)로 정의되며 범위와 스트링 길이에 의해 결정되는 위치(즉, i = x,... , y에 대한 위치 i × b)에서 시작하는 b-길이 이진 스트링에 의해 표현된다. 인출 작업은 첫 번째 위치 xb와 마지막 위치 (y+1)b - 1에 의해 제한되는 A의 서브-배열을 나타내는 L A 의 식별자를 액세스한다. 인출 작업은 하나의 액세스 작업과 하나의 판독 작업으로 구성된 액세스 프로그램에 의해 구현된다.
인출 작업을 위한 액세스 프로그램은 다음과 같이 실행될 수 있다. 표적 라이브러리 L A 는 앞서 기재된 대로 이진 스트링 A를 나타낸다. 앞서 설명한 대로, 첫 번째 위치 xb와 마지막 위치 (y+1)b - 1에 의해 제한되는 범위 R A (즉, R A = (id[x × b], id[(y+1)b - 1]))에서 식별자를 선택하는 쿼리 트리 Q A 가 생성된다. 범위 R A 는 범위 x 내지 y(즉, [x,y]) 내 위치에서 발생하는 입력 배열(직렬화되지 않은 정수 배열)의 정수를 나타내는 A의 모든 비트를 정확히 커버한다. R A 로 제한된 A 의 서브스트링은 본 명세서에 기술된 액세스 방법에 따라 액세스되고, 그 서브스트링에 포함된 식별자는 본 명세서에 기술된 판독 방법에 따라 판독된다. 이 액세스 프로그램은 log c nb와 동일한 log c A 차수의 깊이를 가지며 log c nb와 동일한 log c A 차수의 크기를 가진다. 범위 R A 의 크기는 (y - x + 1) × b 비트와 같다. 액세스 프로그램에 의해 검색된 식별자는 입력 정수 배열의 [x,y] 범위 내 위치에 저장된 y - x + 1 정수를 재구성하는 데 사용할 수 있다. 이 인출 작업은 (y-x) 정도의 실행 시간으로 실행될 수 있다.
도 25는 예시적인 구현에 따른, 심볼 스트링에 대한 인출 작업의 실행을 위한 흐름도를 도시한다. 앞서 기재된 방법 및 로직은 인출 작업을 수행하기 위해 도 25의 이 방법에서 사용될 수 있다. 심볼 스트링 단계(2502)는 심볼 스트링을 나타내는 식별자의 제1 풀을 획득하는 것을 포함한다. 단계(2504)는 제1 프로브 시리즈로 제1 풀을 액세스하는 것을 포함하며, 각각의 프로브는 제1 풀의 식별자의 구성요소를 표적으로 하여 제1 풀로부터의 식별자의 서브세트를 갖는 제2 풀을 생성한다. 단계(2506)는 제2 풀에서 식별자의 서브세트의 서열을 판독하는 것을 포함한다. 단계(2508)는 판독된 서열을 사용하여 심볼 스트링의 서브세트를 획득하는 것을 포함한다.
심볼의 스트링에서, 각각의 심볼은 심볼 값과 심볼 위치를 가진다. 일부 구현예에서, 단계(2502)는 복수의 식별자 핵산 분자를 형성하는 것을 포함하며, 각각의 식별자는 각자의 심볼 위치에 대응하고 M개의 선택된 구성요소 핵산 분자를 물리적으로 조립함으로써 형성된다. M개의 선택된 구성요소 각각은 M개의 서로 다른 레이어로 분리된 별개의 구성요소 세트에서 선택된다. 각각의 레이어의 구성요소는 도 13과 관련하여 설명된 바와 같이 논리적으로 정렬될 수 있다. 식별자는 심볼의 스트링을 나타내기 위해 풀에서 수집될 수 있으며, 따라서 심볼 값은 상기 풀 내 대응하는 식별자의 존재 또는 부재에 의해 표시된다.
일부 구현예에서, 단계(2504)에서, 제1 프로브 시리즈는 순차적이고 구성요소의 M개의 레이어를 나타내는 쿼리 트리의 부분적 또는 전체 하향 경로에 대응한다. 전체 하향 경로는 M 프로브를 포함하는 루트-리프 경로에 대응하므로 M 프로브의 순차적 시리즈는 단일 식별자를 대상으로 한다. 부분 하향 경로는 M보다 적은 수의 프로브에 대응하므로, 프로브의 순차적 시리즈는 상이한 서열을 갖는 다수의 식별자 집단을 표적으로 한다. 상이한 서열을 갖는 다수의 식별자 집단은 적어도 M번째 계층의 상이한 구성요소에 대응할 수 있다.
일부 구현예에서, 단계(2504)에서, 제1 풀에 쿼리하는 것은 제1 풀 내의 제1 레이어에서 제1 구성요소 핵산 분자를 포착하기 위해 프로브의 제1 순차 시리즈에서 제1 프로브를 사용하는 것, 제1 풀을 개별 구획에서 적어도 2개의 풀로 분리하는 것, 및 적어도 2개의 풀 내의 제2 레이어에서 구성요소 핵산 분자를 포획하기 위해 추가 프로브를 사용하는 것을 포함한다. 프로브의 제1 순차 시리즈는 서브세트를 포함하는 심볼 스트링의 원하는 부분을 획득하도록 설계될 수 있다. 바람직한 부분은 단계(2504)에서 획득된 서브세트에 밀접하게 대응할 수 있다.
일부 구현예에서, 단계(2502)에서 획득된 제1 풀은 적어도 2개의 복제 풀로 분할되고, 단계(2504-2508)는 상기 복제 풀 각각에 대해 실행된다. 제1 풀은 적어도 2개의 중복 풀로 분할되기 전에 (가령, PCR을 통해) 복제될 수 있다. 단계(2504)의 프로브는 PCR 프라이머일 수 있으며 액세스는 PCR에 의해 수행된다. 대안으로, 단계(2504)에서의 프로브는 친화성 태깅된 올리고뉴클레오티드일 수 있고, 액세스는 친화성 풀다운 분석에 의해 수행된다. 일부 구현예에서, 방법(2500)은 식별자의 중간 풀을 생성하기 위해 프로브의 서브시리즈로 식별자의 제1 풀에 액세스하는 단계를 더 포함한다. 중간 풀은 적어도 두 개의 복제 풀로 분할될 수 있다. 제1 중간 풀은 제2 중간 풀 또는 제2 풀을 형성하기 위해 프로브의 후속 서브시리즈로 액세스될 수 있다. 적어도 두 개의 중간 풀이 결합되어 또 다른 중간 풀을 형성할 수 있다.
일부 구현예에서, 인출 작업은 식별자의 판독을 위해 DNA 마이크로배열 또는 PCR(예를 들어, qPCR 또는 디지털 PCR)과 같은 혼종화 기반 접근법을 사용한다. 예를 들어 표적화된 식별자의 양이 적은 경우 저처리량 방법을 사용하는 것이 더 비용 효율적일 수 있다. 그러나 식별자의 큰 서브세트를 읽어야 하는 경우 고처리량 판독을 위해 DNA 시퀀싱이 사용될 수 있다.
핵산 분자에 저장된 데이터에서 패턴 검색
앞서 언급한 바와 같이, DNA 기반 플랫폼에서 수행될 수 있는 또 다른 작업은 스트링의 BWT 및 순위 작업에 의존하는 카운트 작업이다. 카운트 연산의 기초는 병렬로 실행될 수 있는 두 개의 순위화 연산을 사용하는 것인데, 이는 각각의 순위화 연산은 BWT와 카운터 배열의 다른 부분을 주장하거나 이러한 부분이 겹치고, 이들의 실행이 일부 연산의 결과를 재사용하도록 구조화될 수 있기 때문이다. 다음은 BWT, 카운터 배열 및 순위화 연산을 전개하는 검색 방법에 대해 설명한다.
본 명세서에 기재된 시스템에서 구현 가능한 데이터 구조로, 스트링에서 패턴 P의 발생 횟수를 카운트하기 위해 카운트 연산이 수행될 수 있다. 이 카운트 작업은 도 26-30과 관련하여 설명된다. 카운트 연산의 기초는 병렬로 실행될 수 있는 두 개의 순위화 연산을 사용하는 것인데, 이는 각각의 순위화 연산은 BWT와 카운터 배열의 다른 부분을 주장하거나 이러한 부분이 겹치고, 이들의 실행이 일부 연산의 결과를 재사용하도록 구조화될 수 있기 때문이다. 패턴 발생의 검색이 반드시 이진 검색을 통해 구현되는 것은 아니지만, 본 명세서에 기재된 시스템은 BWT, 카운터 배열 및 순위화 연산을 전개하는 검색 방법을 사용할 수 있다. 이들 작업/데이터 구조는 항목 검색을 계속 허용하면서 압축된 방식으로 저장될 수 있다.
카운트 연산은 예를 들어 메시지의 버로우즈-휠러 변환 행렬의 마지막 열인 비트 L의 스트링을 나타내는 식별자의 제1 풀을 획득함으로써 수행될 수 있다. 각각의 식별자는 본 명세서에 기재된 방법에 따라 조립되며 하나 이상의 프로브에 개별적으로 결합될 수 있다. 비트 스트링 L로부터 유도되고 특정 비트 값을 갖는 비트 수의 러닝 카운트를 나타내는 카운터 심볼 스트링을 나타내는 식별자의 제2 풀이 획득된다. 메시지 내 특정 비트 패턴의 카운트는 제1 및 제2 풀로부터 식별자를 선택적으로 액세스함으로써 얻어진다. 프로브 시리즈는 제1 및 제2 풀로부터 식별자를 액세스하는 데 사용된다. 러닝 카운트는 예를 들어 이하에서 기재될 LF 매핑을 사용함으로써, BWT 행렬의 제1 열 F를 재구성하는 데 사용될 수 있다.
도 26은 예시적인 구현에 따른, 예를 들어 메시지 또는 일부 다른 형태의 정보일 수 있는 이진 비트 스트링 S에서 특정 패턴 P의 발생 횟수를 카운트하기 위한 카운트 작업 방법(2600)에 대한 흐름도를 도시한다. S의 BWT L은 제1 풀의 식별자에 의한 표현을 통해 저장된다. 단계(2602)는 BWT L을 나타내는 식별자의 제1 풀을 획득하는 것을 포함한다. 단계(2604)에서 식별자의 제2 풀이 획득되고, 제2 풀의 식별자는 L로부터 유도된 카운터 심볼 스트링을 나타낸다. 단계(2606)에서, 제2 풀의 식별자는 L에서 비트 값 1의 총 발생 횟수를 나타내는 카운터 심볼을 나타내는 식별자를 검색하기 위해 본 명세서에 기재된 방법을 사용하여 풀에 액세스한다. 단계(2608)는 검색된 식별자로부터 카운터 심볼 값을 판독하여 L에서 각각의 비트 값의 발생의 총 횟수(가령, 이진 스트링의 경우 1 또는 0의 총 수)를 카운트할 수 있다. 단계(2610)에서, 버로우즈-휠러 행렬의 첫 번째 열 F는 단계(2608)에서 카운트된 총 수를 사용하여 구성된다. 단계(2612)는 패턴 P에서 마지막 심볼의 모든 발생을 나타내는 첫 번째 열 F의 범위 인덱스(즉, 길이가 p인 패턴에 대해 p번째 심볼)를 결정하는 것을 포함한다. 단계(2614)는 범위의 첫 번째 및 마지막 인덱스 h 및 z에서 순위를 계산하기 위해 제1 및 제2 풀로부터의 식별자를 액세스하는 것을 포함하며, 순위는 패턴 P에서 심볼 앞에 오는 심볼의 값(즉, p 내에서 (p-i)번째 심볼, 이때 루프 카운터 i가 초기에 1과 동일함)과 관련하여 결정된다. 단계(2616)에서, 각각의 인덱스에서의 순위가 선행 심볼((p-i)번째 심볼)의 값이 발생하는 첫 번째 열 F에서 새로운 범위의 인덱스를 계산하는 데 사용된다. 결정 블록(2618)에서, 순위(r h-1 r z )는 그들이 동일한지 여부를 체크하기 위해 비교된다. 순위가 동일한 것으로 결정되면(Y), 방법(2600)은 단계(2620)로 진행하고 스트링 S에 패턴 P의 발생이 없음을 나타내는 0의 카운트를 출력한다. 순위가 동일하지 않은 경우(N), 방법(2600)은 i가 p-1(패턴의 끝을 표시함)과 같은지 체크되는 결정 블록(2621)으로 진행한다. I가 p-1와 동일하면(Y), 방법(2600)은 패턴 P의 카운트가 z - h + 1인 것으로 결정되는 단계(2622)로 진행한다. I가 p-1와 동일하지 않으면(N) 방법(2600)은 루프 카운터 i가 1만큼 증분되는 단계(2623)로 진행하고, 프로세스는 단계(2614-2618)의 적어도 하나 이상의 반복을 위해 단계(2614)로 복귀한다. 단계(2612-2616)는 P의 첫 번째 심볼에 도달하고, 카운트가 단계(2622)에서 출력되거나, 스트링 S에서 패턴 P가 발생하지 않는 것으로 결정되고 0의 카운트가 단계(2620)에서 출력될 때까지 반복된다.
비트 스트링의 각각의 비트는 비트 값과 비트 위치를 가진다. 각가의 카운터 심볼은 직렬화된 카운터 배열인 카운터 심볼 스트링에 저장될 수 있다. 각각의 카운터 심볼은 비트의 스트링 L에서 매 w 비트마다, 특정 비트 값, 가령, '1'을 갖는 비트 수의 러닝 카운트를 나타내는 b 카운터 비트의 스트링에 의해 나타내어질 수 있다. 단계(2612)는 패턴 P의 p번째 비트 값의 발생의 F의 범위를 정의하는 첫 번째 위치 h 및 마지막 위치 z를 결정하는 것을 포함할 수 있으며, 여기서 범위는 h 및 z를 포함한다. 단계(2614)는 스트링 L 내 위치 h-1에서 패턴 P의 (p-i)번째 비트 값의 순위 r h-1 을 계산하는 것을 포함할 수 있으며, 여기서 루프 카운터 i는 초기에 1이다. 단계(2614)는 스트링 L의 위치 z에서 패턴 P의 (p-i)번째 비트 값의 순위 r z 를 계산하는 것을 더 포함할 수 있다. r h-1 이 rz와 동일한 경우, 메시지 내 패턴의 등장 횟수 카운트가 0으로 설정될 수 있다. 단계(2616)는 h를 (p-i)번째 비트 값의 F에서 (r h-1 + 1)번째 인스턴스의 인덱스로 설정하고 z를 (p-i)번째 비트 값의 F에서 r z 번째 인스턴스의 인덱스로 설정하는 것을 포함할 수 있으며, 여기서, 새로운 h와 z는 새로운 범위를 정의한다. h와 z가 재계산된 후, 루프 카운터 i는 1만큼 증분될 수 있고 단계(2614-2616)는 i = p-1이 될 때까지 반복된다. 단계(2614-2616)의 반복은 순차적으로 수행되거나, 예를 들어, 앞서 설명한 쿼리 트리 최적화 방법을 사용하여 병렬 반응으로 수행될 수 있다.
각각의 풀은 고체, 액체 또는 고체 형태를 가질 수 있으며 복수의 식별자 핵산 분자를 형성하여 형성될 수 있다. 각각의 식별자는 각자의 비트 위치에 대응할 수 있고 M개의 선택된 구성요소 핵산 분자를 물리적으로 조립함으로써 형성될 수 있다. M개의 선택된 구성요소 각각은 M개의 상이한 레이어로 분리되는 구별되는 구성요소 핵산 분자의 세트로부터 선택될 수 있다. 식별자는 비트의 스트링을 나타내도록 제1 풀에서 수집되어, 비트 값이 제1 풀 내 대응하는 식별자의 존재 또는 부재에 의해 지시되게 할 수 있다. 유사하게, 식별자의 제2 풀은 각각 카운터 스트링 내 비트를 나타내는 식별자를 수집함으로써 형성될 수 있다. 일부 구현에서, 제1 풀은 제2 풀과 동일하고, 다른 구현에서, 제1 풀 및 제2 풀은 별개이다.
일부 구현예에서, 제1 풀 내 대응하는 식별자의 물리적 존재는 1의 비트 값을 나타내고, 대응하는 식별자의 물리적 부재는 0의 비트 값을 나타낸다. 각각의 카운터 심볼은 b 카운터 비트의 스트링에 의해 나타날 수 있고, b는 함수 log2(n + 1)의 천장값에 의해 결정될 수 있으며, 이때 n은 비트 스트링의 길이이다. b 카운터 비트의 각각의 스트링은 특정 값, 예를 들어 1 또는 0을 갖는 비트 스트링의 모든 w 비트에 대한 비트 수의 러닝 카운트를 나타낼 수 있다. 카운터 심볼의 스트링은 n 나누기 w 카운터 심볼의 천장값을 포함할 수 있고, n 나누기 w의 천장값을 b에 곱한 값에 대응하는 길이를 갖는 카운터 비트 스트링으로 나타내어질 수 있다. 일부 구현예에서, 초기 카운터 심볼은 값 0을 가지며, 모두 값 0을 갖는 b 카운터 비트의 스트링으로 표현된다. 일부 구현예에서, 카운터 스트링 블록 크기 w가 비트 스트링 블록 크기 b와 동일하도록 설정될 수 있다. 카운터 스트링 블록 크기 w는 1로 설정될 수있다. 일부 구현예에서, 단계(2602)는 방법(2600)에서 생략된다.
일부 구현예에서, 식별자의 제1 풀은 L의 비트 블록으로 변환되는 연속적으로 정렬된 식별자의 블록에 대응하는 코드워드를 나타내는 스트링 L의 변환을 나타낸다. 제1 풀 내 식별자의 존재 또는 부재는 비트의 스트링 내 하나의 비트 값 또는 또 다른 비트 값과 직접 상관되지 않는다. 코드워드는 고정된 수의 가능한 고유 식별자 중 고정된 개수의 고유 식별자에 대응할 수 있다. 추가 정보가 저장될 수 있다. 예를 들어, 제1 및 제2 풀에서 식별자를 기록하고, 액세스하고, 판독할 때 오류를 검출하고 수정하는 데 사용되기 위해 추가 정보가 저장될 수 있다. 추가 정보는 제1 또는 제2 풀의 식별자에 저장될 수 있다.
길이 1의 패턴에 대해, 가령, 단순히 비트 값 1 또는 0인 경우, 단계(2614 내지 2618)는 생략될 수 있다. 길이 2의 패턴, 가령, '01' 또는 '11'의 경우, 반복이 필요하지 않기 때문에 단계(2618)을 생략할 수 있다. 방법은 첫 번째 열 F의 범위가 존재하지 않는 것으로 결정되고 카운트가 0으로 반환되는 경우 방법을 중지하는 것을 더 포함할 수 있다. 범위가 존재하지 않으면 패턴 P의 심볼이 스트링에 존재하지 않으므로 P가 0번 발생한다.
일부 구현예에서, 식별자의 제3 풀이 획득되고, 제3 풀의 식별자는 BWT로부터 유도된 접미부 배열 SA를 나타낸다. SA의 각각의 원소는 L의 대응하는 원소의 인덱스를 나타내는 적어도 log2(n) 비트의 비트 스트링으로 표현될 수 있다. 벙법(2600)은 범위의 인덱스의 최종 값 h와 z를 포함하여 이들 사이에서 접미부 배열의 원소에 대응하는 제3 풀 내 식별자를 액세스함으로써, 카운트가 0보다 크다고 가정할 때, 패턴의 등장을 찾는 것을 더 포함할 수 있다. 이들 인덱스는 발생 횟수 카운트가 반환될 때 최종 범위의 인덱스일 수 있다. 이들 단계는 인출 작업으로 수행될 수 있다.
일부 구현에서, 방법(2600)은 예를 들어 메시지일 수 있는 비트 스트링 S를 나타내는 식별자들의 제4 풀을 획득하는 단계를 더 포함한다. 패턴 P의 제1 위치의 컨텍스트는 제1 위치에 대응하는 제4 풀의 식별자 및 제1 위치를 둘러싸는 이웃 위치를 액세스함으로써 추출될 수 있다.
도 26과 관련하여 기재된 카운팅 방법의 대안으로서, 도 27은 예시적인 구현에 따른, 스트링 s에서 이진 패턴 P의 발생을 카운트하는, 카운트 작업을 위한 방법(2700)을 설명하는 흐름도를 도시한다. 패턴 P의 길이는 p비트이고 스트링 s의 길이는 n비트이다. 방법(2700)은 먼저 (2702)에서, 패턴 P의 마지막 심볼 P[p-1]이 0과 같은지 여부를 체크하는 조건부인 결정 블록을 포함한다. 마지막 심볼이 0과 같으면(Y) 단계(2704)에서 제1 인덱스 h는 0(가령, 버로우즈-휠러 행렬의 첫 번째 열에서 첫 번째 위치)으로 설정되고, 마지막 인덱스 z는 #0(스트링 s의 0 개수)에서 1을 뺀 값으로 설정된다. 이 경우, 첫 번째 및 마지막 인덱스 h 및 z는 각각 0으로 시작하는 접미부 범위를 한정할 수 있다. P의 마지막 심볼이 0과 같지 않으면(N) 단계(2705)에서 첫 번째 인덱스는 #0과 동일하게 설정되고, 마지막 인덱스는 n-1로 설정된다. 이 경우 첫 번째 인덱스와 마지막 인덱스는 각각 1로 시작하는 접미부 범위를 구분할 수 있다.
방법(2700)은 단계(2706)에서 루프 카운터 i를 p-2와 동일하게 설정하는 것을 더 포함한다. 이 루프 카운터는 방법(2700)이 발생이 존재할 때까지(즉, 첫 번째 인덱스가 마지막 인덱스보다 작거나 같을 때) P를 역방향으로 스캔할 수 있게 한다. (2708)에서, 결정 블록이 구현되고 첫 번째 인덱스가 마지막 인덱스보다 작거나 같고 루프 카운터 i가 0보다 크거나 같은 것을 조건으로 한다. 결정 블록(2708)의 조건이 충족되지 않으면(N), 블록(2710)에서 출력 카운트는 z - h + 1과 동일한 것으로 결정된다. 결정 블록(2708)의 조건이 충족되면(Y), 단계(2711)에서, 스트링 s의 버로우즈-휠러 변환(BWTs)에 대한 첫 번째 인덱스 h 이전의 인덱스(첫 번째 인덱스에서 1을 뺀 값)에서 심볼 값 1에 대해 첫 번째 순위 r h-1 가 실행된다. BWTs의 마지막 인덱스 z와 동일한 위치에서, 심볼 값 1에 대해 마지막 순위 r z 가 실행된다.
단계(2712)에서, 패턴 P의 i번째 심볼이 0인 것을 조건으로 하여 또 다른 결정 블록이 실행된다. 조건이 충족되면(Y), 단계(2714)에서 첫번째 인덱스 h가 현재 첫번째 인덱스에서 첫번째 순위 r h-1 을 뺀 값에서 하나 작은 값으로 재계산되고, 마지막 인덱스 z는 현재 마지막 인덱스에서 마지막 순위 r z 를 뺀 값보다 하나 작은 값으로 재계산된다. 단계(2714)에서 새로운 첫 번째 인덱스 h가 BWT 상의 현재 첫 번째 인덱스에 선행하는 인덱스에서, 심볼 값 0에 대한 현재 첫 번째 인덱스 및 순위의 차이로서, 계산될 수 있고, 새로운 마지막 인덱스 z가 BWT 상의 현재 마지막 인덱스에서 심볼 값 0에 대한 현재 마지막 인덱스 및 순위의 차이로서 계산될 수 있다. 결정 블록(2712) 조건이 충족되지 않으면(N), 즉, 패턴 P의 i번 째 값이 1이면, 단계(2715)에서 첫 번째 인덱스 h가 s 내 0의 개수와 제1 순위 r h-1 의 합과 같도록 재계산된다. 마지막 인덱스 z는 s 내 0의 개수와 마지막 순위 r z 의 합보다 하나 작은 값으로 재계산된다. 단계(2716)에서 루프 카운터가 1만큼 감소되고 방법은 결정 블록(2708)으로 돌아간다. 블록(2708)의 조건이 여전히 충족되면 단계(2711-2716)가 반복된다.
방법(2700)은 단계(2711)에서 구체적으로 1비트에 대한 순위 연산을 실행하므로 rank1이라고 표기된다. 이는 방법(2600)이 순위화 연산을 실행하는 방식과 약간 상이한데, 여기서, 순위는 패턴 P의 이전 비트 값에 대해 결정된다. 그러나, 두 방법 모두 동일한 결과를 산출하는데, 왜냐하면 비트 값 1에 대한 위치 x에서의 순위, rank1(x)는 다음 방정식에 의해 비트 값 0에 대한 위치 x에서의 순위 rank0(x)로 쉽게 변환될 수 있다:
rank0(x) = x - rank1(x) + 1 수학식 2
rank1(x) = x - rank0(x) + 1 수학식 3
따라서, 단계(2711)는 대안으로 rank0를 구현할 수 있다.
도 27의 방법(2700)의 단계(2711)는 2개의 순위화 연산의 실행을 포함한다. 이 단계는 실시예에 따라 두 개의 액세스 작업 및 두 개의 판독 작업을 통해 병렬로 두 개의 순위화 연산의 실행을 위한 방법(2711)으로서 도 28에서 더 상세히 기재된다. 도 28의 방법(2711)은 방법(2700)의 결정 블록(2708)에 따라 반복적으로 실행된다. 방법(2711)은 도 18 및 19와 관련하여 기재된 예시적인 인코딩 방식으로부터의 특정 파라미터를 사용하지만, 대체 파라미터를 갖는 그 밖의 다른 인코딩 방식이 이러한 방법에 적용될 수 있음을 이해해야 한다.
방법(2711)의 단계(2802)는 파라미터 x를 (알고리즘 1로부터의) 현재의 첫 번째 인덱스보다 하나 작은 값으로 설정하는 것을 포함한다. 단계(2802)는 q first BWT 를 x 나누기 96(각각의 컨테이너에 인코딩된 비트 수)으로 나눈 값의 바닥값(상기 나눈 값보다 작은 값 중 가장 큰 정수)와 동일하게 설정하는 것을 더 포함하며, 여기서 q first BWT 는 BWTs를 저장하는 라이브러리 내 컨테이너 인덱스이고, 특정 컨테이너는 BWTs의 x번째 비트를 저장한다. 파라미터 r first BWT 는 x 및 96의 모듈러스(나머지)와 동일하게 설정되며, 여기서 파라미터는 해당 컨테이너에 있는 x번째 비트의 오프셋을 나타낸다. 카운터 배열 c에 대해 유사한 파라미터가 계산된다. q first C q first BWT 나누기 7(컨테이너당 카운터 수)의 바닥값과 동일하게 설정되며 여기서 q first C 는 c의 q first BWT 번째 카운터를 포함하는 c를 저장하는 라이브러리 내 컨테이너이다. r first C 는 카운터의 컨테이너 내 오프셋을 나타내는, q first BWT 과 7의 모듈러스와 동일하게 설정된다.
방법(2711)의 단계(2804)는 파라미터 y를 (알고리즘 1로부터의) 마지막 인덱스와 동일하게 설정하고 파라미터 y에 대한 단계(2802)로서 동일한 BWT 및 카운터 배열 파라미터 q last BWT , r last BWT , q last C , 및 r last C 를 설정하는 것을 포함한다. 단계(2804)는 BWTs의 x번째 비트를 포함하는 컨테이너와 해당 컨테이너 앞에 있는 1의 카운터를 포함하는 컨테이너를 식별하는 쿼리 Q first,BWT Q first,C 를 생성하는 것을 포함한다. 쿼리는 컨테이너를 식별하므로 쿼리는 구성요소가 3진법에서 7자리에 걸쳐 q first BWT 를 나타내고 3진법에서 7자리에 걸쳐 q first C 를 나타내는 두 경로일 수 있다. 단계(2806)는 각각 q first BWT q first C 에 대해 전문화된 쿼리 Q last,BWT Q last,C 를 유사하게 생성하는 것을 포함한다. 단계(2808)는 BWTs를 저장하는 표적 라이브러리에 걸쳐 공동으로(OR 논리) Q first,BWT Q last,BWT 의 제1 액세스 작업, 및 카운터 배열 c를 저장하는 표적 라이브러리에 걸쳐 공동으로 Q first,C Q last,C 의 제2 액세스 작업을 병렬로 실행하는 것을 포함한다. 일부 구현예에서 이들 액세스 작업은 각각 최대 2개의 컨테이너(동일한 경우 하나의 컨테이너가 될 수 있음)를 검색하고 16개의 접근자(7 나누기 판독의 기술적 한계 π의 천장값의 4배)를 필요로 하는데, 일원화된 쿼리가 7개의 구성요소의 4개의 경로일 수 있고, (가령, PCR 경우) π가 2와 동일하기 때문이다. 단계(2810)는 액세스 작업에 의해 선택된 식별자 세트를 병합하고 세트를 판독하는 것을 포함한다. 일부 구현예에서, 이들 식별자는 4개 이하의 컨테이너에 포함되며, 각각의 컨테이너는 28개 이하의 식별자를 포함하므로 최대 총 4 × 28 = 112이다.
단계(2812)는 파라미터 n first BWT 에서 Q first,BWT 와 동일한 선행 7 구성요소 길이 경로를 갖고 r first BWT 이하의 마지막 구성요소를 갖는 식별자의 수를 카운팅하는 것을 포함한다. 유사하게, 파라미터 n last BWT Q last,BWT 와 동일한 선행 7 구성요소 길이 경로를 갖고 r last BWT 이하의 마지막 구성요소를 갖는 식별자의 수와 동일하게 설정된다. 단계(2814)는 q first C 와 동일한 7 구성요소 길이의 선행 경로를 갖는 식별자를 저장하는 컨테이너 내 r first C 번째 카운터에 대응하는 값과 동일한 파라미터 n first C 를 설정하는 것을 포함한다. 파라미터 n last C 도 유사하게 설정된다. 단계 9에서, 하나의 출력, 첫 번째 순위 RF는 n first BWT n first C 의 합과 동일하게 설정되고, 또 다른 출력인 마지막 순위 RL은 n last BWT n last C 의 합과 동일하게 설정된다.
첫 번째 인덱스와 마지막 인덱스로 구분된 범위 R에서 스트링 s의 접미부를 기반으로 하는 접미부 배열 sa[0, n - 1]에 있는 발생 검색과 관련하여, 이들 등장을 포함하는 컨테이너로서 접미부 배열을 저장하는 라이브러리에 대해 7개의 구성요소 길이의 경로를 특정함으로써 인출 작업이 구현될 수 있다. 인코딩 방식의 예에서, 모든 컨테이너는 7개의 접미부 위치를 포함하므로, 2 + (마지막 인덱스 - 첫 번째 인덱스 + 1)/7개 이하의 경로로 인출 작업이 실행될 수 있다. 이들 경로는 연속적인 컨테이너 범위를 식별할 수 있으므로 구성요소를 공유할 수 있다. 필요한 것보다 더 많은 식별자를 검색하는 슈퍼-쿼리가 구현되어 식별자 필터링을 사후 처리 계산 단계로 연기할 수 있다. 최소 정수 z는 (마지막 인덱스 - 첫 번째 인덱스 + 1)보다 큰 3 z × 7과 같은 크기 S(z)를 정의할 수 있으며 z는 0, 1, ... , 7과 같다. 범위 R은 최대한 크기 S(z)의 범위 2개로 커버될 수 있고, 이들은 (7-z) 구성 요소로 구성된 두 개의 부분 경로 쿼리로 정의될 수 있다. 슈퍼 쿼리는 가능한 하나의 복제 연산으로 (7 - z)/π의 천장값과 동일한 다수의 접근자로 실행되어, (7회보다 많은 등장인 경우 곱셈 인자 3으로) 패턴 등장의 슈퍼세트를 획득할 수 있다. 그런 다음 두 개의 쿼리로 인한 식별자들의 병합에 대해 판독 작업이 실행될 수 있다.
지금까지, 카운트 연산은 이진 스트링을 사용하는 예에서 설명되었지만, 카운트 작업은 임의의 스트링을 저장하는 DNA에 대해서도 구현될 수 있다. 임의의 알파벳에서 추출된 스트링 s는 도 16 및 17에 도시된 버로우즈-휠러 변환 및 접미부 배열의 기초로 사용되었다. 스트링 BWT(s) 및 추가 데이터 구조를 활용하여, 본 개시는 임의의 알파벳으로부터 그려진 패턴이 검색을 제공한다. 도 29는 예시적인 구현에 따른, 임의의 심볼 스트링에 대해 카운트 연산을 수행하기 위한 방법(2900)에 대한 흐름도를 도시한다. 단계(2902)는 식별자의 제1 풀을 얻는 것을 포함하며, 식별자는 심볼 스트링(들)의 버로우즈-휠러 변화 L(BWT 행렬의 마지막 열)을 나타내며, 여기서 심볼 스트링의 각 심볼는 심볼 값의 세트로부터 얻어진다. 단계(2904)는 식별자의 제2 풀을 획득하는 것을 포함하며, 각각의 제2 풀은 BWT(s)로부터 유도된 카운터 심볼의 스트링 L을 나타내고 특정 심볼 값을 갖는 L 내 심볼의 개수의 러닝 카운트를 나타낸다. 단계(2906)은 제1 풀 및 제2 풀의 세트로부터 식별자에 선택적으로 액세스함으로써 심볼 스트링에서 특정 심볼 패턴의 카운트를 획득하는 것을 포함한다. 방법(2900)에 이어, 이진 스트링에 대해 도 26-28에 기재된 방법이 비트 스트링 및 대응하는 카운터 스트링을 나타내는 각각의 풀 쌍에 적용될 수 있다.
예를 들어, 단계(2906)는 s에 대한 버로우즈-휠러 변환 행렬의 첫 번째 열 F를 재구성하는 것을 포함할 수 있다. 프로브 시리즈를 사용하여, L에서 각각의 대응하는 심볼 값의 총 발생 횟수를 나타내는 제2 풀 각각의 마지막 카운터 심볼로부터 식별자가 액세스될 수 있다. 각각의 대응하는 심볼 값의 발생의 총 횟수가 사용되어 F를 재구성할 수 있다. F를 아는 것, (2906)은 길이가 p인 패턴의 마지막(p번째) 심볼 값을 갖는 F의 위치 범위를 결정하는 것을 더 포함할 수 있다. F의 위치 범위는 첫 번째 위치 h와 마지막 위치 z에 의해 정의되고, h와 z를 포함한다.
단계(2906)는, p번째 심볼 후 패턴 내 각각의 선행하는 심볼에 대해, 제1 풀 및 대응하는 제2 풀로부터 식별자 핵산 분자를 액세스하도록 프로브 시리즈를 이용해, 상기 범위에 바로 선행하는 위치에서 L 내 대응하는 심볼 값의 제1 순위 및 범위의 종단 위치에 있는 L 내 대응하는 심볼 값의 제2 순위를 결정하는 것, 및 제1 순위 및 제2 순위를 이용해 범위를 패턴 내 다음 심볼에 선행하는 대응하는 심볼의 인스턴스를 갖는 F 내 위치의 범위로 업데이트하는 것을 포함한다. 제1 순위 rh-1는 L 내 위치 h-1에서 패턴 내 각자의 선행하는 심볼 값을 가지며, 제2 순위 rz는 L 내 위치 z에서 패턴 내 각자의 선행하는 심볼 값을 가진다. 범위를 업데이트하는 것은 h를 F에서 패턴 내 각자의 선행하는 심볼 값의 (r h-1 +1)번째 인스턴스의 위치로 설정하는 것 및 z를 F에서 패턴 내 각자의 선행하는 심볼 값의 r z 번째 인스턴스의 인덱스로 설정하는 것을 포함한다. 패턴의 발생 횟수 카운트는 제1 및 제2 순위 또는 첫 번째 및 마지막 인덱스의 최종 값을 기반으로 설정될 수 있다. 예를 들어 카운트는 제1 순위의 최종 값과 제2 순위의 최종 값 간 차이이다. 제1 순위와 제2 순위가 p번째 심볼 또는 임의의 선행하는 심볼에 대해 서로 동일한 경우 등장 횟수 카운트가 0으로 설정된다.
심볼 스트링 L은 L의 길이와 동일한 길이의 r 비트 스트링으로 변환될 수 있으며, 여기서 r은 심볼 값 세트의 심볼 값의 수를 나타낸다. 하나의 비트 값(가령, 1)을 갖는 L 내 R v 의 모든 발생을 나타내고 다른 하나의 비트 값(가령, 0)을 갖는 모든 다른 심볼 값의 발생을 나타냄으로써, v = 1, 2, ..., r에 대해 각각의 심볼 값 R v 에 대해 비트 스트링 L v 이 생성될 수 있다. 예를 들어, 심볼 스트링 S = "BABBO"가 주어지면 비트 스트링 S A = 01000, S B = 10110, 및 S O = 00001이 생성될 수 있다. 모든 비트 스트링 중 1의 총 개수는 원래 심볼 스트링의 길이와 같다. 일부 구현예에서, 비트의 스트링 L v 에 각각 대응하는 r개의 제1 풀이 있다. L v 에 대응하는 제1 풀은 패턴에서 심볼 값 R v 의 제1 및 제2 순위를 결정하기 위해 사용될 수 있다.
카운터 심볼은 특정 비트 값(가령, 1)을 갖는, 대응하는 비트 스트링 내 모든 w 비트에 대해 각각의 카운터 심볼이 대응하는 비트 스트링의 모든 w 비트에 대해 비트 수의 러닝 카운트를 나타내는 b 카운터 비트의 스트링으로 표현되도록 각 비트 스트링으로부터 유도될 수 있다. 일부 구현예에서, w의 값은 b의 값과 동일하게 설정된다. 다른 구현에서 w는 1의 값으로 설정된다.
각각의 풀은 고체, 액체 또는 고체 형태를 가질 수 있으며 복수의 식별자 핵산 분자를 형성하여 형성될 수 있다. 각각의 식별자는 각자의 비트 위치에 대응할 수 있고 M개의 선택된 구성요소 핵산 분자를 물리적으로 조립함으로써 형성될 수 있다. M개의 선택된 구성요소 각각은 M개의 상이한 레이어로 분리되는 구별되는 구성요소 핵산 분자의 세트로부터 선택될 수 있다. 식별자는 비트의 스트링을 나타내도록 제1 풀에서 수집되어, 비트 값이 제1 풀 내 대응하는 식별자의 존재 또는 부재에 의해 지시되게 할 수 있다. 유사하게, 식별자의 제2 풀은 각각 카운터 스트링 내 비트를 나타내는 식별자를 수집함으로써 형성될 수 있다. 일부 구현에서, 제1 풀은 제2 풀과 동일하고, 다른 구현에서, 제1 풀 및 제2 풀은 별개이다.
식별자의 풀은 식별자의 존재 또는 부재가, v = 1, 2, ..., r에 대해, L v 에서 하나의 비트 값 또는 또 다른 비트 값과 직접적으로 상관되지 않고, 코드워드라고 하는 연속적으로 정렬된 식별자 블록이 L v 에서 비트의 블록으로 번역될 수 있도록 구성될 수 있다. 코드워드는 고정된 수의 가능한 고유 식별자 중 고정된 개수의 고유 식별자에 대응할 수 있다. 추가 정보가 저장될 수 있다. 예를 들어, 제1 및 제2 풀에서 식별자를 기록하고, 액세스하고, 판독할 때 오류를 검출하고 수정하는 데 사용되기 위해 추가 정보가 저장될 수 있다. 추가 정보는 제1 또는 제2 풀의 식별자에 저장될 수 있다.
일부 구현에서, 방법(2900)은 BWT로부터 유도된 접미부 배열 SA를 나타내는 식별자들의 풀을 획득하는 것을 더 포함한다. SA의 각각의 원소는 L의 대응하는 원소의 인덱스를 나타내는 적어도 log2(n) 비트의 비트 스트링으로 표현될 수 있다. 방법(2900)은 접미부 배열을 나타내는 풀의 식별자를 액세스함으로써 카운트가 0보다 크다고 가정할 때, 패턴의 등장을 찾는 것을 더 포함할 수 있다. 이들 단계는 인출 작업으로 수행될 수 있다. 일부 구현에서, 방법(2900)은 예를 들어 메시지일 수 있는 임의의 스트링을 나타내는 식별자들의 풀을 획득하는 것을 포함한다. 패턴 P의 제1 위치의 컨텍스트는 제1 위치에 대응하는 제4 풀의 식별자 및 제1 위치를 둘러싸는 이웃 위치를 액세스함으로써 추출될 수 있다.
길이 n 심볼의 스트링 s가 크기 |Σ|의 임의의 알파벳 Σ으로부터 얻어진다. 도 16 및 17에 도시된 바와 같이, 스트링 "abracadabra$"이 이러한 임의의 스트링의 예이다. 도 29와 관련하여 설명된 이전 방법에서, 스트링 s 내 길이 p의 패턴 P를 검색하는 것은 스트링 접두부 s[0, x] (첫번째 인덱스로부터 인덱스 x까지의 스트링 s의 서브세트) 내 심볼 σ의 등장을 카운트하는 일반 rankσ(x) 연산의 구현을 통해 s의 BWT의 접두부에서 심볼을 카운팅하는 것을 이용한다는 것이 논의되었다. 이 방법은 검색된 패턴에 있는 심볼 수만큼의 rankσ 연산을 실행하는 것을 필요로 하는데, rankσ(x)는 s가 심볼 σ를 가질 때 비트 값 '1'을 갖는 특성 이진 스트링 S σ 에 걸쳐 하나의 rank1(x) 연산을 실행함으로써 구현될 수 있기 때문이다.
다음 랩 예제는 더 적은 rankσ 연산을 실행하고 저중량 코드북과 함께 작동하는 접근 방식을 활용하는 것을 목표로 한다. 이 구현은 패턴 P를 검색할 때 심볼 그룹화를 이용하여 가상으로 알파벳을 확대하고 차례로 반복 횟수를 줄인다.
이 예에서, 스트링 S k [0 : n - 1]은 다음과 같이 정의된다: k는 1에서 시작하고 스트링 길이 n을 상한으로 갖는 정수 파라미터이고, 매크로 심볼 S k [i]는BWT를 포함하는 행렬에서 i번째 행의 마지막 k 심볼을 차지하는 서브-스트링이다. 각각의 스트링 S k 는 n × k 바이트로 저장될 수 있다. 이 예에서는, 입력 스트링 "abracadabra$"를 사용할 때 다음과 같은 서브스트링이 있다. S 1 은 s의 BWT, 즉 BWT(s)인데, BWT 행렬에서 행의 마지막 k = 1 심볼이 정확히 BWT(s)인 마지막 열 L이기 때문이다. S 2 는 "ra br ad a$ br ac da $a ra ca ab ab"와 같은데, 각각의 행으로부터 마지막 k = 2개의 심볼이 취해지기 때문이다. 가독성을 위해 공백이 포함되어 있으며 2개의 심볼로 구성된 각각의 그룹은 고유한 "매크로-심볼"로 간주된다. 따라서, 매크로-심볼 S 2 [3]은 "a$"이고 S 2 는 각각 2개의 문자로 구성된 n = 12개의 매크로 심볼로 구성되어 총 24바이트이다. S 3 은 "bra abr cad ra$ abr rac ada a$a bra aca dab $ab"와 같은데, 각각의 행으로부터 마지막 k = 3개의 심볼이 취해지기 때문이다. S 3 는 각각 3개의 문자의 12 매크로-심볼로 구성되어, 총 36 바이트이다. 이들 스트링은 각각의 k에 대해 n까지 반복적으로 구성될 수 있다.
S k 스트링은 반드시 명시적으로 구성되는 것은 아니지만, 다음과 같이 유도될 수 있다. 새로운 스트링
Figure pct00004
Figure pct00005
S k [i][1]과 같도록 정의될 수 있는데, 즉, S k 의 모든 매크로 심볼에 대해, 매크로-심볼의 첫 번째 심볼, 따라서 BWT 행렬 내 마지막 열 L로부터 거리 k에 있는 심볼만 유지된다. 모든 스트링
Figure pct00006
의 i번째 (단일) 심볼을 연결함으로써 S k [i]의 i번째 매크로-심볼. 감소된 공간 점유는
Figure pct00007
에 의해 제공되며, 이는 각각 S k 에 의해 저장된 k × n 심볼보다 적은 n개의 심볼만을 저장한다.
패턴 검색을 위해, rankα 연산은 S k 스트링에 대해 실행되어야 하며, 여기서 α는 길이 k 심볼의 매크로 심볼이다. 인코딩 전략은 스트링의 단일 심볼에 대해 구현될 수 있으며, 이는 심볼 스트링 "BABBO"에 대한 위의 예를 모방한 전략이다. 특히, 스트링은 각각 b 컨테이너의 블록으로 분할된다(실험 예제에서 각각의 컨테이너는 12바이트, 즉, s의 12개 심볼을 인코딩한다). 카운터 c α k
Figure pct00008
에서 k번째 블록 이전의 모든 매크로 심볼 α의 발생 횟수에 대해 유지된다. 카운터 c α k 에 S에서 발생하는 매트로-심볼의 총 수 α' < α 가 더해질 수 있다. 이 특징에 의해 등장 횟수와 함께 추가 카운터 배열 C를 저장할 필요가 없을 수 있다. 블록당 최대 |Σ| k 개의 카운터가 있을 수 있다.
일부 구현예에서, 길이 k의 모든 서브스트링 a가 s에서 발생하는 것은 아니므로 c α k 에 저장할 필요가 없다. 존재하거나 존재하지 않는 서브스트링은 본 명세서에 기재된 인코딩 방식을 통해 또는 본 명세서에 기재된 DNA 기반 데이터 저장소와 컴퓨터의 내부 메모리를 모두 배치하는 하이브리드 저장 방식에 의해, 대응하는 데이터 구조를 DNA에만 저장하기 위해 추적될 수 있다. 하이브리드 저장 방식은 스트링 s의 기존 (매크로) 심볼과 범위 [0, ...] 내 정수 간의 재매핑을 구현할 수 있다. 실제 알파벳
Figure pct00009
은 s에 나타나는 심볼를 나타낼 수 있다(연속 정수로 적절하게 인코딩됨). n의 최소값 또는 임의의 k에 대한 |Σ| k 보다 작거나 같은 실제 알파벳 심볼이 있을 수 있다. 이 재매핑은 내부 메모리에 보관된 해시 테이블(가령, Cuckoo 해싱) 또는 순위 데이터 구조를 기반으로 하는 압축 솔루션에 의해 구현될 수 있다.
예를 들어, 패턴 P가 스트링 "abracadabra" 중 "dab"과 같도록 한다. 이전 데이터 구조는 길이 1과 2의 매크로 심볼에 대해 배포되고 P 검색은 P에서 역방향으로 작동하는 두 단계로 분할된다. 먼저, "ab"를 검색하고 두 번째로 "d"를 검색한다. 첫 번째 인덱스 first 가 먼저 0이고 마지막 인덱스 last 가 마지막으로 11인 것으로 시작하여 ab 접두부가 붙은 행이 결정된다. 이 첫 번째 단계는 스트링 S 2 을 액세스하고 이 스트링에 대해 0과 동일한 rankab(first - 1) 작업 및 2와 동일한 rankab(last)를 실행하는 것을 포함한다. 이들 순위화 연산은 스트링 S 2 및 해당 카운터 배열 c ab 2 에 대한 두 개의 병렬 액세스 연산과 두 개의 병렬 판독 연산에 의해 실행될 수 있다. "ab"보다 작은 스트링의 수는 s에서 2이므로 인덱스의 새 값은 first = 2 + rankab(first - 1) = 2 및 last = 2 + rankab(last) - 1 = 3이다. 도 16에서 볼 수 있는 바와 같이 ab가 접두부인 행은 2이고 BWT 행렬의 행 2 및 3에서 발생한다. 두 번째 단계는 "dab"가 접두부인 행을 결정하여 심볼 "d"에서 "ab"까지 "사전 보류"시키는 것을 포함한다. 이 단계는 S1을 액세스하고 이 스트링에 대해 연산 rankd(first - 1) = 0 및 rankd(last) = 1을 실행하여 실행된다. "d"보다 작은 스트링의 수는 s에서 9이므로 인덱스에 대한 새 값은 first = 9 + rankd(first - 1) = 9 and last = 9 + rankd(last) - 1 = 9이다. 새 인덱스는 동일하므로 프로세스가 중지되고 P의 발생 횟수를 1로 반환할 수 있다. 이 예에서는 검색이 한 번에 하나의 심볼로 수행되는 경우 필요한 3회 대신 P를 검색하기 위해 2회의 반복/단계가 실행된다. 일반적인 경우에 대해 유사한 검색 동작이 도 32와 관련하여 설명된다.
스트링에서 패턴의 발생 횟수를 카운트하기 위해, BWT, 카운터 배열, 접미부 배열, 액세스 및 판독 방법이 구현되었다. 일부 구현예에서 스트링 자체는 DNA에 저장될 수 있고 특정 패턴의 위치에서 액세스될 수 있다. 검색 방법이 스트링에서 패턴의 위치를 찾는 데 사용되는 경우, 해당 위치와 주변 이웃은 스트링을 나타내는 식별자 풀 내에서 액세스되고 그 후 판독될 수 있다. 이 프로세스는 예를 들어 특정 스트링 패턴이 발생하는 컨텍스트를 수집하는 데 유용할 수 있다.
식별자 라이브러리는 복제되고 개별 컨테이너로 분취될 수 있으므로, 다중 패턴 검색이 동시에 병렬로 실행될 수 있다. 예를 들어, 10, 100, 1000 또는 그 이상의 패턴 검색이 병렬로 수행될 수 있다. 상이한 검색의 순위 및 인출 작업은 DNA 시퀀서와 고유 바코드를 사용하여 서로 다른 검색에 속하는 식별자를 라벨링함으로써 판독 지점에서 멀티플렉싱될 수 있다.
앞서, BWT가 순방향 변환 및 역방향 변환을 포함할 수 있다는 것이 논의되었다. 위의 예에서 BWT에 대한 정렬된 순환 시프트 행렬인 M'의 각 행이 심볼$이 추가된 입력 스트링 S의 순열(즉, 스트링 S$)이 포함되어 있음을 알 수 있다. 유사하게, M'의 각각의 열은 S$의 순열을 포함한다. 특히, 예시적인 스트링 "abracadabra"에 대한 첫 번째 열 F는 알파벳순으로 정렬되고 원래 입력 스트링의 가장 압축 가능한 변환을 나타내는 "aaaaabbcdr"이다. F는 가역성이 아니므로 마지막 열 L은 가역성과 압축성으로 인해 BWT로서 사용된다.
M'의 i의 모든 행은 왼쪽으로 순환 시프트하기 때문에 세 부분으로 분해될 수 있다: S의 접미부 S[k i , n - 1], 특수 심볼 $, 및 접두부 S[1, k i - 1]. 예를 들어, 도 16에서, M'의 행 2는 접두부 "abra", 뒤이어 $, 접미부 "abracad"가 온다. BWT 행렬의 첫 번째 속성으로서, 마지막 열 L[i]의 심볼는 S$를 나타내는 행 i에 대한 것을 제외하고 스트링 S에서 첫 번째 열 F[i]의 심볼에 선행하여, F[i] = S[1] and L[i] = $이다. 이 속성은 M 및 M'의 모든 행이 S$의 왼쪽 순환 시프트한 특성의 결과이므로, 각각의 행의 첫 번째 및 마지막 심볼를 취함으로써, (L에 있는) 마지막 심볼에 스트링 S에 걸쳐 (F 내에 있는) 제1 심볼이 바로 뒤 따른다. BWT 행렬의 두 번째 속성은 L에서 동일한 심볼 c의 모든 발생이 F에서와 동일한 상대 순서를 유지한다는 것이다. 이 속성은 L 내 심볼 c의 k번째 발생이 F 내 심볼 c의 k번째 발생에 대응함을 의미한다. "LF 매핑"이라고 하는 방법은 이들 속성을 활용하여 BWT(s) = (L', r)로부터 S를 재구성할 수 있다. LF 매핑은 크기가 n인 배열로 표현될 수 있다. 배열의 i번째 항목인 LF[i]가 j와 동일한 것의 필요충분조건은 심볼 L[i]가 심볼 F[j]에 매핑되는 것이다. L[i]가 L에서 심볼 c의 k번째 발생인 경우 F[LF[i]]는 F에서 c의 k번째 발생이다.
도 30은 예시적인 구현에 따른, 열 L로부터 LF-매핑을 구성하기 위한 방법(3000)을 도시한다. 단계(3002)에서, 방법(3000)은 크기 |Σ| + 1의 보조 벡터V A 를 정의한다. V A 는 심볼 또는 정수에 의해 인덱싱될 수 있다. 단계(3004)에서 루프의 첫 번째가 L의 각각의 심볼 c에 대해 L에서 발생한 횟수 n c 를 결정하고 단계(3006)에서 V A [c] = n c 를 저장한다. 그런 다음, 단계(3010)에서 루프의 두 번째가 이들 심볼별 발생을 누적 합으로 변환하여, 단계(3012)에서 새로운 V A [c]가 c보다 작은 심볼의 L에서의 총 발생 횟수, 즉 V A [c] =
Figure pct00010
를 저장한다. 이 단계는 단계(3008)에서 두 개의 보조 변수를 채택함으로써 수행되므로 전체 작업 공간은 여전히 n 정도의 크기이다. V A [c]는 심볼 c가 발생하는 F의 첫 번째 위치를 제공한다. 따라서, 루프 마지막이 시작하기 전에, V A [c]는 L에서 첫 번째 c의 F에서의 랜딩 위치이다(모든 알파벳 심볼의 첫 번째 발생에 대한 LF 매핑이 알려져 있음). 마지막으로, 단계(3014)에서 루프의 마지막이 열 L을 스캔하고, 심볼 L[i] = c를 만날 때마다 단계(3016)에서 LF[i] = V A [c]를 설정한다. 이 조건은 c가 처음으로 충족될 때 올바르고, 그런 다음 V A [c]가 증분되어 L에서 c의 다음 발생이 F의 다음 위치에 매핑될 것이다(해당 심볼로 시작하는 모든 행의 F에서 연속성이 가정될 때). 따라서 알고리즘은 LF[i] = 불변을 유지하며, 그 후, L에서 c의 k번 등장이 처리되었다. 단계(3018)에서, 최종 LF(LF 매핑 배열)의 출력이 생성된다.
위에서 기재된 LF 매핑 및 기본 속성이 주어지면, S는 변환된 출력 BWT(s) = (L', r)에서 시작하여 역방향으로 재구성될 수 있다. 스트링 S의 재구성을 위한 방법(3100)이 예시적 구현예에 따라 도 31에 도시되어 있다. 단계(3102)에서, L'의 위치 r에 $를 삽입함으로써 BWT(s)로부터 L이 재구성된다. 단계(3104)에서, L의 LF-매핑이 결정된다. 단계(3104)는 도 30의 방법(3000)을 통해 실행될 수 있다. 단계(3106)에서, 보조 변수 k 및 i(루프 카운터)가 설정된다. 변수 k는 초기에 0으로 설정되고, 루프 카운터 i는 초기에 L, F, s 길이의 최종 위치인 n-1로 설정된다. 결정 블록(3108)에서, 방법(3100)은 루프 카운터 i가 0보다 크거나 같은지를 체크한다. 조건이 충족되면(Y), 반복이 단계(3110)을 통해 진행된다. 단계(3110)는 S의 마지막 심볼, 즉 S[n-1]을 선택하는 것을 포함하며, M'의 첫 번째 행이 $S이라고 가정할 때 이는 L[0]에서 식별될 수 있다. 그런 다음, 이 방법은 S에서 한 번에 하나의 심볼을 왼쪽으로 이동시키고 상기 두 속성을 배포함으로써 진행한다: 두 번째 속성이 L(초기 L[0])에서 발생하는 현재 심볼을 F 내 대응 복제본에 매핑할 수 있게 하고, 그런 다음 첫 번째 속성이 동일한 행(즉, L에 있는 행)의 끝에 있는 심볼을 취함으로써, F의 해당 복제본에 선행하는 심볼을 찾는 것을 가능하게 한다. L에서 반환되는 이 이중 단계는 s에서의 하나의 심볼 왼쪽 이동을 허용한다. 이 프로세스를 S의 시작 부분까지 반복하면 이 스트링이 재구성될 수 있다. 결정 블록(3108)의 조건이 더 이상 충족되지 않는 경우(N), 방법(3100)은 단계(3111)에서 종료되며, 여기서 원래 스트링 s는 완전히 구성된다.
예를 들어, L[0] = S[n - 1] = "a"인 도 16을 참조하고, 방법(3100)의 루프를 실행한다(단계(3108 및 3110) 반복). LF[0]은 "a"로 시작하는 첫 번째 행 - 이는 행 1임 - 을 가리킨다. 따라서 "a"의 복제본은 F[1]에 LF 매핑되고(사실, F[1] = "a") , S에서의 선행 심볼은 L[1] = "r"이다. 이 두 가지 기본 단계는 전체 스트링 S가 재구성될 때까지 반복된다. 이전 실행 예제를 계속하면, L[1] = "r"은 위치 LF[1] = 10(실제로, F[10] = r)에서의 F의 심볼에 LF 매핑된다. L[1] 및 F[10]은 각각 L 및 F 열에서 심볼 "r"의 처음 등장이다. 그런 다음 알고리즘은 심볼 L[10] = "b"를 S에서의 "r"의 선행 심볼로서 취한다. 그런 다음 이들 단계는 스트링 S의 나머지 부분의 각각의 선행 심볼에 대해 반복된다.
회전된 행렬 M의 행과 스트링 S의 접미부 간의 전단사 대응, 그리고 마지막 열 L과 S에 구축된 접미부 배열 간의 관계에 주목하면, 앞서 언급된 바와 같이 이들 관계는 FM-인덱스의 설계의 핵심이다. FM-인덱스는 스트링 크기 n의 순서로 크기의 효율적인 서브스트링 검색 및 공간 점유를 가능하게 한다. 따라서, 다음의 세 가지 기본 검색 연산이 이러한 인덱싱된 검색의 설계의 기저를 이룬다: count(P)가 스트링 P를 접두부로 갖는 M 내 행의 범위 [first, last]를 내놓되, 여기서 값(last - first + 1)이 패턴 등장의 횟수를 설명함; locate(P)가 스트링 S 내 모든 위치의 리스트를 내놓되, 리스트는 정렬되거나 정렬되지 않음 - ; 그리고 extract(i,j)가 FM-인덱스 내 이의 압축된 표현을 액세스함으로써 서브스트링 S[i,j]을 내놓음. 예를 들어, 도 17에서 패턴 P = "ab"에 대해, 인덱스 first = 2 및 last = 3은 총 2개의 패턴 발생을 내놓는다. 이 두 행은 패턴 P가 접두부로 붙는 접미부 S[0,1] 및 S[7,:]에 대응한다.
앞서 도 26-29와 관련하여, 기재된 바와 같이, 행 firstlast 의 검색이 이진 검색을 통해 구현되지 않고 열 L, 배열 C(C[c]에서 s에서의 c보다 작은 모든 심볼 s의 등장 횟수를 카운트) 및 스트링 접두부 L[0, k - 1]에서의 심볼 c의 등장 횟수를 보고하는 rank(c, k)의 카운팅을 효율적으로 지원하는 추가 데이터 구조를 전개하는 검색 방법을 사용한다. 모든 데이터 구조 L, C 및 순위는 압축되어 저장될 수 있으며 여전히 해당 항목, 즉, L[i] 또는 C[c]에 액세스하거나 순위(c, k)에 응답한다.
도 32는 예시적인 구현에 따른, 상기의 앙상블을 사용하여 count(P)를 구현하도록 구성된 방법(3200)을 도시한다. 단계 3202는 루프 카운터 i를 패턴 P의 마지막 위치를 나타내는 p-1과 동일하게 설정하는 것을 포함한다. 가변 심볼 c는 P[p-1]로 표시된 P의 마지막 심볼와 동일하게 설정된다. 단계(3204)에서, 제1 인덱스 h는 C[c]로 표시되는 가변 심볼 c에 대한 카운터 엔트리와 동일하게 설정되며, 여기서 C는 심볼의 스트링의 버로우즈-휠러 변환(Burrows-Wheeler Transform)으로부터 유도된 카운터 배열이다. 마지막 인덱스 z는 위치 c + 1의 카운터 항목보다 하나 작은 값으로 설정된다. 첫 번째 및 마지막 인덱스 h 및 z는 BWT에서 파생된 행렬 M'의 첫 번째 열 F에서 값 범위를 구분한다. 결정 블록(3206)은 첫 번째 인덱스 h가 마지막 인덱스 z보다 작은지 여부 그리고 루프 카운터 i가 1보다 크거나 같은지 여부를 체크한다. 두 조건 모두 충족되는 경우(Y), 단계(3208)에서, 가변 심볼 c는 패턴 P의 선행하는 심볼로 설정된다. 새로운 첫 번째 인덱스 h는 c에 대한 카운터 엔트리와 심볼 값 c에 대한 위치 h - 1에서 계산되는 BWT의 순위의 합과 동일하게 설정된다. 새로운 마지막 인덱스 z는 c에 대한 카운터 엔트리와 심볼 값 c에 대한 위치 z에서 계산되는 BWT의 순위의 합과 동일하게 설정된다. 루프 카운터 i는 하나 감소되고, 방법은 단계(3204)로 복귀된다.
방법(3200)의 각각의 반복 단계(3204-3208)는 다음의 불변량을 보존한다: i번째 페이즈에서, 파라미터 "h"는 P[i, p - 1]가 접두부로 붙은 정렬된 회전 행렬 M' 의 첫 번째 행을 가리키고, 파라미터 "z"는 P[i, p - 1]가 접두부로 붙은 M'의 마지막 행을 가리킨다. 처음에, 불변은 구성 상 참인데: 첫 번째 열 F의 경우 F[C[c]]는 c로 시작하는 M' 의 첫 번째 행이고, F[C[c + 1] - 1]은 c로 시작하는 M' 의 마지막 행이다. 도 17과 관련하여 P = "ab"인 예로 돌아가서, 초기 조건은 C[b] = 6 및 C[b + 1] = C[c] = 8이고 [6, 7]은 역방향 검색이 시작되기 전에 b 접두부가 붙은 행 범위이다.
각각의 후속 반복에서, 방법(3200)은 P[i, p - 1] 접두부가 붙은 행 [h, z]의 범위를 발견했다. 그런 다음, 이 방법은 다음과 같이 진행하여 P[i - 1, p - 1] = P[i - 1] P[i, p - 1]가 접두부인 행의 새로운 범위 [h, z]를 결정하는 것을 포함한다. 먼저 올바르게 쿼리된 순위화 함수를 배포하여 서브스트링 L[h, z]에서 심볼 c = P[i - 1]의 첫 번째 및 마지막 발생을 결정한다. 구체적으로 rank(c, h - 1)은 L에서 위치 h보다 앞서 c가 얼마나 많이 발생했는지 계산하고, rank(c, z)는 L에서 위치 z보다 앞서 c가 몇 번 발생했는지 계산한다. 그런 다음 이들 값이 사용되어 c의 첫 번째/마지막 발생의 LF-매핑을 계산한다. 등식 LF[i] = C[L[i]] + rank(L[i], i)이 존재한다. 이 등식은 rank(c, k)를 구현하는 데이터 구조가 컴팩트하게 저장된다면 LF 매핑의 계산이 효율적이고 간결하게 발생할 수 있음을 의미한다. 다시 도 17을 참조하고 이전과 같이 패턴 P = "ab" 및 P[2] = "b"가 접두부인 M' 내 행의 범위 [6, 7]을 고려할 수 있다. 이제 이전 패턴 심볼 P[1] = "a"를 선택하면, L[0, h - 1]이 "a"의 1회 등장을 포함하고, L[0, z]이 "a"의 3회 등장을 포함하기 때문에, 알고리즘 5는 rank("a", 5) = 1 및 rank("a", 7) = 3를 계산한다. 따라서 알고리즘은 새 범위를 다음과 같이 계산한다: h = C["a"] + rank("a", 5) = 1 + 1 = 2, z = C["a"] + rank("a", 7) - 1 = 1 + 3 - 1 = 3, 패턴 P = "ab"가 접두부로 붙은 행의 인접한 범위이다. 마지막 페이즈(즉, i = 0) 후에, 첫 번째와 마지막은 P가 접두어인 모든 접미부를 포함하는 M'의 행을 구분할 것이다. Z < h인 경우 패턴 P는 S에서 발생하지 않는다.
다음은 locate(P) 절차를 통한 패턴 발생 위치의 구현에 대해 설명한다. 고정 파라미터 μ에 대해 j = 0, 1, 2, ...에 대해 pos(i) = 형식의 위치에서 시작하는 접미부에 대응하는 M'의 행 i를 샘플링한다. 이러한 각각의 쌍
Figure pct00011
는 (행 구성요소에서) 일정한 시간에 구성원 쿼리를 지원하는 데이터 구조 L에 명시적으로 저장된다. 이제, 행 인덱스 r이 주어지면, L에서 r이 샘플링된 행이면 값 pos(r)이 즉시 얻어질 수 있고, 그렇지 않으면 알고리즘은 j가 샘플링된 행이고 L에서 발견될 때까지 t = 1, 2, ...에 대해 j = LFt(r)를 결정한다. 이 경우, pos(r) = pos(j) + t이다. 샘플링 전략은 L 내 행이 최대 μ 반복에서 발견되고 패턴 Pocc 발생이 순위 데이터 구조에 대한 (μ × occ) 쿼리의 순서를 통해 찾을 수 있도록 한다.
count(P)는 FM-인덱스에 의해 지원되는 마지막 기본 연산인 extract(i, j)를 구현하도록 적응될 수 있음을 주목하십시오. R을 접미부 S[j, n - 1]가 접두부로 붙은 M'의 행이라고 하고 r의 값을 알고 있다고 가정한다. 알고리즘은 S[j] = F[r]을 설정한 다음 t = 0, 1, ..., j - i -1에 대해 s[j-1-t] = L[LFt[r]]를 설정하는 사이클을 시작한다. 이 사이클의 기초가 되는 아이디어는 현재 심볼의 LF-매핑(순위 데이터 구조를 통해 구현)을 반복적으로 계산하여, S[j - 1]에서 시작하여 S에서 후방향으로 점프한다는 것이다. j - i - 1 단계 후에 S[i]에 도달하면 프로세스가 중지된다. 이 접근방식은 BWT-반전에서 취한 접근 방식과 유사한데, 차이점은 배열 LF가 명시적으로 사용할 수 없다는 사실에 의존하지만 해당 항목은 순위화 연산을 통해 단계별로 생성된다. 이 접근방식은 LF 배열에 대한 일정한 시간 액세스를 보장하지만 순위에 대한 압축 접근 방식이 채택되는 경우 간결한 공간 저장을 보장한다.
앞서 기재된 액세스, 판독, 순위화 및 검색을 위한 화학적 방법에 추가하여, "if-then-else" 연산을 구현하기 위한 화학적 방법이 여기에 설명되어 있다. "if-then-else" 연산은 특정된 부울 조건이 참 또는 거짓으로 평가되는지 여부에 따라 상이한 계산 또는 동작을 수행하는 명령문, 표현식 또는 구문이다. 이 연산을 사용하여 조건부 프로그램이 작성될 수 있다. 각각의 "if" 연산은 하나 이상의 식별자의 존재 또는 부재를 테스트하고, 존재 또는 부재에 따라 "then" 또는 "else" 분기로 계속 진행된다. 연산은 다수의 조건 및 대응하는 분기를 포함할 수 있다. 연산의 모든 분기로부터 출력이 생성될 수 있다. 이 접근법은 복수의 식별자 라이브러리(가령, 테라비트 규모)의 모든 식별자가 병렬로 작동되도록 한다. 예를 들어 라이브러리가 수십억 개의 데이터 객체를 인코딩하는 경우, 각각의 객체를 검사하고 출력을 생성하는 복잡한 함수를 DNA 기반 프로그램으로 설계하고 라이브러리에서 병렬로 실행할 수 있다.
비트를 시프트, 복사 및 이동시키는 전략은 원하는 프로그램의 실행을 위해 단일 식별자 라이브러리를 다중 입력 식별자 라이브러리로 재배열할 수 있다. 물리적으로, 각각의 if-then-else 연산은 입력 라이브러리 및 두 개의 출력 라이브러리와 반응하여 발생할 수 있으며 해당 라이브러리의 모든 식별자에 걸쳐 멀티플렉싱될 수 있다. 하나의 연산의 출력 라이브러리는 예를 들어 유체 전달(fluidic transfer)을 통해 다른 연산의 입력으로 전달될 수 있다. DNA에서의 각각의 연산의 실행은 종래의 하드웨어에 비해 느릴 수 있지만, RAM 및 프로세싱 파워에 의해 제한되는 기존의 하드웨어와 달리, 본 명세서에 기재된 DNA 플랫폼은 저전력으로 대량의 입력 데이터 개체에 걸쳐 동시에 프로그램을 실행할 수 있다.
도 33은 식별자의 풀에 대해 하나 이상의 if-then-else 연산을 실행하기 위한 방법(3300)을 설명하는 흐름도를 도시한다. 방법(3300)의 단계(3302)는 심볼의 하나 이상의 입력 스트링을 나타내는 식별자의 제1 풀을 획득하는 것을 포함한다. 단계(3304)는 식별자들에 대해 if-then-else 연산을 수행하여 식별자들의 제1 풀로부터 식별자들의 서브세트를 갖는 중간 풀을 생성하는 것을 포함한다. 단계(3306)는 식별자의 최종 풀이 생성될 때까지 중간 풀에 대해 하나 이상의 if-then-else 연산을 반복하고, 각각의 if-then-else 연산 후에 새로운 중간 풀을 생성하는 것을 포함하며, 최종 풀은 심볼의 출력 스트링을 나타낸다.
풀은 분말, 액체 또는 고체 형태를 가진다. 식별자 풀의 각각의 식별자는 구성요소 핵산 분자를 포함하는 핵산 분자이다. 구성요소 핵산 분자의 적어도 일부는 하나 이상의 프로브, 가령, PCR 프라이머 또는 친화성 태깅된 올리고뉴클레오티드에 개별적으로 결합될 수 있다. 각각의 식별자는 M개의 레이어 각각으로부터의 구별되는 구성요소를 포함할 수 있으며, 여기서 각각의 레이어는 구성요소 세트를 포함한다.
단계(3304 및 3306)의 if-then-else 연산은 프로브로 식별자의 적어도 하나의 구성요소를 표적으로 한다. 연산은 특정 구성요소를 포함하는 풀의 식별자를 액세스하는 연산을 포함할 수 있다. 예를 들어, 프로브는 PCR 프라이머이고 식별자는 PCR을 통해 액세스된다. 또 다른 예로서, 프로브는 친화성 태깅된 올리고뉴클레오티드이고 식별자는 친화성 풀다운 분석을 통해 액세스된다. 하나 이상의 풀에서 여러 if-then-else 연산이 병렬로 수행될 수 있다. 예를 들어, 두 개의 작업이 두 개의 식별자 풀에서 병렬로 수행된다.
방법(3300)은 제1 풀, 중간 풀, 또는 최종 풀 중 적어도 하나를 적어도 두 개의 복제 풀로 분할하는 것을 더 포함할 수 있다. 이 분할은 병렬화된 if-then-else 연산을 가능하게 한다. 식별자의 충분한 농도를 보장하기 위해, 예를 들어 PCR을 사용하여 분할하기 전에 풀이 복제될 수 있다. 둘 이상의 풀(가령, 중간 풀)이 결합되어 식별자의 새로운 풀(가령, 새로운 중간 풀 또는 두 번째 풀)을 형성할 수 있다.
다른 적용예로서, 길이 n의 비트스트링에 대한 검색은 (log(n) 정도) 비교기 회로의 단 하나의 인스턴스와 동등한 런타임으로 DNA의 비정형 데이터에 걸쳐 수행될 수 있다. 반면 종래의 하드웨어에서 수행된 등가 검색은 데이터를 RAM으로 이주시키기 위한 비용과 시간을 추가로 설명한다. 이 적용예에서, 대용량 아카이브 데이터 세트에서 일반적으로 데이터가 인코딩된 후에 생각되는 패턴에 대해 대용량 데이터 세트를 검색하는 것이 고려된다. 예를 들어, 패턴은 이미지의 대규모 데이터 웨어하우스에서 관심 있는 사람의 모든 사진일 수 있다. 아카이브가 작성된 후 데이터에서 원하는 패턴을 발견할 수 있는 기능이 고안될 수 있다. 이러한 기능은 예를 들어 기계 학습 알고리즘을 사용하여 구성할 수 있다. 이들 패턴-발견 기능은 부울 회로 표현을 가지며 if-then-else 연산을 사용하여 DNA에서 구현될 수 있다. 연산은 학습된 모델에 따라 데이터 세트의 모든 데이터 개체에 동시에 적용되고 관심 패턴에 맞는 개체를 식별할 수 있다. 종래의 하드웨어에서 동일한 작업을 수행하는 것은 RAM 및 프로세서의 제한된 가용성으로 인해 비용이 많이 들고 속도가 느릴 것이다. 학습 알고리즘이 향상됨에 따라 업데이트된 프로그램이 보관된 데이터 세트에 적용되어 관심 있는 새로운 정보를 발견할 수 있다. 또 다른 적용예는 컨볼루션 함수(푸리에 변환과 같은 디지털 신호 처리 기능의 기초)이 특정 패턴을 검색하기 위해 여러 개의 작은 시간 또는 공간 창에 걸쳐 보관된 데이터에 적용될 수 있는 시공간 신호 처리이다. 또 다른 예로, 보안(가령, 인증) 또는 무결성(가령, 고정성 검사) 적용예를 위해 대규모 데이터 세트의 객체에 해시 함수를 적용할 수 있다.
입력 데이터가 객체의 집합을 설명하는 경우, 입력 데이터는 각각의 식별자가 집합의 가능한 객체를 나타내도록 식별자 라이브러리에 고유하게 인코딩될 수 있다. 이 인코딩에서 두 식별자 라이브러리 간의 "AND", "OR" 및 "NOT" 연산의 화학적 방법은 일정한 런타임에서, 종래 기술에서 정의된 연산인 "INTERSECTION", "UNION" 및 "COMPLEMENT"의 집합 연산을 구현한다. 세트 포함(한 세트가 다른 세트의 하위 집합인지 확인) 및 동등성을 수행하기 위한 화학적 방법도 DNA 플랫폼에서 수행될 수 있다. 이들 연산과 관계는 집합 대수학의 모든 기능을 실행하는 데 사용할 수 있다.
DNA 플랫폼은 또한 기계 학습(ML)에 대한 지원을 포함할 수 있다. ML을 사용한 개념적 인덱싱은 고차원 벡터를 사용하여 데이터를 구성하고 주석을 추가한다. 본 명세서에 기재된 시스템은 이러한 데이터에 대한 기본적이고 효율적인 저장 및 쿼리를 제공하여 ML 모델의 기능이 데이터의 관련 개념 및 관계를 캡처할 수 있도록 한다. 기술 분야에 알려진 바와 같이 순열 및 합과 같은 DNA에 대한 연산은 개념적 관계를 효율적으로 발견, 저장 및 쿼리하기 위한 벡터 연산으로 구현될 수 있다. 식별자 라이브러리는 저장 매체에 기본적으로 저장 및 구조를 통합하는 지능형 메모리를 구축하기 위한 플랫폼으로 사용될 수 있다. DNA 기반 스토리지 시스템은 기본적으로 플랫폼에 대한 알고리즘과 데이터 구조를 지원한다. 수명이 긴 초저전력 메모리 뱅크는 데이터를 개념적 구조로 지속적으로 구성하고 의미가 풍부한 쿼리 및 추론을 가능하게 하도록 구성될 수 있다.
전술한 바는 단지 본 개시의 원리를 예시한 것이며, 장치 및 방법은 제한이 아닌 예시의 목적으로 제공된 설명된 구현 이외의 것에 의해 실시될 수 있다. 본 개시내용을 검토한 후 당업자에게 변형 및 수정이 일어날 것이다. 개시된 특징은 본 명세서에 설명된 하나 이상의 다른 특징과 함께 임의의 조합 및 하위 조합(다중 종속 조합 및 하위 조합 포함)으로 구현될 수 있다. 임의의 구성요소를 포함하여 위에서 설명되거나 예시된 다양한 특징은 다른 시스템에 결합되거나 통합될 수 있다. 또한 일부 기능은 생략되거나 구현되지 않을 수 있다.
변경, 대체 및 변경의 예는 당업자에 의해 확인 가능하며 여기에 개시된 정보의 범위를 벗어나지 않고 이루어질 수 있다. 여기에 인용된 모든 참고 문헌은 그 전체가 참고로 포함되며 본 출원의 일부가 된다.

Claims (165)

  1. 핵산 분자의 풀에 저장된 디지털 정보로부터 비트의 스트링 중 특정 비트의 순위를 획득하기 위한 방법으로서, 각각의 비트는 비트 값 및 비트 위치를 가지며, 상기 방법은:
    (a) 비트의 스트링을 나타내는 식별자 핵산 분자의 제1 풀을 획득하는 단계 - 상기 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성됨 - ,
    (b) 비트의 스트링으로부터 얻어진 카운터 심볼의 스트링을 나타내는 식별자 핵산 분자의 제2 풀을 획득하는 단계 - 각각의 카운터 심볼은 비트의 스트링에서 매 w 비트마다, 특정 비트 값을 갖는 비트 수의 러닝 카운트를 나타내는 b 카운터 비트의 스트링에 의해 나타내어짐 - ,
    (c) (1) 상기 특정 비트에 선행하는 w 비트의 모든 블록, 또는 (2) 상기 특정 비트를 포함하는 w 비트의 블록을 포함해 상기 특정 비트에 선행하는 w 비트의 모든 블록에 대해, 제2 풀 내 주어진 값의 비트의 개수의 러닝 카운트를 나타내는 대응하는 카운터 심볼을 나타내는 적어도 식별자 핵산 분자를 표적으로 하도록 제2 프로브 시리즈에 의해 단계 (b)의 제2 풀을 액세스함으로써 제1 카운트를 획득하는 단계,
    (d) 제1 풀 내, 단계 (c)에서 카운트되지 않고 특정 비트에 선행하거나 특정 비트를 포함하는 비트를 나타내거나 (2) 단계 (c)에서 카운트되지만 특정 비트에 선행하지 않거나 특정 비트를 포함하지 않는 비트를 나타내는 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하도록 제1 프로브 시리즈에 의해 단계 (a)의 제1 풀을 액세스함으로써 제2 카운트를 획득하는 단계, 및
    (e) 제1 카운트 및 제2 카운트로부터 비트의 스트링 내 특정 비트의 순위를 획득하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 식별자의 존재가 비트 위치에서 '1'의 비트-값을 나타내도록, 제1 풀 내 식별자 핵산 분자가 비트의 스트링을 나타내는, 방법.
  3. 제1항 또는 제2항에 있어서, 단계 (c)의 제1 카운트는 특정 비트에 선행하는 w 비트의 모든 블록을 나타내고, 단계 (d)의 제1 프로브 시리즈는 제1 풀 내에서 단계 (c)에서 카운트되지 않고 특정 비트에 선행하거나 특정 비트를 포함하는 비트를 나타내는 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하며, 단계 (e)의 제1 카운트 및 제2 카운트를 합산함으로서 비트의 스트링 내 특정 비트의 순위가 획득되는, 방법.
  4. 제1항 또는 제2항에 있어서, 단계 (c)의 제1 카운트가 특정 비트를 포함하는 w 비트의 블록을 포함하여 특정 비트에 선행하는 w 비트의 모든 블록을 나타낼 때, 제1 프로브 시리즈는 제1 풀 내에서 단계 (c)에서 카운트되지 않고 특정 비트에 선행하거나 특정 비트를 포함하지 않는 비트를 나타내는 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하며, 비트의 스트링 내 특정 비트의 순위는 단계 (e)로부터 제2 카운트를 뺌으로써 획득되는, 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 제1 카운트는 단계 (c)의 표적이 된 식별자 핵산 분자에 대응하는 카운터 심볼 값을 읽음으로써 획득되는, 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 제2 카운트는 단계 (d)의 표적이 된 식별자 핵산 분자를 읽음으로써 획득되는, 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 단계 (a)의 제1 풀은 단계 (b)의 제2 풀인, 방법.
  8. 제1항 내지 제6항 중 어느 한 항에 있어서, 단계 (a)의 제1 풀은 단계 (b)의 제2 풀과 별개인, 방법.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 제1 풀에서의 대응하는 식별자 핵산 분자의 존재는 1의 비트 값을 나타내고, 제1 풀에서의 대응하는 식별자 핵산 분자의 부재는 0의 비트 값을 나타내는, 방법.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서, 비트의 스트링은 길이 n을 가지며, b는 log2(n+1)의 천장값인, 방법.
  11. 제10항에 있어서, 카운터 심볼의 스트링은 n 나누기 w 카운터 심볼의 천장값을 포함하며, b에 n 나누기 w의 천장값을 곱한 값에 대응하는 길이를 갖는 카운터 비트 스트링으로 나타내어지는, 방법.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서, 특정 비트가 w비트의 제1 블록 내에 있는 경우, w 비트의 제1 블록에 선행하는 러닝 카운트가 0인, 방법.
  13. 제1항 내지 제12항 중 어느 한 항에 있어서, 특정 비트가 w 비트의 제1 블록 내에 있지 않는 경우, 특정 비트에 선행하는 w 비트의 모든 블록의 카운터 심볼이 0 내지 w*B(x)-1의 범위의 위치 내에서 값 1을 갖는 비트의 스트링의 비트 수를 나타내며, 0은 비트 스트링의 첫 번째 위치이고, x는 비트 스트링 내 특정 비트의 위치에 대응하며 B(x)는 x 나누기 w의 바닥값인, 방법.
  14. 제13항에 있어서, 단계 (c)의 제2 풀 내 표적이 된 식별자 핵산 분자가 위치 b*B(x) 및 b*(B(x)+1)-1에 의해 규정된 범위 내에 있고, 0의 위치는 비트 스트링 내 첫 번째 위치에 대응하는, 방법.
  15. 제1항 내지 제14항 중 어느 한 항에 있어서, 제2 카운트는 위치 w*B(x) 내지 x의 범위 내 값 1을 갖는 비트 스트링 내 비트의 수에 대응하며, x는 비트 스트링 내 특정 비트의 위치에 대응하고, 위치 0은 첫 번째 위치이며, B(x)는 x 나누기 w의 바닥값인, 방법.
  16. 제1항 내지 제15항 중 어느 한 항에 있어서, w는 b의 값으로 설정되는, 방법.
  17. 제1항 내지 제15항 중 어느 한 항에 있어서, w는 1의 값으로 설정되는, 방법.
  18. 제17항에 있어서, 제1 카운트는 특정 비트를 포함하는 w 비트의 블록에 대응하는 카운터 심볼을 나타내는 단계 (c)의 식별자 핵산 분자를 표적으로 함으로써 획득되고, 순위는 제1 카운트와 동등한, 방법.
  19. 제18항에 있어서, 단계 (d)는 실행되지 않는, 방법.
  20. 제1항 내지 제19항 중 어느 한 항에 있어서, 비트 스트링 내 비트의 블록이 식별자 핵산 분자의 제1 풀 내 인접하게 순서화된 식별자 핵산 분자의 블록에 매핑되는, 방법.
  21. 제1항 내지 제20항 중 어느 한 항에 있어서, 제1 풀에서 식별자 핵산 분자의 존재 또는 부재가 비트 스트링 내 하나의 비트 값 또는 또 다른 비트 값과 직접 상관되지 않는, 방법.
  22. 제20항 또는 제21항에 있어서, 비트 스트링 중 고정 길이 서브스트링(워드)이 고정 개수의 가능한 고유 식별자 핵산 분자 중 고정 개수의 고유 식별자 핵산을 포함하는 코드워드로 매핑되는, 방법.
  23. 제1항 내지 제22항 중 어느 한 항에 있어서, 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 쓰고, 액세스하고 읽는 에러를 검출하고 정정하도록 추가 정보를 이용하는 단계를 더 포함하는, 방법.
  24. 제23항에 있어서, 상기 추가 정보는 제1 풀 및 제2 풀의 식별자 핵산 분자에 저장되는, 방법.
  25. 제1항 내지 제24항 중 어느 한 항에 있어서, 비트 스트링은 심볼 스트링을 나타내며, 순위는 심볼의 스트링 내 특정 심볼에 대해 획득되는, 방법.
  26. 제25항에 있어서, 심볼 스트링 내 심볼은 심볼 값의 세트로부터 선택되며, 단계 (b)의 카운터 심볼의 스트링은 특정 심볼 값을 갖는 심볼의 수의 러닝 카운트를 나타내는, 방법.
  27. 제25항 또는 제26항에 있어서, 단계 (b)의 식별자 핵산 모듈의 상이한 제2 풀이 특정 심볼 값의 인스턴스의 수를 카운트하는 카운터 심볼의 상이한 스트링을 나타내며, 카운터 심볼의 각각의 상이한 스트링은 대응하는 특정 심볼 값의 인스턴스를 카운팅하는, 방법.
  28. 제1항 내지 제27항 중 어느 한 항에 있어서, M개의 선택된 구성요소 핵산 분자를 물리적으로 조합함으로써 식별된 핵산 분자를 형성하는 단계를 더 포함하고, M개의 선택된 구성요소 핵산 분자 각각은 M개의 상이한 레이어로 분리되는 구별되는 구성요소 핵산 분자의 세트로부터 선택되는, 방법.
  29. 핵산 분자의 풀로부터 디지털 정보를 인출하기 위한 방법으로서, 상기 방법은:
    (a) 식별자 핵산 분자의 제1 풀을 획득하는 단계 - 상기 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분은 하나 이상의 프로브에 결합되도록 구성되며, 상기 제1 풀 내 대응하는 식별자 핵산 분자의 존재 또는 부재에 의해 심볼 값이 나타내어지도록 식별자 핵산 분자가 심볼의 스트링을 나타냄 - ,
    (b) 제1 프로브 시리즈로 상기 제1 풀을 액세스하는 단계 - 프로브 각각은 구성요소 핵산 분자 중 적어도 하나를 표적으로 하여, 상기 제1 풀로부터 식별자 핵산 분자의 서브세트를 포함하는 제2 풀을 생성함 - ,
    (c) 상기 제2 풀로부터 식별자 핵산 분자의 서브세트의 서열을 읽는 단계, 및
    (d) 상기 서열을 이용해 단계 (a)로부터의 심볼의 스트링에서 적어도 심볼의 서브세트를 획득하는 단계를 포함하는, 방법.
  30. 제29항에 있어서, 각각의 식별자 핵산 분자는 각각의 M개의 레이어로부터의 구성요소 핵산 서열을 갖는 구별되는 구성요소 핵산 분자를 포함하고, 각각의 레이어는 구성요소 핵산 서열의 세트를 포함하는, 방법.
  31. 제30항에 있어서, M개의 레이어는 논리적으로 순서화되는, 방법.
  32. 제31항에 있어서, 각각의 레이어의 구성요소 핵산 서열은 논리적으로 순서화되는, 방법.
  33. 제32항에 있어서, 식별자 핵산 분자는 제1 레이어 내 대응하는 구성요소 핵산 서열에 의해 식별자 핵산 서열을 정렬(sort)하고, 대응하는 구성요소 핵산 서열에 의해 식별자 핵산 서열을 서브-정렬(sub-sort)하며, 나머지 M-2 레이어 각각에 대해 서브-정렬 프로세스를 반복함으로써 논리적으로 순서화되는 식별자 핵산 서열에 대응하는, 방법.
  34. 제33항에 있어서, 각각의 식별자 서열은 루트 노드에서 시작하고, 각각의 레이어에 대해 하나씩의 인스턴스인 M개의 인스턴스에 걸쳐 분기되며, 리프 노드에서 종료되는 쿼리 트리에서의 경로로서 나타내어지는 구성요소 핵산 서열의 시리즈를 포함하고, 각각의 리프 노드가 식별자 핵산 서열을 나타내는, 방법.
  35. 제34항에 있어서, 제1 프로브 시리즈가 쿼리 트리 내 루트 노드로부터의 부분 또는 전체 경로에 대응하는, 방법.
  36. 제35항에 있어서, 프로브 시리즈가 단일 식별자 핵산 분자를 표적으로 하도록, 전체 경로는 M개의 프로브를 포함하는 루트에서 리프까지의 경로에 대응하는, 방법.
  37. 제36항에 있어서, 프로브 시리즈가 상이한 서열을 갖는 식별자 핵산 분자의 복수의 모집단을 표적으로 하도록, 부분 경로는 M보다 적은 개수의 프로브에 대응하는, 방법.
  38. 제37항에 있어서, 상이한 서열을 갖는 식별자 핵산 분자의 복수의 모집단이 적어도 M번째 레이어 내 상이한 구성요소 핵산 분자에 대응하는, 방법.
  39. 제29항 내지 제38항 중 어느 한 항에 있어서, 제1 풀은 복수의 프로브 시리즈에 의해 액세스되는, 방법.
  40. 제39항에 있어서, 단계 (a)의 제1 풀을 적어도 두 개의 복제 풀로 분할하는 단계를 더 포함하며, 단계 (b), (c), 및 (d)는 각각의 프로브 시리즈에 의해 상기 복제 풀 각각 상에서 실행되는, 방법.
  41. 제40항에 있어서, 적어도 두 개의 복제 풀로 분할하기 전에 상기 제1 풀을 복제하는 단계를 더 포함하는, 방법.
  42. 제41항에 있어서, 프로브 서브-시리즈로 식별자 핵산 분자의 제1 풀을 액세스하여 식별자 핵산 분자의 중간 풀을 생성하는 단계를 더 포함하는, 방법.
  43. 제42항에 있어서, 식별자 핵산의 중간 풀을 적어도 두 개의 복제 풀로 분할하는 단계를 더 포함하는, 방법.
  44. 제43항에 있어서, 적어도 두 개의 복제 풀로 분할하기 전에 상기 중간 풀을 복제하는 단계를 더 포함하는, 방법.
  45. 제39항 내지 제44항 중 어느 한 항에 있어서, 다음 프로브 서브-시리즈로 식별자 핵산 분자의 제1 중간 풀을 액세스하여, 식별자 핵산 분자의 제2 중간 풀 또는 식별자 핵산 분자의 제2 풀을 형성하는 단계를 더 포함하는, 방법.
  46. 제39항 내지 제45항 중 어느 한 항에 있어서, 식별자 핵산 분자의 적어도 두 개의 중간 풀을 조합하여 식별자 핵산 분자의 또 다른 중간 풀 또는 식별자 핵산 분자의 제2 풀을 형성하는 단계를 더 포함하는, 방법.
  47. 제41항 또는 제44항에 있어서, 복제하는 단계는 중합 효소 연쇄 반응(PCR: polymerase chain reaction)에 의해 실행되는, 방법.
  48. 제29항 내지 제47항 중 어느 한 항에 있어서, 프로브는 PCR 프라이머이며, 액세스하는 단계는 중합 효소 연쇄 반응에 의해 실행되는, 방법.
  49. 제29항 내지 제47항 중 어느 한 항에 있어서, 상기 프로브는 친화성 태깅된 올리고뉴클레오타이드(affinity tagged oligonucleotide)이며, 액세스하는 단계는 친화성 풀 다운 분석(affinity pull down assay)에 의해 실행되는, 방법.
  50. 길이 n의 비트 스트링을 포함하는 메시지에서 길이 p의 특정 비트 패턴의 카운트를 획득하기 위한 방법으로서, 상기 방법은
    (a) 비트 스트링 L을 나타내는 식별자 핵산 분자의 제1 풀을 획득하는 단계 - 비트 스트링 L은 메시지의 버로우즈-휠러 변환 행렬(Burrows-Wheeler Transform matrix)의 마지막 열이고, 제1 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성됨 - ,
    (b) 비트 스트링 L로부터 얻어진 카운터 심볼의 스트링을 나타내는 식별자 핵산 분자의 제2 풀을 획득하는 단계 - 각각의 카운터 심볼은 비트 스트링 L에서 매 w 비트마다, '1'의 특정 비트 값을 갖는 비트 수의 러닝 카운트를 나타내는 b 카운터 비트의 스트링에 의해 나타내어짐 - ,
    (c) 프로브 시리즈를 이용해 제2 풀로부터 비트 스트링 L 내 '1'의 비트 값의 총 등장 횟수에 대해 카운터 심볼을 나타내는 식별자 핵산 분자를 액세스하는 단계,
    (d) 단계 (c)에서 액세스된 식별자 핵산 분자를 읽어 비트 스트링 L 내 '1'의 비트 값의 총 등장 횟수를 카운팅하는 단계,
    (e) 단계 (d)로부터의 각각의 비트 값의 총 등장 횟수를 이용해 메시지의 버로우즈-휠러 변환 행렬의 제1 열 F를 재구성하는 단계,
    (f) 제1 열 F에서 h z를 포함하는 p번째 비트 값의 범위를 정의하는, 첫 번째 위치 h와 마지막 위치 z를 결정하는 단계,
    (g) 제1 프로브 시리즈를 이용해 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 액세스하여, L 내 위치 h-1에서의, 패턴의 (p-i)번째 비트 값의 순위 rh-1를 계산하는 단계 - i=1 - ,
    (h) 제2 프로브 시리즈를 이용해 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 액세스하여, L 내 위치 z 에서의, 패턴의 (p-i) 번째 비트 값의 순위 rz를 계산하는 단계,
    (i) r h-1 이 rz와 동일한 경우, 메시지 내 패턴의 등장 횟수 카운트를 0으로 설정하는 단계,
    (j) 그렇지 않고, r h-1 이 rz와 동일하지 않은 경우,
    (j1) h를 F 내 (p-i)번째 비트 값의 (r h-1 +1)번째 인스턴스의 인덱스로 설정하는 단계,
    (j2) z를 F 내 (p-i)번째 비트 값의 r z th 번째 인스턴스의 인덱스로 설정하는 단계,
    (j3) i 를 1씩 증분시키는 단계,
    (j4) i=p-1일 때까지, 단계 (g), (h), (i), (j), (j1), (j2), 및 (j3)를 반복하는 단계,
    (j5) 메시지 내 패턴의 등장 횟수 카운트를 z-h+1로서 계산하는 단계를 포함하는, 방법.
  51. 제50항에 있어서, 단계 (a)의 제1 풀은 단계 (b)의 제2 풀인, 방법.
  52. 제50항에 있어서, 단계 (a)의 제1 풀은 단계 (b)의 제2 풀과 별개인, 방법.
  53. 제50항 내지 제52항 중 어느 한 항에 있어서, 제1 풀에서의 대응하는 식별자 핵산 분자의 존재는 1의 비트 값을 나타내고, 제1 풀에서의 대응하는 식별자 핵산 분자의 부재는 0의 비트 값을 나타내는, 방법.
  54. 제50항 내지 제53항 중 어느 한 항에 있어서, b는 log2(n+1)의 천장값인, 방법.
  55. 제54항에 있어서, 카운터 심볼의 스트링은 n 나누기 w 카운터 심볼의 천장값을 포함하며, b에 n 나누기 w의 천장값을 곱한 값에 대응하는 길이를 갖는 카운터 비트 스트링으로 나타내어지는, 방법.
  56. 제50항 내지 제55항 중 어느 한 항에 있어서, L 내 w 비트의 제1 블록을 선행하는 비트 값의 러닝 카운트는 0인, 방법.
  57. 제50항 내지 제56항 중 어느 한 항에 있어서, w는 b의 값으로 설정되는, 방법.
  58. 제50항 내지 제57항 중 어느 한 항에 있어서, w는 1의 값으로 설정되는, 방법.
  59. 제50항 내지 제58항 중 어느 한 항에 있어서, 비트 스트링 L 내 비트의 블록을 제1 풀 내 인접하게 순서화된 식별자 핵산 분자의 블록으로 매핑하는 단계를 더 포함하는, 방법.
  60. 제59항에 있어서, 비트 스트링 L 중 고정 길이 서브스트링이 고유 식별자 핵산 분자의 고정 크기 세트로부터 선택된 고정 개수의 고유 식별자 핵산 분자에 의해 나타내어지는 코드워드로 매핑되는, 방법.
  61. 제50항 내지 제60항 중 어느 한 항에 있어서, 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 쓰고, 액세스하고 읽는 에러를 검출하고 정정하도록 추가 정보가 이용되는, 방법.
  62. 제61항에 있어서, 상기 추가 정보는 제1 풀 및 제2 풀의 식별자 핵산 분자에 저장되는, 방법.
  63. 제50항 내지 제62항 중 어느 한 항에 있어서, 메시지의 버로우즈-휠러 변환으로부터 도출되는 접미부 배열 SA를 나타내는 식별자 핵산 분자의 제3 풀을 획득하는 단계를 더 포함하고, SA의 각각의 원소는 메시지 내 L의 대응하는 원소의 위치를 나타내는 적어도 log2(n) 비트의 비트 스트링에 의해 나타내어지는, 방법.
  64. 제63항에 있어서, 카운트가 0보다 클 때, hz에 대한 최종 값 사이의 그리고 상기 최종 값을 포함하는 범위 내 위치에서 접미부 배열 내 원소에 대응하는 제3 풀 내 식별자 핵산 분자를 액세스함으로써, 메시지 내 패턴의 등장을 찾는 단계를 더 포함하는, 방법.
  65. 제64항에 있어서, 메시지를 나타내는 식별자 핵산 분자의 제4 풀을 획득하는 단계를 더 포함하는, 방법.
  66. 제65항에 있어서, 제1 위치 및 상기 제1 위치 주위의 이웃 위치에 대응하는 제4 풀 내 식별자 핵산 분자를 액세스함으로써 패턴의 제1 위치의 콘텍스트를 추출하는 단계를 더 포함하는, 방법.
  67. 길이 n의 비트 스트링을 포함하는 메시지에서 길이 p의 특정 비트 패턴의 카운트를 획득하기 위한 방법으로서, 상기 방법은
    (a) 비트 스트링 L을 나타내는 식별자 핵산 분자의 제1 풀을 획득하는 단계 - 비트 스트링 L은 메시지의 버로우즈-휠러 변환 행렬(Burrows-Wheeler Transform matrix)의 마지막 열이고, 제1 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성됨 - ,
    (b) 비트 스트링 L로부터 얻어진 카운터 심볼의 스트링을 나타내고 특정 비트 값을 갖는 비트의 개수의 러닝 카운트를 나타내는 식별자 핵산 분자의 제2 풀을 획득하는 단계,
    (c) 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 선택적으로 액세스함으로써, 메시지 내 특정 비트 패턴의 카운트를 획득하는 단계를 포함하는, 방법.
  68. 제67항에 있어서, 단계 (c)는 버로우즈-휠러 변환 행렬의 제1 열 F를 재구성하는 단계를 더 포함하는, 방법.
  69. 제68항에 있어서, 단계 (c)는 프로브 시리즈를 이용하여 비트 스트링 L 내 특정 비트 값의 총 등장 횟수에 대한 카운터 심볼을 나타내는 제2 풀로부터 식별자 핵산 분자를 액세스하는 단계, 및 특정 비트 값의 통 등장 횟수를 이용해 F를 재구성하는 단계를 포함하는, 방법.
  70. 제68항 또는 제69항에 있어서, 단계 (c)는 패턴 내 p번째 비트 값을 갖는 F 내 위치의 범위를 결정하는 단계를 더 포함하는, 방법.
  71. 제70항에 있어서, F 내 위치의 범위가 첫 번째 위치 h와 마지막 위치 z에 의해 정의되고, h와 z를 포함하는, 방법.
  72. 제70항 또는 제71항에 있어서, 단계 (c)는 p번째 비트 후 패턴 내 각각의 선행하는 비트에 대해:
    제1 풀 및 제2 풀로부터 식별자 핵산 분자를 액세스하도록 프로브 시리즈를 이용해, 상기 범위에 바로 선행하는 위치에서 L 내 대응하는 비트 값의 제1 순위 및 범위의 종단 위치에 있는 L 내 대응하는 비트 값의 제2 순위를 결정하는 단계, 및
    제1 순위 및 제2 순위를 이용해 패턴 내 다음 비트에 선행하는 대응하는 비트의 인스턴스를 갖는 F 내 위치의 범위를 업데이트하는 단계를 포함하는,방법.
  73. 제72항에 있어서, 제1 순위는 L 내 위치 h-1에서 패턴 내 각자의 선행하는 비트 값을 가지며, 제2 순위는 L 내 위치 z에서 패턴 내 각자의 선행하는 비트 값을 갖는, 방법.
  74. 제73항에 있어서, 범위를 업데이트하는 단계는, 제1 순위에 기초하여, h를 F에서 패턴 내 각자의 선행하는 비트 값의 하나의 인스턴스의 위치로 설정하는 단계를 포함하는, 방법.
  75. 제73항 또는 제74항에 있어서, 범위를 업데이트하는 단계는, 제2 순위에 기초하여, z를 F에서 패턴 내 각자의 선행하는 비트 값의 하나의 인스턴스의 위치로 설정하는 단계를 포함하는, 방법.
  76. 제72항 내지 제75항 중 어느 한 항에 있어서, 단계 (c)는 제1 순위 및 제2 순위의 최종 값에 기초하여 메시지 내 패턴의 등장 횟수의 카운트를 설정하는 단계를 더 포함하는, 방법.
  77. 제76항에 있어서, 등장 횟수 카운트는 제1 순위와 제2 순위의 최종 값들 간 차이인, 방법.
  78. 제76항에 있어서, 제1 순위와 제2 순위가 p번째 비트 또는 임의의 선행하는 비트에 대해 서로 동일한 경우 등장 횟수 카운트가 0으로 설정되는, 방법.
  79. 길이 ns의 심볼 스트링을 포함하는 메시지 내 길이 ps의 특징 심볼 패턴의 카운트를 획득하기 위한 방법으로서, 각각의 심볼은 r개의 심볼 값의 세트로부터 선택되며, 상기 방법은:
    (a) 메시지의 버로우즈-휠러 변환 행렬(Burrows-Wheeler Transform matrix)의 마지막 열인 심볼 스트링 L을 나타내는 식별자 핵산 분자의 제1 풀을 획득하는 단계 - 제1 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성됨 - ,
    (b) 식별자 핵산 분자의 r개의 제2 풀을 획득하는 단계 - 제2 풀 각각은 L로부터 얻어지고 대응하는 심볼 값 Rv을 갖는 L 내 심볼의 개수의 러닝 카운트를 나타내는 카운터 심볼의 스트링 Cv에 대응함, 이때, v=1,2, ..., r임 - ,
    (c) 제1 풀 및 r개의 제2 풀로부터 식별자 핵산 분자를 선택적으로 액세스함으로써, 메시지 내 길이 ps의 특정 심볼 패턴의 카운트를 획득하는 단계를 포함하는, 방법.
  80. 제79항에 있어서, 단계 (c)는 버로우즈-휠러 변환 행렬의 제1 열 F를 재구성하는 단계를 더 포함하는, 방법.
  81. 제80항에 있어서, 단계 (c)는, 프로브 시리즈를 이용해, L 내 각각의 대응하는 심볼 값 Rv의 총 등장 횟수를 나타내는 r개의 제2 풀 각각에서 마지막 카운터 심볼로부터 식별자 핵산 분자를 액세스하는 단계, 및 각각의 대응하는 심볼 값 Rv의 총 등장 횟수를 이용해 F를 재구성하는 단계를 포함하는, 방법.
  82. 제80항 또는 제81항에 있어서, 단계 (c)는 패턴 내 p번째 심볼 값을 갖는 F 내 위치의 범위를 결정하는 단계를 더 포함하는, 방법.
  83. 제82항에 있어서, F 내 위치의 범위가 첫 번째 위치 h와 마지막 위치 z에 의해 정의되고, h와 z를 포함하는, 방법.
  84. 제82항 또는 제83항에 있어서, 단계 (c)는 p번째 심볼 후 패턴 내 각각의 선행하는 심볼에 대해:
    제1 풀 및 대응하는 제2 풀로부터 식별자 핵산 분자를 액세스하도록 프로브 시리즈를 이용해, 상기 범위에 바로 선행하는 위치에서 L 내 대응하는 심볼 값의 제1 순위 및 범위의 종단 위치에 있는 L 내 대응하는 심볼 값의 제2 순위를 결정하는 단계, 및
    제1 순위 및 제2 순위를 이용해 패턴 내 다음 심볼에 선행하는 대응하는 심볼의 인스턴스를 갖는 F 내 위치의 범위를 업데이트하는 단계를 더 포함하는, 방법.
  85. 제84항에 있어서, 제1 순위 rh-1는 L 내 위치 h-1에서 패턴 내 각자의 선행하는 심볼 값을 가지며, 제2 순위 rz는 L 내 위치 z에서 패턴 내 각자의 선행하는 심볼 값을 갖는, 방법.
  86. 제85항에 있어서, 범위를 업데이트하는 단계는, h를 F에서 패턴 내 각자의 선행하는 심볼 값의 (rh-1+1)번째 인스턴스의 위치로 설정하는 단계를 포함하는, 방법.
  87. 제85항 또는 제86항에 있어서, 범위를 업데이트하는 단계는, z를 F에서 패턴 내 각자의 선행하는 심볼 값의 rz번째 인스턴스의 인덱스로 설정하는 단계를 포함하는, 방법.
  88. 제84항 내지 제87항 중 어느 한 항에 있어서, 단계 (c)는 제1 순위 및 제2 순위의 최종 값에 기초하여 메시지 내 패턴의 등장 횟수의 카운트를 설정하는 단계를 더 포함하는, 방법.
  89. 제88항에 있어서, 등장 횟수 카운트는 제1 순위와 제2 순위의 최종 값들 간 차이인, 방법.
  90. 제88항에 있어서, 제1 순위와 제2 순위가 p번째 심볼 또는 임의의 선행하는 심볼에 대해 서로 동일한 경우 등장 횟수 카운트가 0으로 설정되는, 방법.
  91. 제79항 내지 제90항 중 어느 한 항에 있어서, 식별자 핵산 분자의 제1 풀은 r개의 제1 풀 중 하나이고, 제1 풀 각각은 비트 스트링 Lv에 대응하며, v=1,2,...,r이고, Lv의 원소가 심볼 값 Rv과 매칭되는 L의 원소에 대해 '1'의 비트-값을 갖고 매칭되지 않는 원소에 대해 '0'의 비트-값을 갖거나, 그 반대인, 방법.
  92. 제91항에 있어서, Lv에 대응하는 제1 풀이 패턴 내 심볼 값 Rv의 제1 및 제2 순위를 결정하는 데 사용되는, 방법.
  93. 제79항 내지 제92항 중 어느 한 항에 있어서, 메시지의 버로우즈-휠러 변환으로부터 도출되는 접미부 배열 SA를 나타내는 식별자 핵산 분자의 풀, SA 풀을 획득하는 단계를 더 포함하고, SA의 각각의 원소는 메시지 내 L의 대응하는 원소의 위치를 나타내는 적어도 log2(n) 비트의 비트 스트링에 의해 나타내어지는, 방법.
  94. 제93항에 있어서, 카운트가 0보다 크다고 가정할 때, F 내 위치의 최종 범위에 의해 주어진 위치의 SA의 원소에 대응하는 SA 풀 내 식별자 핵산 분자를 액세스함으로써, 메시지 내 패턴의 등장을 찾는 단계를 더 포함하는, 방법.
  95. 제94항에 있어서, 메시지를 나타내는 식별자 핵산 분자의 메시지 풀을 획득하는 단계를 더 포함하는, 방법.
  96. 제95항에 있어서, 제1 위치 및 상기 제1 위치 주위의 이웃 위치에 대응하는 메시지 풀 내 식별자 핵산 분자를 액세스함으로써 패턴의 제1 위치의 콘텍스트를 추출하는 단계를 더 포함하는, 방법.
  97. 제79항 내지 제96항 중 어느 한 항에 있어서, 단계 (c)는:
    (c.1) 제1 열 F에서 h z를 포함하는 p번째 심볼 값의 범위를 정의하는, 첫 번째 위치 h와 마지막 위치 z를 결정하는 단계,
    (c.2) 프로브 시리즈를 이용해 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 액세스하여, L 내 위치 h-1에서의, 패턴의 (p-i)번째 심볼 값의 순위 rh-1를 계산하는 단계 - i=1 - ,
    (c.3) 프로브 시리즈를 이용해 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 액세스하여, L 내 위치 z에서의, 패턴의 (p-i)번째 심볼 값의 순위 rz를 계산하는 단계,
    (c.4) r h-1 이 rz와 동일한 경우, 메시지 내 패턴의 등장 횟수 카운트를 0으로 설정하는 단계, 및
    (c.5) 그렇지 않고, rh-1이 rz와 동일하지 않은 경우,
    (c.5.A) h를 F 내 (p-i)번째 심볼 값의 (r h-1 +1)번째 인스턴스의 인덱스로 설정하는 단계,
    (c.5.B) z를 F 내 (p-i)번째 심볼 값의 r z th 번째 인스턴스의 인덱스로 설정하는 단계,
    (c.5.C) i 를 1씩 증분시키는 단계,
    (c.5.D) i=p-1일 때까지 단계 (c.2), (c.3), (c.4), (c.5), (c.5.A), (c.5.B), 및 (c.5.C)를 반복하는 단계, 및
    (c.5.E) 메시지 내 패턴의 등장 횟수 카운트를 z-h+1로서 계산하는 단계를 포함하는, 방법.
  98. 제97항에 있어서, 단계 (c.2)의 제1 풀 및 제2 풀은 패턴의 (p-i)번째 심볼 값에 대응하는, 방법.
  99. 제97항 또는 제98항에 있어서, 단계 (c.3)의 제1 풀 및 제2 풀은 패턴의 (p-i)번째 심볼 값에 대응하는, 방법.
  100. 디지털 정보를 핵산 분자로 저장하기 위한 방법으로서, 상기 방법은:
    복수의 블록을 획득하는 단계 - 각각의 블록은 심볼 스트링을 포함하고 블록 ID와 연관됨 - ,
    복수의 블록 중 하나의 블록을 하나의 컨테이너로 할당하는 단계,
    상기 블록을 상기 컨테이너와 연관될 복수의 식별자 핵산 서열로 매핑하는 단계 - 각각의 식별자 핵산 서열은 구성요소 핵산 서열을 포함하고, 구성요소 핵산 서열 중 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성됨 - ,
    복수의 식별자 핵산 서열의 개별 식별자 핵산 분자를 구성하는 단계, 및
    할당된 컨테이너에 개별 식별자 핵산 분자를 저장하는 단계 - 컨테이너의 신원 및 이와 연관된 복수의 식별자 핵산 서열을 포함하는 물리 주소가 연관된 블록 ID를 이용해 결정되도록 구성됨 - 를 포함하는, 방법.
  101. 제100항에 있어서, 블록 ID는 정수형, 스트링, 트리플, 속성의 리스트, 또는 시맨틱 주석인, 방법.
  102. 제100항 또는 제101항에 있어서, 상기 물리 주소는 연관된 블록 ID를 이용해 물리 주소의 액세스를 촉진시키도록 설계된 데이터 구조에 저장되는, 방법.
  103. 제100항 내지 제102항 중 어느 한 항에 있어서, 데이터 구조는 B-트리, 트라이, 또는 배열 중 하나인, 방법.
  104. 제102항 또는 제103항에 있어서, 데이터 구조의 적어도 일부분이 인덱스에 디지털 정보와 함께 저장되는, 방법.
  105. 제104항에 있어서, 인덱스는 제2 컨테이너와 연관된 제2 복수의 식별자 핵산 서열을 포함하는, 방법.
  106. 제105항에 있어서, 인덱스는 B-트리 데이터 구조를 포함하고 B-트리의 각각의 노드는 제2 복수의 식별자 핵산 서열의 구별되는 복수의 식별자 핵산 분자를 포함하는, 방법.
  107. 제106항에 있어서, B-트리에서 블록 ID를 검색하는 단계는:
    제1 노드를 포함하는 구별되는 복수의 식별자 핵산 분자를 액세스하는 단계,
    제1 노드의 값을 읽는 단계, 및
    다음 노드로 단계 (i) 및 (ii)의 프로세스를 반복하는 단계 - 다음 노드를 포함하는 구별되는 복수의 식별자 핵산 분자의 신원이 제1 노드의 값과 관련하여 블록 ID 에 의해 결정됨 - 를 포함하는, 방법.
  108. 제107항에 있어서, 제1 노드는 B-트리의 루트 노드이고 단계 (i) 및 (ii)의 프로세스는 B-트리의 리프 노드의 값이 읽힐 때까지 계속되며, 리프 노드의 값은 블록 ID에 대한 블록이 존재하는지 여부를 통신하고, 블록 ID가 존재하는 경우, 상기 블록의 물리 주소를 통신하도록 구성되는, 방법.
  109. 제105항에 있어서, 인덱스는 트라이(trie) 데이터 구조를 포함하고 트라이의 각각의 노드는 제2 복수의 식별자 핵산 서열의 구별되는 복수의 식별자 핵산 분자를 포함하는, 방법.
  110. 제109항에 있어서, 블록 ID는 심볼의 스트링이며 트라이 데이터 구조의 각각의 노드가 심볼의 스트링의 가능한 접두부(prefix)에 대응하는, 방법.
  111. 제110항에 있어서, 트라이 데이터 구조의 리프 노드는 상기 리프 노드 내 트라이 데이터 구조에 의해 특정된 심볼의 스트링과 매칭되는 블록 ID와 연관된 물리 주소를 나타내는, 방법.
  112. 제104항에 있어서, 데이터 구조는 배열(array)이며 배열의 각각의 원소는 제2 복수의 식별자 핵산 서열의 구별되는 복수의 식별자 핵산 분자를 포함하는, 방법.
  113. 제112항에 있어서, 배열 내 각각의 원소는 하나씩의 블록 ID에 대응하는, 방법.
  114. 제113항에 있어서, 배열의 각각의 원소는 연관된 블록 ID의 물리 주소를 저장하는, 방법.
  115. 제104항 내지 제114항 중 어느 한 항에 있어서, 프로브 시리즈를 이용해, 제2 복수의 식별자 핵산 서열을 포함하는 식별자 핵산 분자의 풀로부터, 물리 주소를 액세스하는 단계를 더 포함하는, 방법.
  116. 제102항에 있어서, 데이터 구조는 자기 저장 디바이스, 광학 저장 디바이스, 플래시 메모리 디바이스, 또는 클라우드 저장소에 저장되는, 방법.
  117. 제101항에 있어서, 상기 물리 주소는 블록 ID로 본질적으로 구성되어, 블록 ID가 추가 데이터 구조에 물리 주소를 저장하지 않고 물리 주소로 매핑되는, 방법.
  118. 제117항에 있어서, 블록 ID는 물리 주소와 연관된 복수의 식별자 핵산 서열의 모든 식별자 핵산 서열에 의해 공유되는 복수의 구성요소 핵산 서열로 매핑되는, 방법.
  119. 제100항 내지 제118항 중 어느 한 항에 있어서, 블록과 연관된 복수의 식별자 핵산 서열은 인접하게 순서화된 식별자 핵산 서열을 포함하여, 식별자 범위 내 첫 번째 그리고 마지막 식별자 핵산 분자의 신원을 포함하는 식별자 범위에 의해 상기 복수의 식별자 핵산 서열가 대응하는 물리 주소에서 특정되는, 방법.
  120. 제119항에 있어서, 상기 식별자 범위 내 첫 번째 그리고 마지막 식별자 핵산 서열가 정수형으로 표현되는, 방법.
  121. 제100항 내지 제120항 중 어느 한 항에 있어서, 프로브 시리즈를 이용함으로써 블록과 연관된 복수의 핵산 분자를 액세스하는 단계를 더 포함하는, 방법.
  122. 제115항 또는 제121항에 있어서, 상기 프로브는 PCR 프라이머이며, 액세스하는 단계는 중합 효소 연쇄 반응에 의해 실행되는, 방법.
  123. 제112항 또는 제121항에 있어서, 상기 프로브는 친화성 태깅된 올리고뉴클레오타이드(affinity tagged oligonucleotide)이며, 액세스하는 단계는 친화성 풀 다운 분석(affinity pull down assay)에 의해 실행되는, 방법.
  124. 제100항 내지 제123항 중 어느 한 항에 있어서, 블록 ID는 위치인, 방법.
  125. 제124항에 있어서, 상기 위치는 심볼의 부모 스트링의 대응하는 블록에 의해 나타내어지는 심볼의 스트링의 위치인, 방법.
  126. 제125항에 있어서, 심볼의 상기 부모 스트링은 심볼의 또 다른 스트링에서 패턴의 등장을 카운팅 또는 찾기 위한 데이터 구조를 포함하는, 방법.
  127. 제126항에 있어서, 상기 데이터 구조는 카운터 배열, 버로우즈-휠러 변환(BWT) 행렬의 열, 접미부 배열, 접마사 트리, 또는 역 인덱스 중 하나인, 방법.
  128. 핵산 분자에 저장된 디지털 정보를 연산하기 위한 방법으로서, 상기 방법은:
    식별자 핵산 분자의 제1 풀을 획득하는 단계 - 상기 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성되고, 식별자 핵산 분자는 심볼의 입력 스트링을 나타냄 - ,
    제1 풀 내 식별자 핵산 분자에 대해 if-then-else 연산을 수행하는 단계 - if-then-else 연산은 상기 제1 풀로부터의 식별자 핵산 분자의 서브세트를 갖는 중간 풀을 생성하도록 프로브로 구성요소 핵산 분자 중 적어도 하나를 표적으로 함 - ,
    단계 (b)를 반복하는 단계 - 심볼의 출력 스트링의 적어도 일부분을 나타내는 식별자 핵산 분자의 최종 풀이 생성될 때까지 중간 풀은 모든 다음 단계마다 제1 풀을 대체함 - 를 포함하는, 방법.
  129. 제128항에 있어서, 제1 풀 내 각각의 식별자 핵산 분자는 M개의 레이어 각각으로부터 구별되는 구성요소 핵산 분자를 포함하고, 각각의 레이어는 구성요소 핵산 분자의 세트를 포함하는, 방법.
  130. 제128항 또는 제129항에 있어서, if-then-else 연산은 특정 구성요소 핵산 분자를 포함하는 풀 내 식별자 핵산 분자를 액세스하는 것을 포함하는, 방법.
  131. 제130항에 있어서, 프로브는 PCR 프라이머이며, 액세스하는 단계는 중합 효소 연쇄 반응에 의해 실행되는, 방법.
  132. 제130항에 있어서, 상기 프로브는 친화성 태깅된 올리고뉴클레오타이드(affinity tagged oligonucleotide)이며, 액세스하는 단계는 친화성 풀 다운 분석(affinity pull down assay)에 의해 실행되는, 방법.
  133. 제128항 내지 제132항 중 어느 한 항에 있어서, 둘 이상의 if-then-else 연산은 식별자 핵산 분자의 하나 이상의 풀에 대해 병렬로 수행되는, 방법.
  134. 제128항 내지 제133항 중 어느 한 항에 있어서, 제1 풀, 중간 풀, 또는 최종 풀 중 적어도 하나를 적어도 두 개의 복제 풀로 분할하는 단계를 더 포함하는, 방법.
  135. 제134항에 있어서, 분할 전에, 제1 풀, 중간 풀, 또는 최종 풀 중 적어도 하나를 복제하는 단계를 더 포함하는, 방법.
  136. 제135항에 있어서, 복제하는 단계는 중합 효소 연쇄 반응(PCR: polymerase chain reaction)에 의해 실행되는, 방법.
  137. 제128항 내지 제136항 중 어느 한 항에 있어서, 식별자 핵산 분자의 적어도 두 개의 중간 풀을 조합하여 식별자 핵산 분자의 새로운 중간 풀 또는 식별자 핵산 분자의 제2 풀을 형성하는 단계를 더 포함하는, 방법.
  138. 핵산 분자의 풀에 저장된 디지털 정보로부터, 심볼의 스트링 내 특정 위치에서의 특정 심볼 값의 순위를 획득하기 위한 방법으로서, 각각의 심볼은 심볼 값 및 심볼 위치를 가지며, 상기 방법은
    (a) 심볼의 스트링을 나타내는 식별자 핵산 분자의 제1 풀을 획득하는 단계 - 상기 풀은 분말, 액체, 또는 고체 형태를 가지며, 제1 풀 내 각각의 식별자 핵산 분자는 구성요소 핵산 분자를 포함하며, 구성요소 핵산 분자의 적어도 일부분이 하나 이상의 프로브에 결합되도록 구성됨 - ,
    (b) 심볼의 스트링으로부터 얻어진 카운터 심볼의 스트링을 나타내는 식별자 핵산 분자의 제2 풀을 획득하는 단계 - 각각의 카운터 심볼은 심볼의 스트링의 매 w번째 심볼마다 특정 심볼 값의 러닝 카운트를 나타냄 - ,
    (c) (1) 특정 위치에 선행하는 w 심볼의 모든 블록, 또는 (2) 상기 특정 위치를 포함하는 w 비트의 블록을 포함해 상기 특정 위치에 선행하는 w 심볼의 모든 블록에 대해, 특정 심볼 값의 러닝 카운트를 나타내는 대응하는 카운터 심볼을 나타내는 제2 풀 내 적어도 식별자 핵산 분자를 표적으로 하도록 제2 프로브 시리즈에 의해 단계 (b)의 제2 풀을 액세스함으로써 제1 카운트를 획득하는 단계,
    (d) (1) 제1 풀 내, 단계 (c)에서 카운트되지 않고 특정 위치에 선행하거나 특정 위치를 포함하는 심볼을 나타내거나 (2) 단계 (c)에서 카운트되지만 특정 위치에 선행하지 않거나 특정 위치를 포함하지 않는 심볼을 나타내는 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하도록 제1 프로브 시리즈에 의해 단계 (a)의 제1 풀을 액세스함으로써 제2 카운트를 획득하는 단계, 및
    (e) 제1 카운트 및 제2 카운트로부터 심볼의 스트링 내 특정 위치에서의 특정 심볼 값의 순위를 획득하는 단계를 포함하는, 방법.
  139. 제138항에 있어서, 식별자 핵산 분자의 존재가 심볼 위치에서의 특정 심볼 값을 나타내도록, 제1 풀 내 식별자 핵산 분자가 심볼의 스트링으로 매핑되는 비트의 스트링을 나타내는, 방법.
  140. 제138항 또는 제139항에 있어서, 단계 (c)의 제1 카운트는 특정 위치에 선행하는 w 심볼의 모든 블록을 나타내고, 단계 (d)의 제1 프로브 시리즈는 제1 풀 내에서 단계 (c)에서 카운트되지 않고 특정 위치에 선행하거나 특정 위치를 포함하는 심볼을 나타내는 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하며, 단계 (e)의 제1 카운트 및 제2 카운트를 합산함으로써 심볼의 스트링 내 특정 위치에서의 특정 심볼 값의 순위가 획득되는, 방법.
  141. 제138항 또는 제139항에 있어서, 단계 (c)의 제1 카운트는 특정 위치에 선행하고 특정 위치를 포함하는 w 심볼의 블록을 포함하는 w 심볼의 모든 블록을 나타내고, 제1 프로브 시리즈는 제1 풀 내에서 단계 (c)에서 카운트되지만 특정 위치에 선행하거나 특정 위치를 포함하지 않는 심볼을 나타내는 하나 이상의 구별되는 식별자 핵산 분자를 표적으로 하며, 단계 (e)의 제1 카운트로부터 제2 카운트를 뺌으로써 심볼의 스트링 내 특정 위치에서의 특정 심볼 값의 순위가 획득되는, 방법.
  142. 제138항 내지 제141항 중 어느 한 항에 있어서, 제1 카운트는 단계 (c)의 표적이 된 식별자 핵산 분자에 대응하는 카운터 심볼 값을 읽음으로써 획득되는, 방법.
  143. 제138항 내지 제142항 중 어느 한 항에 있어서, 제2 카운트는 단계 (d)의 표적이 된 식별자 핵산 분자를 읽음으로써 획득되는, 방법.
  144. 제138항 내지 제143항 중 어느 한 항에 있어서, 단계 (a)의 제1 풀은 단계 (b)의 제2 풀인, 방법.
  145. 제138항 내지 제143항 중 어느 한 항에 있어서, 단계 (a)의 제1 풀은 단계 (b)의 제2 풀과 별개인, 방법.
  146. 제138항 내지 제145항 중 어느 한 항에 있어서, 제1 풀에서의 대응하는 식별자 핵산 분자의 존재는 제1 심볼 값을 나타내고, 제1 풀에서의 대응하는 식별자 핵산 분자의 부재는 제2 심볼 값을 나타내는, 방법.
  147. 제138항 내지 제146항 중 어느 한 항에 있어서, 심볼의 스트링은 길이 n을 가지며, 카운터 심볼은 b 비트로 나타내어지고, b는 log2(n+1)의 천장값인, 방법.
  148. 제147항에 있어서, 카운터 심볼의 스트링은 n 나누기 w 카운터 심볼의 천장값을 포함하며, b에 n 나누기 w의 천장값을 곱한 값에 대응하는 길이를 갖는 카운터 비트 스트링으로 나타내어지는, 방법.
  149. 제138항 내지 제148항 중 어느 한 항에 있어서, 특정 위치가 w 심볼의 제1 블록 내에 있는 경우, w 심볼의 제1 블록에 선행하는 러닝 카운트가 0인, 방법.
  150. 제138항 내지 제149항 중 어느 한 항에 있어서, 특정 위치가 w 심볼의 제1 블록 내에 있지 않는 경우, 특정 위치에 선행하는 w 심볼의 모든 블록의 카운터 심볼이 심볼의 스트링의 0 내지 w*B(x)-1의 위치 범위 내 특정 심볼 값의 등장 횟수를 나타내며, 0은 심볼의 스트링의 첫 번째 위치이고, x는 심볼의 스트링 내 특정 위치에 대응하며, B(x)는 x 나누기 w의 바닥값인, 방법.
  151. 제150항에 있어서, 단계 (c)의 제2 풀 내 표적이 된 식별자 핵산 분자가 위치 b*B(x) 및 b*(B(x)+1)-1에 의해 규정된 범위 내에 있고, 0의 위치는 심볼의 스트링 내 첫 번째 위치에 대응하는, 방법.
  152. 제138항 내지 제151항 중 어느 한 항에 있어서, 제2 카운트는 심볼 스트링의 위치 w*B(x)에서 x까지의 범위 내 특정 심볼 값의 등장 횟수에 대응하고, x는 심볼의 스트링 내 특정 위치에 대응하고, 위치 0은 첫 번째 위치이며, B(x)는 x 나누기 w의 바닥값인, 방법.
  153. 제138항 내지 제152항 중 어느 한 항에 있어서, 심볼의 스트링의 w 심볼을 나타내기 위한 비트의 길이가 카운터 심볼을 나타내기 위한 비트의 길이 b와 동등한, 방법.
  154. 제138항 내지 제152항 중 어느 한 항에 있어서, w는 1의 값으로 설정되는, 방법.
  155. 제154항에 있어서, 제1 카운트는 특정 위치를 포함하는 w 심볼의 블록에 대응하는 카운터 심볼을 나타내는 단계 (c)의 식별자 핵산 분자를 표적으로 함으로써 획득되고, 순위는 제1 카운트와 동등한, 방법.
  156. 제155항에 있어서, 단계 (d)는 실행되지 않는, 방법.
  157. 제138항 내지 제156항 중 어느 한 항에 있어서, 심볼 스트링 내 w 심볼의 블록이 식별자 핵산 분자의 제1 풀 내 인접하게 순서화된 식별자 핵산 분자의 블록에 매핑되는, 방법.
  158. 제157항에 있어서, 심볼의 스트링 내 심볼은 비트이고, 각각의 비트가 식별자 핵산 분자에 매핑되어, 식별자 핵산 분자의 제1 풀 내 상기 식별자의 존재 또는 부재가 비트의 값을 의미하는, 방법.
  159. 제157항 또는 제158항에 있어서, 심볼 스트링 중 고정 길이 서브스트링이 고정 개수의 가능한 고유 식별자 핵산 분자 중 고정 개수의 고유 식별자 핵산 분자를 포함하는 코드워드로 매핑되는, 방법.
  160. 제138항 내지 제159항 중 어느 한 항에 있어서, 제1 풀 및 제2 풀로부터 식별자 핵산 분자를 쓰고, 액세스하고 읽는 에러를 검출하고 정정하도록 추가 정보를 이용하는 단계를 더 포함하는, 방법.
  161. 제160항에 있어서, 상기 추가 정보는 제1 풀 및 제2 풀의 식별자 핵산 분자에 저장되는, 방법.
  162. 제138항 내지 제161항 중 어느 한 항에 있어서, 심볼의 스트링은 비트의 스트링을 나타내는, 방법.
  163. 제162항에 있어서, 심볼의 스트링의 각각의 심볼은 고정 개수의 비트에 대응하는, 방법.
  164. 제162항 또는 제163항에 있어서, 단계 (b)의 식별자 핵산 모듈의 상이한 제2 풀이 특정 심볼 값의 인스턴스의 수를 카운트하는 카운터 심볼의 상이한 스트링을 나타내며, 카운터 심볼의 각각의 상이한 스트링은 대응하는 특정 심볼 값의 인스턴스를 카운팅하는, 방법.
  165. 제138항 내지 제164항 중 어느 한 항에 있어서, M개의 선택된 구성요소 핵산 분자를 물리적으로 조합함으로써 식별자 핵산 분자가 형성되고, M개의 선택된 구성요소 핵산 분자 각각은 M개의 상이한 레이어로 분리되는 구별되는 구성요소 핵산 분자의 세트로부터 선택되는, 방법.
KR1020217040321A 2019-05-09 2020-05-11 Dna 기반 데이터 저장소에서 검색, 컴퓨팅 및 인덱싱하기 위한 데이터 구조 및 동작 KR20220017409A (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201962845638P 2019-05-09 2019-05-09
US62/845,638 2019-05-09
US201962860117P 2019-06-11 2019-06-11
US62/860,117 2019-06-11
US201962890243P 2019-08-22 2019-08-22
US62/890,243 2019-08-22
PCT/US2020/032384 WO2020227718A1 (en) 2019-05-09 2020-05-11 Data structures and operations for searching, computing, and indexing in dna-based data storage

Publications (1)

Publication Number Publication Date
KR20220017409A true KR20220017409A (ko) 2022-02-11

Family

ID=70857293

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217040321A KR20220017409A (ko) 2019-05-09 2020-05-11 Dna 기반 데이터 저장소에서 검색, 컴퓨팅 및 인덱싱하기 위한 데이터 구조 및 동작

Country Status (7)

Country Link
US (2) US11610651B2 (ko)
EP (1) EP3966823A1 (ko)
JP (1) JP2022531790A (ko)
KR (1) KR20220017409A (ko)
AU (1) AU2020268440A1 (ko)
CA (1) CA3139819A1 (ko)
WO (1) WO2020227718A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20240044353A (ko) 2022-09-27 2024-04-04 서울대학교산학협력단 핵산 응집체를 이용한 분자 연산 가속화 방법

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11734231B2 (en) * 2017-10-30 2023-08-22 AtomBeam Technologies Inc. System and methods for bandwidth-efficient encoding of genomic data
WO2019160133A1 (ja) * 2018-02-19 2019-08-22 日本電信電話株式会社 情報管理装置、情報管理方法及び情報管理プログラム
GB2576304B (en) * 2018-07-26 2020-09-09 Evonetix Ltd Accessing data storage provided using double-stranded nucleic acid molecules
JP2023526017A (ja) 2020-05-11 2023-06-20 カタログ テクノロジーズ, インコーポレイテッド Dnaベースのデータ記憶におけるプログラムおよび機能
US11429279B2 (en) * 2020-09-16 2022-08-30 Samsung Electronics Co., Ltd. Automatic data separation and placement for compressed data in a storage device
WO2023056097A1 (en) * 2021-10-01 2023-04-06 Imply Data, Inc. Iterative querying mechanism for data aggregation and visualization
WO2023177864A1 (en) * 2022-03-18 2023-09-21 Catalog Technologies, Inc. Combinatorial enumeration and search for nucleic acid-based data storage

Family Cites Families (143)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050019760A1 (en) 1988-03-05 2005-01-27 Oxford Gene Technology Limited Analysing polynucleotide sequences
US5821886A (en) 1996-10-18 1998-10-13 Samsung Electronics Company, Ltd. Variable length code detection in a signal processing system
US6419883B1 (en) 1998-01-16 2002-07-16 University Of Washington Chemical synthesis using solvent microdroplets
US6384210B1 (en) 1997-03-20 2002-05-07 University Of Washington Solvent for biopolymer synthesis, solvent microdroplets and methods of use
DE69837913T2 (de) 1997-04-01 2008-02-07 Solexa Ltd., Saffron Walden Verfahren zur vervielfältigung von nukleinsäure
US6537747B1 (en) 1998-02-03 2003-03-25 Lucent Technologies Inc. Data transmission using DNA oligomers
US6187537B1 (en) 1998-04-27 2001-02-13 Donald E. Zinn, Jr. Process and apparatus for forming a dry DNA transfer film, a transfer film product formed thereby and an analyzing process using the same
US6458583B1 (en) 1998-09-09 2002-10-01 Agilent Technologies, Inc. Method and apparatus for making nucleic acid arrays
US6309828B1 (en) 1998-11-18 2001-10-30 Agilent Technologies, Inc. Method and apparatus for fabricating replicate arrays of nucleic acid molecules
US6221653B1 (en) 1999-04-27 2001-04-24 Agilent Technologies, Inc. Method of performing array-based hybridization assays using thermal inkjet deposition of sample fluids
US7501245B2 (en) 1999-06-28 2009-03-10 Helicos Biosciences Corp. Methods and apparatuses for analyzing polynucleotide sequences
US6446642B1 (en) 1999-11-22 2002-09-10 Agilent Technologies, Inc. Method and apparatus to clean an inkjet reagent deposition device
JP4220251B2 (ja) 2001-05-11 2009-02-04 パナソニック株式会社 生体分子基板ならびにそれを利用した検査および診断の方法および装置
WO2003025123A2 (en) 2001-08-28 2003-03-27 Mount Sinai School Of Medecine Dna: a medium for long-term information storage specification
JP2005503813A (ja) 2001-09-25 2005-02-10 独立行政法人理化学研究所 オリゴマー及び/又はポリマーを適用した支持体を含む印刷物、その製造方法、ならびにその配送及び/又は保管方法
US7361310B1 (en) 2001-11-30 2008-04-22 Northwestern University Direct write nanolithographic deposition of nucleic acids from nanoscopic tips
US20030116630A1 (en) 2001-12-21 2003-06-26 Kba-Giori S.A. Encrypted biometric encoded security documents
US6773888B2 (en) 2002-04-08 2004-08-10 Affymetrix, Inc. Photoactivatable silane compounds and methods for their synthesis and use
AU2003245322A1 (en) 2002-05-29 2003-12-19 Arizona Board Of Regents, Acting On Behalf Of Arizona State University Nanoscale ink-jet printing
US20040043390A1 (en) 2002-07-18 2004-03-04 Asat Ag Applied Science & Technology Use of nucleotide sequences as carrier of cultural information
US8071168B2 (en) 2002-08-26 2011-12-06 Nanoink, Inc. Micrometric direct-write methods for patterning conductive material and applications to flat panel display repair
US7491422B2 (en) 2002-10-21 2009-02-17 Nanoink, Inc. Direct-write nanolithography method of transporting ink with an elastomeric polymer coated nanoscopic tip to form a structure having internal hollows on a substrate
DE10308931A1 (de) 2003-02-28 2004-09-23 Apibio Sas System und Verfahren zur Synthese von Polymeren
US6943417B2 (en) 2003-05-01 2005-09-13 Clemson University DNA-based memory device and method of reading and writing same
JP2005080523A (ja) 2003-09-05 2005-03-31 Sony Corp 生体遺伝子に導入するdna、遺伝子導入ベクター、細胞、生体遺伝子への情報導入方法、情報処理装置および方法、記録媒体、並びにプログラム
KR101239466B1 (ko) 2003-10-14 2013-03-07 베르선 코포레이션 분자 분해를 위한 방법 및 장치
US20050239102A1 (en) 2003-10-31 2005-10-27 Verdine Gregory L Nucleic acid binding oligonucleotides
DE102005012567B4 (de) 2005-03-04 2008-09-04 Identif Gmbh Markierungslösung, deren Verwendung und Verfahren zu ihrer Herstellung
US7600840B2 (en) 2005-08-12 2009-10-13 Samsung Electronics Co., Ltd. Device for printing droplet or ink on substrate or paper
EP1933974A1 (en) 2005-10-07 2008-06-25 Koninklijke Philips Electronics N.V. Ink jet device for the controlled positioning of droplets of a substance onto a substrate, method for the controlled positioning of droplets of a substance, and use of an ink jet device
CN101282842B (zh) 2005-10-07 2010-09-01 皇家飞利浦电子股份有限公司 用于将物质小滴受控地定位到基底上的喷墨装置和方法
EP1782886A1 (en) 2005-11-02 2007-05-09 Sony Deutschland GmbH A method of patterning molecules on a substrate using a micro-contact printing process
JP2009517198A (ja) 2005-11-28 2009-04-30 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 基板上に複数の物質を制御可能に放出するインクジェット装置、複数の物質同士を識別する方法、およびインクジェット装置の使用
CN101341030A (zh) 2005-12-22 2009-01-07 皇家飞利浦电子股份有限公司 用于将物质放置到基板上的喷墨设备,用于将物质放置到基板上的方法以及喷墨设备的使用
EP1976637A1 (en) 2006-01-12 2008-10-08 Koninklijke Philips Electronics N.V. Ink jet device and method for releasing a plurality of substances onto a substrate
US20090062129A1 (en) 2006-04-19 2009-03-05 Agencourt Personal Genomics, Inc. Reagents, methods, and libraries for gel-free bead-based sequencing
EP2066437A2 (en) 2006-09-21 2009-06-10 Koninklijke Philips Electronics N.V. Ink jet device and method for producing a biological assay substrate by releasing a plurality of substances onto the substrate
WO2008053406A1 (en) 2006-10-30 2008-05-08 Koninklijke Philips Electronics N.V. Porous biological assay substrate and method and device for producing such substrate
JP5269887B2 (ja) 2007-05-09 2013-08-21 ナノインク インコーポレーティッド 小型ナノファブリケーション装置
CA2691295A1 (en) 2007-06-20 2009-03-19 Northwestern University Universal matrix
US9061494B2 (en) 2007-07-19 2015-06-23 The Board Of Trustees Of The University Of Illinois High resolution electrohydrodynamic jet printing for manufacturing systems
US9684678B2 (en) 2007-07-26 2017-06-20 Hamid Hatami-Hanza Methods and system for investigation of compositions of ontological subjects
US8452725B2 (en) 2008-09-03 2013-05-28 Hamid Hatami-Hanza System and method of ontological subject mapping for knowledge processing applications
CZ301799B6 (cs) 2007-07-30 2010-06-23 Kencl@Lukáš Zpusob úpravy datové informace v systému
WO2009025809A1 (en) 2007-08-20 2009-02-26 Rr Donnelley Nanoparticle-based compositions compatible with jet printing and methods therefor
DE102007057802B3 (de) 2007-11-30 2009-06-10 Geneart Ag Steganographische Einbettung von Informationen in kodierenden Genen
JP5171346B2 (ja) * 2008-03-28 2013-03-27 株式会社日立ハイテクノロジーズ 文字列検索システム及び方法
US20110155815A1 (en) 2008-09-10 2011-06-30 Anthony Jarvis Multi-coloured codes
JPWO2010029629A1 (ja) 2008-09-11 2012-02-02 長浜バイオラボラトリー株式会社 Dna含有インク組成物
US8769689B2 (en) 2009-04-24 2014-07-01 Hb Gary, Inc. Digital DNA sequence
US8806127B2 (en) 2009-10-26 2014-08-12 Genisyss Llc Data storage device with integrated DNA storage media
US20110269119A1 (en) 2009-10-30 2011-11-03 Synthetic Genomics, Inc. Encoding text into nucleic acid sequences
US8735327B2 (en) 2010-01-07 2014-05-27 Jeansee, Llc Combinatorial DNA taggants and methods of preparation and use thereof
WO2011150168A1 (en) 2010-05-28 2011-12-01 Gen9, Inc. Methods and devices for in situ nucleic acid synthesis
US20110312676A1 (en) 2010-06-17 2011-12-22 Geneasys Pty Ltd Loc device with integral driver for excitation of electrochemiluminescent luminophores
US9114399B2 (en) 2010-08-31 2015-08-25 Canon U.S. Life Sciences, Inc. System and method for serial processing of multiple nucleic acid assays
TR201810530T4 (tr) 2010-10-22 2018-08-27 Cold Spring Harbor Laboratory Genomik kopya sayısı bilgisi elde etmek için nükleik asitlerin varyete sayımı.
WO2012058638A2 (en) 2010-10-29 2012-05-03 President And Fellows Of Harvard College Nucleic acid nanostructure barcode probes
US20120329561A1 (en) 2010-12-09 2012-12-27 Genomic Arts, LLC System and methods for generating avatars and art
KR101345337B1 (ko) 2011-06-13 2013-12-30 한국생명공학연구원 원자간력 현미경(afm)을 이용한 딥-펜 나노리소그래피에서의 단일 또는 다중팁을 이용한 나노포지셔닝 기판 제조장치 및 제조방법
ES2659343T3 (es) 2011-07-20 2018-03-14 The Regents Of The University Of California Dispositivo de poro dual
EP2847712A4 (en) 2012-05-09 2015-12-30 Apdn Bvi Inc REVIEW OF PHYSICAL ENDURANCE TAGGANTS USING DIGITAL REPRESENTATIVES AND AUTHENTICATIONS THEREOF
EP3346404A1 (en) 2012-06-01 2018-07-11 European Molecular Biology Laboratory High-capacity storage of digital information in dna
CN104662544B (zh) 2012-07-19 2018-08-03 哈佛大学校长及研究员协会 利用核酸存储信息的方法
US9266370B2 (en) 2012-10-10 2016-02-23 Apdn (B.V.I) Inc. DNA marking of previously undistinguished items for traceability
US8937564B2 (en) 2013-01-10 2015-01-20 Infinidat Ltd. System, method and non-transitory computer readable medium for compressing genetic information
WO2014121091A1 (en) 2013-02-01 2014-08-07 The Regents Of The University Of California Methods for genome assembly and haplotype phasing
US20160007893A1 (en) 2013-02-06 2016-01-14 Loxbridge Research Llp Systems and methods for early disease detection and real-time disease monitoring
KR102245192B1 (ko) 2013-05-06 2021-04-29 온테라 인크. 나노포어를 이용한 표적 검출
CA2926436A1 (en) 2013-10-07 2015-04-16 Judith Murrah Multimode image and spectral reader
WO2015144858A1 (en) 2014-03-28 2015-10-01 Thomson Licensing Methods for storing and reading digital data on a set of dna strands
US10020826B2 (en) 2014-04-02 2018-07-10 International Business Machines Corporation Generating molecular encoding information for data storage
US20150312212A1 (en) 2014-04-24 2015-10-29 David Holmes Holistic embodiment of dna and ipv6
EP2958238A1 (en) 2014-06-17 2015-12-23 Thomson Licensing Method and apparatus for encoding information units in code word sequences avoiding reverse complementarity
KR101788673B1 (ko) 2014-06-24 2017-11-15 싸이퍼롬, 인코퍼레이티드 핵산염기서열 보안 방법, 장치 및 이를 저장한 기록매체
US20170218228A1 (en) 2014-07-30 2017-08-03 Tufts University Three Dimensional Printing of Bio-Ink Compositions
WO2016015701A1 (de) 2014-07-31 2016-02-04 Schebo Biotech Ag Vorrichtung zur bioanalytik, deren herstellung und verfahren zum nachweis von bioanalyten mittels der vorrichtung
EP2983297A1 (en) 2014-08-08 2016-02-10 Thomson Licensing Code generation method, code generating apparatus and computer readable storage medium
EP3189619B1 (en) 2014-09-03 2021-02-17 NantOmics, LLC Device, method and computer program product for synthetic genomic variant-based secure transaction
CA2964985A1 (en) 2014-10-18 2016-04-21 Girik MALIK A biomolecule based data storage system
US20170363953A1 (en) 2014-11-03 2017-12-21 Universität Osnabrück Device for carrying out a capillary nanoprinting method, a method for carrying out capillary nanoprinting using the device, products obtained according to the method and use of the device
EP3221341B1 (en) 2014-11-20 2020-07-29 Cytonics Corporation Therapeutic variant alpha-2-macroglobulin compositions
US11164661B2 (en) 2015-04-10 2021-11-02 University Of Washington Integrated system for nucleic acid-based storage and retrieval of digital data using keys
US10385387B2 (en) 2015-04-20 2019-08-20 Pacific Biosciences Of California, Inc. Methods for selectively amplifying and tagging nucleic acids
US10589273B2 (en) 2015-05-08 2020-03-17 Illumina, Inc. Cationic polymers and method of surface application
US10423341B1 (en) 2015-06-12 2019-09-24 Bahram Ghaffarzadeh Kermani Accurate and efficient DNA-based storage of electronic data
US9898579B2 (en) 2015-06-16 2018-02-20 Microsoft Technology Licensing, Llc Relational DNA operations
JP6920275B2 (ja) 2015-07-13 2021-08-18 プレジデント アンド フェローズ オブ ハーバード カレッジ 核酸を用いた回収可能な情報記憶のための方法
WO2017053450A1 (en) 2015-09-22 2017-03-30 Twist Bioscience Corporation Flexible substrates for nucleic acid synthesis
US20170093851A1 (en) 2015-09-30 2017-03-30 Aetna Inc. Biometric authentication system
EP3160049A1 (en) 2015-10-19 2017-04-26 Thomson Licensing Data processing method and device for recovering valid code words from a corrupted code word sequence
US20170136452A1 (en) 2015-11-13 2017-05-18 SoluDot LLC Method for high throughput dispensing of biological samples
US10566077B1 (en) 2015-11-19 2020-02-18 The Board Of Trustees Of The University Of Illinois Re-writable DNA-based digital storage with random access
US10047235B2 (en) 2015-12-08 2018-08-14 Xerox Corporation Encoding liquid ink with a device specific biomarker
WO2017151195A1 (en) 2016-02-29 2017-09-08 The Penn State Research Foundation Nucleic acid molecular diagnosis
US10640822B2 (en) 2016-02-29 2020-05-05 Iridia, Inc. Systems and methods for writing, reading, and controlling data stored in a polymer
US10438662B2 (en) 2016-02-29 2019-10-08 Iridia, Inc. Methods, compositions, and devices for information storage
US10859562B2 (en) * 2016-02-29 2020-12-08 Iridia, Inc. Methods, compositions, and devices for information storage
WO2017184677A1 (en) 2016-04-21 2017-10-26 President And Fellows Of Harvard College Method and system of nanopore-based information encoding
WO2017189914A1 (en) 2016-04-27 2017-11-02 Massachusetts Institute Of Technology Sequence-controlled polymer random access memory storage
AU2017259794B2 (en) 2016-05-02 2023-04-13 Encodia, Inc. Macromolecule analysis employing nucleic acid encoding
US10839295B2 (en) 2016-05-04 2020-11-17 Bgi Shenzhen Method for using DNA to store text information, decoding method therefor and application thereof
US10669558B2 (en) 2016-07-01 2020-06-02 Microsoft Technology Licensing, Llc Storage through iterative DNA editing
EP3426793A4 (en) 2016-07-22 2019-03-27 Hewlett-Packard Development Company, L.P. METHOD FOR PREPARING TEST SAMPLES
WO2018014090A1 (en) 2016-07-22 2018-01-25 Nucleotrace Pty. Ltd. A method for amplification of nucleic acid sequences
US20190194484A1 (en) 2016-09-08 2019-06-27 Thomas Villwock Methods and systems for authenticating goods using analyte encoded security fluids
JP6871364B2 (ja) 2016-09-21 2021-05-12 ツイスト バイオサイエンス コーポレーション 核酸に基づくデータ保存
US10370246B1 (en) 2016-10-20 2019-08-06 The Board Of Trustees Of The University Of Illinois Portable and low-error DNA-based data storage
US10838939B2 (en) 2016-10-28 2020-11-17 Integrated Dna Technologies, Inc. DNA data storage using reusable nucleic acids
US11763169B2 (en) 2016-11-16 2023-09-19 Catalog Technologies, Inc. Systems for nucleic acid-based data storage
US10650312B2 (en) * 2016-11-16 2020-05-12 Catalog Technologies, Inc. Nucleic acid-based data storage
US10853244B2 (en) 2016-12-07 2020-12-01 Sandisk Technologies Llc Randomly writable memory device and method of operating thereof
US10984029B2 (en) 2016-12-15 2021-04-20 Sap Se Multi-level directory tree with fixed superblock and block sizes for select operations on bit vectors
US10417208B2 (en) 2016-12-15 2019-09-17 Sap Se Constant range minimum query
KR102622275B1 (ko) 2017-01-10 2024-01-05 로스웰 바이오테크놀로지스 인코포레이티드 Dna 데이터 저장을 위한 방법들 및 시스템들
US10787699B2 (en) 2017-02-08 2020-09-29 Microsoft Technology Licensing, Llc Generating pluralities of primer and payload designs for retrieval of stored nucleotides
US10793897B2 (en) 2017-02-08 2020-10-06 Microsoft Technology Licensing, Llc Primer and payload design for retrieval of stored polynucleotides
WO2018148458A1 (en) 2017-02-08 2018-08-16 Essenlix Corp. Digital assay
WO2018148260A1 (en) 2017-02-13 2018-08-16 Thomson Licensing Apparatus, method and system for digital information storage in deoxyribonucleic acid (dna)
SG11201907713WA (en) 2017-02-22 2019-09-27 Twist Bioscience Corp Nucleic acid based data storage
US10774379B2 (en) 2017-03-15 2020-09-15 Microsoft Technology Licensing, Llc Random access of data encoded by polynucleotides
EP3625712A4 (en) 2017-05-16 2020-09-09 Artentika (Pty) Ltd PROCESSING DIGITAL DATA DETAILS FOR ANALYSIS OF CULTURAL ARTEFACTS
US11612873B2 (en) 2017-05-31 2023-03-28 Molecular Assemblies, Inc. Homopolymer encoded nucleic acid memory
US10742233B2 (en) 2017-07-11 2020-08-11 Erlich Lab Llc Efficient encoding of data for storage in polymers such as DNA
WO2019046768A1 (en) 2017-08-31 2019-03-07 William Marsh Rice University SYMBOLIC SEQUENCING OF DNA AND RNA BY SEQUENCE CODING
US11538554B1 (en) * 2017-09-19 2022-12-27 The Board Of Trustees Of The Univ Of Illinois Nick-based data storage in native nucleic acids
US11539516B2 (en) 2017-10-27 2022-12-27 Eth Zurich Encoding and decoding information in synthetic DNA with cryptographic keys generated based on polymorphic features of nucleic acids
WO2019094928A1 (en) 2017-11-10 2019-05-16 Massachusetts Institute Of Technology Microbial production of pure single stranded nucleic acids
US10936953B2 (en) 2018-01-04 2021-03-02 Twist Bioscience Corporation DNA-based digital information storage with sidewall electrodes
US20210010065A1 (en) 2018-03-15 2021-01-14 Twinstrand Biosciences, Inc. Methods and reagents for enrichment of nucleic acid material for sequencing applications and other nucleic acid material interrogations
AU2019236289A1 (en) 2018-03-16 2020-10-08 Catalog Technologies, Inc. Chemical methods for nucleic acid-based data storage
KR102138864B1 (ko) 2018-04-11 2020-07-28 경희대학교 산학협력단 Dna 디지털 데이터 저장 장치 및 저장 방법, 그리고 디코딩 방법
US11106633B2 (en) 2018-04-24 2021-08-31 EMC IP Holding Company, LLC DNA-based data center with deduplication capability
CA3100529A1 (en) 2018-05-16 2019-11-21 Catalog Technologies, Inc. Compositions and methods for nucleic acid-based data storage
EP3794518A1 (en) 2018-05-16 2021-03-24 Catalog Technologies, Inc. Printer-finisher system for data storage in dna
WO2019246434A1 (en) 2018-06-20 2019-12-26 Brown University Methods of chemical computation
US11943940B2 (en) * 2018-07-11 2024-03-26 The Regents Of The University Of California Nucleic acid-based electrically readable, read-only memory
WO2020028912A2 (en) 2018-08-03 2020-02-06 Catolog Technologies, Inc Systems and methods for storing and reading nucleic acid-based data with error protection
GB201821155D0 (en) 2018-12-21 2019-02-06 Oxford Nanopore Tech Ltd Method
EP3904527A4 (en) 2018-12-26 2022-08-10 BGI Shenzhen METHOD AND APPARATUS FOR FIXED-POINT EDITING OF A DATA-STORED NUCLEOTIDE SEQUENCE
US10956806B2 (en) 2019-06-10 2021-03-23 International Business Machines Corporation Efficient assembly of oligonucleotides for nucleic acid based data storage
US20210074380A1 (en) * 2019-09-05 2021-03-11 Microsoft Technology Licensing, Llc Reverse concatenation of error-correcting codes in dna data storage
US10917109B1 (en) 2020-03-06 2021-02-09 Centre National De La Recherche Scientifique Methods for storing digital data as, and for transforming digital data into, synthetic DNA

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20240044353A (ko) 2022-09-27 2024-04-04 서울대학교산학협력단 핵산 응집체를 이용한 분자 연산 가속화 방법

Also Published As

Publication number Publication date
US11610651B2 (en) 2023-03-21
WO2020227718A1 (en) 2020-11-12
US20240055075A1 (en) 2024-02-15
JP2022531790A (ja) 2022-07-11
CA3139819A1 (en) 2020-11-12
AU2020268440A1 (en) 2021-12-02
US20200357483A1 (en) 2020-11-12
EP3966823A1 (en) 2022-03-16

Similar Documents

Publication Publication Date Title
KR20220017409A (ko) Dna 기반 데이터 저장소에서 검색, 컴퓨팅 및 인덱싱하기 위한 데이터 구조 및 동작
AU2017363146B2 (en) Systems for nucleic acid-based data storage
US20210210165A1 (en) Systems and methods for storing and reading nucleic acid-based data with error protection
Canzar et al. Short read mapping: an algorithmic tour
US11306353B2 (en) Programs and functions in DNA-based data storage
Liu et al. Gene ontology friendly biclustering of expression profiles
Karasikov et al. Sparse binary relation representations for genome graph annotation
Barsky et al. A survey of practical algorithms for suffix tree construction in external memory
El-Shaikh et al. Content-based filter queries on DNA data storage systems
US20230317164A1 (en) Systems and methods for writing by sequencing of nucleic acids
Muggli et al. Succinct de Bruijn graph construction for massive populations through space-efficient merging
Allen et al. An Ultra-Fast and Parallelizable Algorithm for Finding $ k $ k-Mismatch Shortest Unique Substrings
Patel et al. Inverse suffix array queries for 2-dimensional pattern matching in near-compact space
Balla et al. Approximation Algorithms for the Primer Selection, Planted Motif Search, and Related Problems
Lecroq et al. Sequence indexing
Usmani et al. DNA-Based Storage of RDF Graph Data: A Futuristic Approach to Data Analytics
Owolabi An efficient graph approach to matching chemical structures
Kaniwa et al. Repeat finding techniques, data structures and algorithms in DNA sequences: a survey
EP3830831A2 (en) Systems and methods for storing and reading nucleic acid-based data with error protection
Park et al. INDARE-An indexed DAG of regular expressions for selecting position frequency matrices
Heath An optimal method for dna sequencing by hybridization