Tingxie commited on
Commit
dea11ab
·
1 Parent(s): 8c09b4a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -51
app.py CHANGED
@@ -1,10 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- Created on Thu Oct 10 16:46:36 2024
4
-
5
- @author: ZNDX002
6
- """
7
-
8
  from __future__ import annotations
9
  import sqlite3
10
  import gradio as gr
@@ -32,7 +25,6 @@ from gradio.themes.base import Base
32
  from gradio.themes.utils import colors, fonts, sizes
33
  from huggingface_hub import hf_hub_download
34
  import time
35
- import concurrent.futures
36
 
37
  class Seafoam(Base):
38
  def __init__(
@@ -107,7 +99,6 @@ custom_css = """
107
  height: 480px !important;
108
  }
109
  </style>
110
-
111
  """
112
  def spectrum_processing(s):
113
  """This is how one would typically design a desired pre- and post-
@@ -261,48 +252,40 @@ def retrieve_similarity_scores( table_name, target_mass,collision_energy, ms2_em
261
  filtered_smiles = cur.fetchall()
262
  similarity_scores = []
263
 
264
- query = f"""
265
- SELECT SMILES, low_energy_embedding, median_energy_embedding, high_energy_embedding
266
- FROM {table_name}
267
- WHERE SMILES IN ({','.join(['?']*len(filtered_smiles))})
268
- """
269
- cur.execute(query, tuple(s[0] for s in filtered_smiles))
270
- rows = cur.fetchall()
271
-
272
- def decode_row(row):
273
- return (
274
- row[0], # SMILES
275
- np.array(pickle.loads(row[1]), dtype=np.float32),
276
- np.array(pickle.loads(row[2]), dtype=np.float32),
277
- np.array(pickle.loads(row[3]), dtype=np.float32),
278
- )
279
-
280
- with concurrent.futures.ThreadPoolExecutor() as executor:
281
- results = list(executor.map(decode_row, rows))
282
-
283
- ms2_embedding_low_np = ms2_embedding_low.numpy()
284
- ms2_embedding_median_np = ms2_embedding_median.numpy()
285
- ms2_embedding_high_np = ms2_embedding_high.numpy()
286
-
287
- similarity_scores = [
288
- (
289
- smile,
290
- np.dot(ms2_embedding_low_np, low_embedding),
291
- np.dot(ms2_embedding_median_np, median_embedding),
292
- np.dot(ms2_embedding_high_np, high_embedding),
293
- )
294
- for smile, low_embedding, median_embedding, high_embedding in results
295
- ]
296
-
297
- collision_weights = np.array([
298
- [0.4, 0.3, 0.3] if collision_energy <= 15 else
299
- [0.3, 0.4, 0.3] if collision_energy <= 25 else
300
- [0.2, 0.3, 0.5]
301
- ])
302
-
303
- similarity_array = np.array([[low, median, high] for _, low, median, high in similarity_scores])
304
- weighted_similarities = similarity_array @ collision_weights.T # 矩阵乘法
305
- weighted_similarity_scores = [(smile, weighted) for (smile, _low, _med, _high), weighted in zip(similarity_scores, weighted_similarities)]
306
 
307
  weighted_similarity_scores.sort(key=lambda x: x[1], reverse=True)
308
 
@@ -493,3 +476,4 @@ with gr.Blocks(theme=seafoam) as demo:
493
  demo.launch(share=True)
494
 
495
 
 
 
 
 
 
 
 
 
 
1
  from __future__ import annotations
2
  import sqlite3
3
  import gradio as gr
 
25
  from gradio.themes.utils import colors, fonts, sizes
26
  from huggingface_hub import hf_hub_download
27
  import time
 
28
 
29
  class Seafoam(Base):
30
  def __init__(
 
99
  height: 480px !important;
100
  }
101
  </style>
 
102
  """
103
  def spectrum_processing(s):
104
  """This is how one would typically design a desired pre- and post-
 
252
  filtered_smiles = cur.fetchall()
253
  similarity_scores = []
254
 
255
+ for smile in filtered_smiles:
256
+ query = f"""
257
+ SELECT low_energy_embedding, median_energy_embedding, high_energy_embedding
258
+ FROM {table_name}
259
+ WHERE SMILES = ?
260
+ """
261
+ cur.execute(query, (smile[0],))
262
+ row = cur.fetchone()
263
+ if row is None:
264
+ return None
265
+ low_energy_embedding_db = np.array(pickle.loads(row[0]), dtype=np.float64)
266
+ median_energy_embedding_db = np.array(pickle.loads(row[1]), dtype=np.float64)
267
+ high_energy_embedding_db = np.array(pickle.loads(row[2]), dtype=np.float64)
268
+ low_energy_embedding_db,median_energy_embedding_db,high_energy_embedding_db = torch.tensor(low_energy_embedding_db).float(),torch.tensor(median_energy_embedding_db).float(),torch.tensor(high_energy_embedding_db).float()
269
+ low_similarity =(ms2_embedding_low @ low_energy_embedding_db.t()).item()
270
+ median_similarity = (ms2_embedding_median @ median_energy_embedding_db.t()).item()
271
+ high_similarity = (ms2_embedding_high @ high_energy_embedding_db.t()).item()
272
+ '''
273
+ low_similarity = calculate_cosine_similarity(ms2_embedding_low, low_energy_embedding_db)
274
+ median_similarity = calculate_cosine_similarity(ms2_embedding_median, median_energy_embedding_db)
275
+ high_similarity = calculate_cosine_similarity(ms2_embedding_high, high_energy_embedding_db)'''
276
+ similarity_scores.append((smile, low_similarity, median_similarity, high_similarity))
277
+
278
+ weighted_similarity_scores = []
279
+ for smile, low_similarity, median_similarity, high_similarity in similarity_scores:
280
+ if collision_energy <=15:
281
+ weighted_similarity = 0.4 * low_similarity + 0.3 * median_similarity + 0.3 * high_similarity
282
+ weighted_similarity_scores.append((smile, weighted_similarity))
283
+ elif collision_energy >15 and collision_energy <= 25:
284
+ weighted_similarity = 0.3 * low_similarity + 0.4 * median_similarity + 0.3 * high_similarity
285
+ weighted_similarity_scores.append((smile, weighted_similarity))
286
+ elif collision_energy > 25:
287
+ weighted_similarity = 0.2 * low_similarity + 0.3 * median_similarity + 0.5 * high_similarity
288
+ weighted_similarity_scores.append((smile, weighted_similarity))
 
 
 
 
 
 
 
 
289
 
290
  weighted_similarity_scores.sort(key=lambda x: x[1], reverse=True)
291
 
 
476
  demo.launch(share=True)
477
 
478
 
479
+