พื้นที่เก็บข้อมูลนี้มีวิธีการจากการพิมพ์ล่วงหน้า:
โดยมีแพ็คเกจ progres
Python ที่ช่วยให้คุณสามารถค้นหาโครงสร้างเทียบกับฐานข้อมูลโครงสร้างที่ฝังไว้ล่วงหน้า คู่คะแนนของโครงสร้าง และชุดข้อมูลที่ฝังไว้ล่วงหน้าสำหรับการค้นหา โดยทั่วไปการค้นหาจะใช้เวลา 1-2 วินาที และเร็วกว่ามากสำหรับข้อความค้นหาหลายรายการ สำหรับฐานข้อมูล AlphaFold การโหลดข้อมูลครั้งแรกจะใช้เวลาประมาณหนึ่งนาที แต่การค้นหาในภายหลังจะใช้เวลาหนึ่งในสิบของวินาทีต่อการสืบค้น
ปัจจุบัน SCOPe, CATH, ECOD, PDB ทั้งหมด, โครงสร้าง AlphaFold สำหรับสิ่งมีชีวิตแบบจำลอง 21 ตัว และโดเมน TED ของฐานข้อมูล AlphaFold มีไว้สำหรับการค้นหา การค้นหาเสร็จสิ้นตามโดเมน แต่ Chainsaw สามารถใช้เพื่อแบ่งโครงสร้างการสืบค้นออกเป็นโดเมนโดยอัตโนมัติ
conda create -n prog python=3.9
conda activate prog
conda install pytorch=1.11 faiss-cpu -c pytorch
conda install pytorch-scatter pyg -c pyg
conda install kimlab::stride
pip install progres
ซึ่งจะติดตั้ง Biopython, mmtf-python, einops และ pydantic หากยังไม่มีอยู่PROGRES_DATA_DIR
เพื่อเปลี่ยนตำแหน่งที่จัดเก็บข้อมูลนี้ ตัวอย่างเช่น หากคุณไม่สามารถเขียนลงในไดเร็กทอรีแพ็คเกจได้ อย่าลืมตั้งค่าไว้ในครั้งถัดไปที่คุณเรียกใช้ Progres หรืออีกทางหนึ่ง ไฟล์ Docker มีอยู่ในไดเร็กทอรี docker
บนระบบ Unix progres
ที่ปฏิบัติการได้จะถูกเพิ่มเข้าไปในพาธระหว่างการติดตั้ง บน Windows คุณสามารถเรียกใช้สคริปต์ bin/progres
ด้วย python หากคุณไม่สามารถเข้าถึงไฟล์ปฏิบัติการได้
เรียกใช้ progres -h
เพื่อดูข้อความช่วยเหลือและ progres {mode} -h
เพื่อดูข้อความช่วยเหลือสำหรับแต่ละโหมด โหมดต่างๆ มีอธิบายไว้ด้านล่าง แต่มีตัวเลือกอื่นๆ ระบุไว้ในข้อความช่วยเหลือ ตัวอย่างเช่น แฟล็ก -d
ตั้งค่าให้อุปกรณ์ทำงาน นี่คือ cpu
โดยค่าเริ่มต้น เนื่องจากมักจะค้นหาได้เร็วที่สุด แต่ cuda
น่าจะเร็วกว่าเมื่อแยกโดเมนด้วย Chainsaw ค้นหาข้อความค้นหาจำนวนมาก หรือฝังชุดข้อมูล ลองทั้งสองอย่างถ้าประสิทธิภาพเป็นสิ่งสำคัญ
หากต้องการค้นหาไฟล์ PDB query.pdb
(ซึ่งสามารถพบได้ในไดเร็กทอรี data
) กับโดเมนในฐานข้อมูล SCOPe และเอาต์พุตการพิมพ์:
progres search -q query.pdb -t scope95
# QUERY_NUM: 1
# QUERY: query.pdb
# DOMAIN_NUM: 1
# DOMAIN_SIZE: 150 residues (1-150)
# DATABASE: scope95
# PARAMETERS: minsimilarity 0.8, maxhits 100, chainsaw no, faiss no, progres v0.2.7
# HIT_N DOMAIN HIT_NRES SIMILARITY NOTES
1 d1a6ja_ 150 1.0000 d.112.1.1 - Nitrogen regulatory bacterial protein IIa-ntr {Escherichia coli [TaxId: 562]}
2 d2a0ja_ 146 0.9988 d.112.1.0 - automated matches {Neisseria meningitidis [TaxId: 122586]}
3 d3urra1 151 0.9983 d.112.1.0 - automated matches {Burkholderia thailandensis [TaxId: 271848]}
4 d3lf6a_ 154 0.9971 d.112.1.1 - automated matches {Artificial gene [TaxId: 32630]}
5 d3oxpa1 147 0.9968 d.112.1.0 - automated matches {Yersinia pestis [TaxId: 214092]}
...
-q
คือเส้นทางไปยังไฟล์โครงสร้างแบบสอบถาม หรืออีกทางหนึ่ง -l
คือไฟล์ข้อความที่มีหนึ่งพาธของไฟล์เคียวรีต่อบรรทัด และผลลัพธ์แต่ละรายการจะถูกพิมพ์ตามลำดับ ซึ่งจะเร็วกว่ามากสำหรับการสืบค้นหลายรายการ เนื่องจากการตั้งค่าจะเกิดขึ้นเพียงครั้งเดียวและสามารถใช้ผู้ปฏิบัติงานหลายคนได้ พิจารณาเฉพาะเชนแรกในแต่ละไฟล์เท่านั้น-t
เป็นฐานข้อมูลที่ฝังไว้ล่วงหน้าเพื่อค้นหา ในปัจจุบัน จะต้องเป็นหนึ่งในฐานข้อมูลที่แสดงด้านล่าง หรือเส้นทางของไฟล์ไปยังชุดข้อมูลที่ฝังไว้ล่วงหน้าซึ่งสร้างด้วย progres embed
-f
กำหนดรูปแบบไฟล์ของโครงสร้างแบบสอบถาม ( guess
, pdb
, mmcif
, mmtf
หรือ coords
) ตามค่าเริ่มต้น ระบบจะเดาจากนามสกุลไฟล์ โดยจะเลือก pdb
หากไม่สามารถเดาได้ coords
หมายถึงไฟล์ข้อความที่มีพิกัดของอะตอมCαคั่นด้วยช่องว่างในแต่ละบรรทัด-s
คือคะแนน Progres (0 -> 1) ซึ่งสูงกว่าที่จะส่งคืน Hit ค่าเริ่มต้นคือ 0.8 ตามที่กล่าวไว้ในบทความ 0.8 หมายถึงรอยพับเดียวกัน-m
คือจำนวน Hit สูงสุดที่จะส่งคืน ค่าเริ่มต้นคือ 100-c
ระบุเพื่อแยกโครงสร้างการสืบค้นออกเป็นโดเมนด้วย Chainsaw และค้นหาแต่ละโดเมนแยกกัน หากไม่พบโดเมนกับ Chainsaw จะไม่มีการส่งคืนผลลัพธ์ พิจารณาเฉพาะเชนแรกในแต่ละไฟล์เท่านั้น การใช้เลื่อยไฟฟ้าอาจใช้เวลาสักครู่ เครื่องมืออื่นๆ สำหรับการแบ่งโครงสร้างการสืบค้นออกเป็นโดเมน ได้แก่ Merizo และ SWORD2 คุณยังสามารถแบ่งโดเมนออกได้ด้วยตนเองโดยใช้ซอฟต์แวร์ เช่น คำสั่ง pdb_selres
จาก pdb-tools
การตีความคำอธิบาย Hit ขึ้นอยู่กับฐานข้อมูลที่กำลังค้นหา ชื่อโดเมนมักจะมีการอ้างอิงถึงไฟล์ PDB ที่เกี่ยวข้อง เช่น d1a6ja_ อ้างอิงถึง PDB ID 1A6J chain A และสามารถเปิดได้ในมุมมองโครงสร้าง RCSB PDB เพื่อดูอย่างรวดเร็ว สำหรับโดเมน TED ของฐานข้อมูล AlphaFold คุณสามารถดาวน์โหลดไฟล์ได้จากลิงก์เช่นนี้ โดยที่ AF-A0A6J8EXE6-F1
เป็นส่วนแรกของบันทึกยอดนิยม และตามด้วยช่วงที่เหลือของโดเมน
ฐานข้อมูลแบบฝังล่วงหน้าที่มีอยู่คือ:
ชื่อ | คำอธิบาย | จำนวนโดเมน | เวลาในการค้นหา (1 ข้อความค้นหา) | เวลาในการค้นหา (100 ข้อความค้นหา) |
---|---|---|---|---|
scope95 | ชุด ASTRAL ของโดเมน SCOPe 2.08 ทำคลัสเตอร์ที่ 95% seq ID | 35,371 | 1.35 วิ | 2.81 วิ |
scope40 | ชุด ASTRAL ของโดเมน SCOPe 2.08 ทำคลัสเตอร์ที่รหัส seq 40% | 15,127 | 1.32 วิ | 2.36 วิ |
cath40 | โดเมน S40 ที่ไม่ซ้ำซ้อนจาก CATH 23/11/22 | 31,884 | 1.38 วิ | 2.79 วิ |
ecod70 | โดเมนตัวแทน F70 จาก ECOD พัฒนา 287 | 71,635 | 1.46 วิ | 3.82 วิ |
pdb100 | โซ่โปรตีน PDB ทั้งหมด ณ วันที่ 02/08/24 แบ่งออกเป็นโดเมนที่มี Chainsaw | 1,177,152 | 2.90 น | 27.3 วิ |
af21org | โครงสร้าง AlphaFold สำหรับสิ่งมีชีวิตจำลอง 21 ตัวแบ่งออกเป็นโดเมนโดย CATH-Assign | 338,258 | 2.21 น | 11.0 วิ |
afted | โครงสร้างฐานข้อมูล AlphaFold แบ่งออกเป็นโดเมนโดย TED และจัดกลุ่มที่เอกลักษณ์ลำดับ 50% | 53,344,209 | 67.7 วิ | 73.1 วิ |
เวลาในการค้นหาคือโปรตีนตกค้าง 150 รายการ (d1a6ja_ ในรูปแบบ PDB) บน CPU Intel i9-10980XE พร้อม RAM 256 GB และ PyTorch 1.11 เวลาจะได้รับสำหรับ 1 หรือ 100 แบบสอบถาม โปรดทราบว่า afted
ใช้การค้นหา FAISS ที่ละเอียดถี่ถ้วน สิ่งนี้จะไม่เปลี่ยนจำนวนการเข้าชมที่พบ แต่คะแนนความคล้ายคลึงจะแตกต่างกันเล็กน้อย - ดูรายงาน
ในการคำนวณคะแนน Progres ระหว่างโดเมนโปรตีนสองโดเมน:
progres score struc_1.pdb struc_2.pdb
0.7265280485153198
-f
และ -g
กำหนดรูปแบบไฟล์สำหรับโครงสร้างแรกและโครงสร้างที่สองข้างต้น ( guess
, pdb
, mmcif
, mmtf
หรือ coords
)ลำดับของโดเมนไม่ส่งผลต่อคะแนน คะแนน 0.8 ขึ้นไป แสดงว่าพับเท่าเดิม
หากต้องการฝังชุดข้อมูลของโครงสร้างเพื่อให้สามารถค้นหาได้โดย:
progres embed -l filepaths.txt -o searchdb.pt
-l
เป็นไฟล์ข้อความที่มีข้อมูลเกี่ยวกับหนึ่งโครงสร้างต่อบรรทัด ซึ่งแต่ละไฟล์จะเป็นหนึ่งรายการในเอาต์พุต ช่องว่างควรแยกเส้นทางไฟล์ไปยังโครงสร้างและชื่อโดเมน โดยที่ข้อความเพิ่มเติมใดๆ ก็ตามจะถือเป็นบันทึกย่อสำหรับคอลัมน์บันทึกย่อของผลลัพธ์-o
เป็นเส้นทางไฟล์เอาต์พุตสำหรับไฟล์ PyTorch ที่มีพจนานุกรมที่มีการฝังและข้อมูลที่เกี่ยวข้อง torch.load
สามารถอ่านเข้าไปได้-f
กำหนดรูปแบบไฟล์ของแต่ละโครงสร้างดังกล่าวข้างต้น ( guess
, pdb
, mmcif
, mmtf
หรือ coords
)โครงสร้างควรสอดคล้องกับโดเมนโปรตีนเดี่ยวอีกครั้ง การฝังจะถูกจัดเก็บเป็น Float16 ซึ่งไม่มีผลกระทบต่อประสิทธิภาพการค้นหาอย่างเห็นได้ชัด
ตามตัวอย่าง คุณสามารถรันคำสั่งข้างต้นจากไดเร็กทอรี data
เพื่อสร้างฐานข้อมูลที่มีสองโครงสร้าง
progres
สามารถใช้ใน Python ได้ ทำให้สามารถรวมเข้ากับวิธีอื่นได้:
import progres as pg
# Search as above, returns a list where each entry is a dictionary for a query
# A generator is also available as pg.progres_search_generator
results = pg . progres_search ( querystructure = "query.pdb" , targetdb = "scope95" )
results [ 0 ]. keys () # dict_keys(['query_num', 'query', 'query_size', 'database', 'minsimilarity',
# 'maxhits', 'domains', 'hits_nres', 'similarities', 'notes'])
# Score as above, returns a float (similarity score 0 to 1)
pg . progres_score ( "struc_1.pdb" , "struc_2.pdb" )
# Pre-embed as above, saves a dictionary
pg . progres_embed ( structurelist = "filepaths.txt" , outputfile = "searchdb.pt" )
import torch
torch . load ( "searchdb.pt" ). keys () # dict_keys(['ids', 'embeddings', 'nres', 'notes'])
# Read a structure file into a PyTorch Geometric graph
graph = pg . read_graph ( "query.pdb" )
graph # Data(x=[150, 67], edge_index=[2, 2758], coords=[150, 3])
# Embed a single structure
embedding = pg . embed_structure ( "query.pdb" )
embedding . shape # torch.Size([128])
# Load and reuse the model for speed
model = pg . load_trained_model ()
embedding = pg . embed_structure ( "query.pdb" , model = model )
# Embed Cα coordinates and search with the embedding
# This is useful for using progres in existing pipelines that give out Cα coordinates
# queryembeddings should have shape (128) or (n, 128)
# and should be normalised across the 128 dimension
coords = pg . read_coords ( "query.pdb" )
embedding = pg . embed_coords ( coords ) # Can take a list of coords or a tensor of shape (nres, 3)
results = pg . progres_search ( queryembeddings = embedding , targetdb = "scope95" )
# Get the similarity score (0 to 1) between two embeddings
# The distance (1 - similarity) is also available as pg.embedding_distance
score = pg . embedding_similarity ( embedding , embedding )
score # tensor(1.) in this case since they are the same embedding
# Get all-v-all similarity scores between 1000 embeddings
embs = torch . nn . functional . normalize ( torch . randn ( 1000 , 128 ), dim = 1 )
scores = pg . embedding_similarity ( embs . unsqueeze ( 0 ), embs . unsqueeze ( 1 ))
scores . shape # torch.Size([1000, 1000])
ชุดข้อมูลและสคริปต์สำหรับการเปรียบเทียบ (รวมถึงวิธีการอื่นๆ) การสร้างดัชนี FAISS และการฝึกอบรมจะอยู่ในไดเร็กทอรี scripts
โมเดลที่ผ่านการฝึกอบรมและฐานข้อมูลแบบฝังล่วงหน้ามีอยู่ใน Zenodo
การใช้งาน GNN ที่เทียบเท่า E(n) ใช้ EGNN PyTorch นอกจากนี้เรายังรวมโค้ดจาก SupContrast และ Chainsaw อีกด้วย
กรุณาเปิดปัญหาหรือติดต่อกับข้อเสนอแนะใด ๆ ยินดีบริจาคผ่านคำขอดึง