Source code for prolint2.computers.payload
from prolint2.metrics.metrics import create_metric
[docs]class ServerPayload:
"""Class that provides the data for the dashboard.
Parameters
----------
contacts : :class:`ContactsProvider`
The contacts provider object.
ts : :class:`Universe`
The universe object.
"""
def __init__(self, contacts, ts):
self.contacts = contacts
self.registry = ts.registry
self.database_resnames = ts.database.unique_resnames.tolist()
self.database_resname_counts = ts.database.resname_counts
self.residue_names = ts.query.residues.resnames
self.residue_ids = ts.query.residues.resids
self.dt = ts.trajectory.dt
self.totaltime = ts.trajectory.totaltime
self.ordered_lipid_names = list(self.database_resname_counts.keys())
self._compute()
# return metric_instance.compute(dt=self.dt, totaltime=self.totaltime)
def _compute(self, lipid_type: str = None, metric="sum"):
# protein name is hardcoded -> read protein name(s) dynamically
# update code to handle multiple identical proteins
# update code to handle multiple copies of different proteins
protein_name = (
"Protein" # TODO: we'll need to update this into a list and iterate over it
)
proteins = [protein_name]
protein_counts = {protein_name: 1}
residue_contacts = self.residue_contacts(lipid_type=lipid_type, metric=metric)
# print ('residue_contacts', residue_contacts)
lipid_counts = self.database_resname_counts
total_lipid_sum = sum(lipid_counts.values())
sub_data = []
for lipid, count in lipid_counts.items():
sub_data.append(
{"category": lipid, "value": "{:.2f}".format(count / total_lipid_sum)}
)
pie_data = []
for protein in proteins:
value = protein_counts[protein] / sum(protein_counts.values())
protein_pdata = {
"category": protein_name,
"value": "{:.2f}".format(value),
"subData": sub_data,
}
pie_data.append(protein_pdata)
self._payload = {
"data": {protein_name: residue_contacts},
"proteins": [protein_name],
"lipids": self.ordered_lipid_names,
"pie_data": pie_data, # TODO: include protein info
}
@property
def payload(self):
"""The payload."""
return self._payload
[docs] def get_payload(self):
"""Return the payload."""
return self.payload