Update app.py
Browse files
app.py
CHANGED
|
@@ -13,18 +13,15 @@ def generate_sequence_from_words(words, length):
|
|
| 13 |
return ''.join(random.choice(amino_acids) for _ in range(length))
|
| 14 |
|
| 15 |
def predict_structure(sequence):
|
| 16 |
-
url = "https://api.
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
"num_models": 1
|
| 22 |
-
}
|
| 23 |
-
response = requests.post(url, json=data)
|
| 24 |
if response.status_code == 200:
|
| 25 |
-
return response.
|
| 26 |
else:
|
| 27 |
-
st.error(f"Error in structure prediction: {response.text}")
|
| 28 |
return None
|
| 29 |
|
| 30 |
def visualize_protein(pdb_string):
|
|
@@ -43,7 +40,7 @@ word3 = st.text_input("Word 3")
|
|
| 43 |
|
| 44 |
sequence_length = st.number_input("Enter desired sequence length",
|
| 45 |
min_value=50,
|
| 46 |
-
max_value=
|
| 47 |
value=100,
|
| 48 |
step=10)
|
| 49 |
|
|
@@ -56,23 +53,15 @@ if st.button("Generate Sequence and Predict Structure"):
|
|
| 56 |
|
| 57 |
st.header("Protein Structure Prediction")
|
| 58 |
with st.spinner("Predicting protein structure... This may take a few minutes."):
|
| 59 |
-
|
| 60 |
-
if
|
| 61 |
-
pdb_string = prediction[0]['pdb_string']
|
| 62 |
view = visualize_protein(pdb_string)
|
| 63 |
|
| 64 |
st_py3dmol = py3Dmol.show3d(view, width=800, height=400)
|
| 65 |
st.components.v1.html(st_py3dmol.startjs, height=400)
|
| 66 |
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
if plddt_scores:
|
| 70 |
-
avg_plddt = sum(plddt_scores) / len(plddt_scores)
|
| 71 |
-
st.write(f"Average pLDDT score: {avg_plddt:.2f}")
|
| 72 |
-
st.write("pLDDT > 90: Very high confidence")
|
| 73 |
-
st.write("90 > pLDDT > 70: Confident")
|
| 74 |
-
st.write("70 > pLDDT > 50: Low confidence")
|
| 75 |
-
st.write("pLDDT < 50: Very low confidence")
|
| 76 |
else:
|
| 77 |
st.error("Failed to predict structure. Please try again.")
|
| 78 |
else:
|
|
|
|
| 13 |
return ''.join(random.choice(amino_acids) for _ in range(length))
|
| 14 |
|
| 15 |
def predict_structure(sequence):
|
| 16 |
+
url = "https://api.esmatlas.com/foldSequence/v1/pdb/"
|
| 17 |
+
headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
| 18 |
+
data = {"sequence": sequence}
|
| 19 |
+
|
| 20 |
+
response = requests.post(url, headers=headers, data=data, timeout=300)
|
|
|
|
|
|
|
|
|
|
| 21 |
if response.status_code == 200:
|
| 22 |
+
return response.text
|
| 23 |
else:
|
| 24 |
+
st.error(f"Error in structure prediction: {response.status_code} - {response.text}")
|
| 25 |
return None
|
| 26 |
|
| 27 |
def visualize_protein(pdb_string):
|
|
|
|
| 40 |
|
| 41 |
sequence_length = st.number_input("Enter desired sequence length",
|
| 42 |
min_value=50,
|
| 43 |
+
max_value=400,
|
| 44 |
value=100,
|
| 45 |
step=10)
|
| 46 |
|
|
|
|
| 53 |
|
| 54 |
st.header("Protein Structure Prediction")
|
| 55 |
with st.spinner("Predicting protein structure... This may take a few minutes."):
|
| 56 |
+
pdb_string = predict_structure(sequence)
|
| 57 |
+
if pdb_string:
|
|
|
|
| 58 |
view = visualize_protein(pdb_string)
|
| 59 |
|
| 60 |
st_py3dmol = py3Dmol.show3d(view, width=800, height=400)
|
| 61 |
st.components.v1.html(st_py3dmol.startjs, height=400)
|
| 62 |
|
| 63 |
+
st.success("Structure prediction complete!")
|
| 64 |
+
st.write("Note: This is a computational prediction and may not represent the actual biological structure.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
else:
|
| 66 |
st.error("Failed to predict structure. Please try again.")
|
| 67 |
else:
|