Source code for schrodinger.application.livedesign.io_utils
"""
LiveDesign protocol io utils
Copyright Schrodinger, LLC. All rights reserved.
"""
import csv
from random import choice
from schrodinger import structure
from schrodinger.structutils import color
ALLOWED_COLOR_SCHEMES = [
'element_customc_darkblue', 'element_customc_blue',
'element_customc_aquamarine', 'element_customc_turquoise',
'element_customc_springgreen_carbons', 'element_customc_darkgreen',
'element_customc_green', 'element_customc_limegreen',
'element_customc_yellowgreen', 'element_customc_yellow',
'element_customc_orange', 'element_customc_maroon', 'element_customc_red',
'element_customc_pink', 'element_customc_plum', 'element_customc_purple',
'element_customc_bluepurple', 'element_customc_white'
]
[docs]def get_structure_ids(infile):
"""
Create a set of titles for all structures found in the input file
:param infile: Input SD file
:type infile: str
:return: Set containing all structure titles
:rtype: set
"""
ids = set()
for st in structure.StructureReader(infile):
try:
title = st.title
except KeyError:
raise RuntimeError('Structure found with missing title')
ids.add(title)
return ids
[docs]def apply_random_color(st):
"""
Apply a random color scheme to the structure
:param st: Structure to be colored
:type st: `schrodinger.structure.Structure`
"""
color.apply_color_scheme(st, choice(ALLOWED_COLOR_SCHEMES))
[docs]def create_csv(results_list, csv_file):
"""
Write a CSV file from a list of dictionaries. The output file name
'results.csv', is required by LiveDesign so the module-level constant will
always be used
:param results_list: List of dictionaries where each dictionary contains the
required data to write to the CSV file. Column headers will be take from
the keys of the first dict
:type results_list: list
:param csv_file: CSV filename
:type csv_file: str
"""
fieldnames = results_list[0].keys()
# Sort the list by the corporate ID to allow for consistent CSV file creation
results_list = sorted(results_list, key=lambda x: x['Corporate ID'])
with open(csv_file, 'w') as output_file:
writer = csv.DictWriter(output_file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(results_list)