def adjust_lightness(colour, percentage): r, g, b, a = rgb_to_decimal(colour) h, l, s = colorsys.rgb_to_hls(r, g, b) l += (percentage / 100) if l > 1: print("MAX lightness") l = 1.0 elif l < 0: print("MIN lightness") l = 0.0 r, g, b = colorsys.hls_to_rgb(h, l, s) return utilities.Colour(r=round(r, 2), g=round(g, 2), b=round(b, 2), a=round(a, 2))
def rgb_to_decimal(colour): return utilities.Colour(r=round(colour.r / 255, 2), g=round(colour.g / 255, 2), b=round(colour.b / 255, 2), a=round(colour.a / 255, 2))
def decimal_to_rgb(colour): return utilities.Colour(r=round(colour.r * 255, 2), g=round(colour.g * 255, 2), b=round(colour.b * 255, 2), a=round(colour.a * 255, 2))
def to_pymol_str(self, i=0, label=True, transparency=0.6): pymol_out = "" point_colour = rgb_to_decimal(self.colour) point_colour = utilities.Colour(point_colour[0], point_colour[1], point_colour[2], transparency) feat_ID = f"{self.identifier}_{i}" group = [] coords = (self.point[0].centre[0], self.point[0].centre[1], self.point[0].centre[2]) radius = self.point[0].radius point_objname = f"{self.identifier}_point_{i}" pymol_out += PyMOLCommands.sphere(point_objname, point_colour, coords, radius=radius) pymol_out += PyMOLCommands.load_cgo(point_objname, f"{point_objname}_obj") group.append(f"{point_objname}_obj") if self.score != 0 and label: score_name = f"{point_objname}_score" pymol_out += PyMOLCommands.pseudoatom( objname=score_name, coords=coords, label=f'{round(self.score, 1)}') group.append(score_name) rank_name = f"{self.identifier}_rank_{i}" pymol_out += PyMOLCommands.pseudoatom(objname=rank_name, coords=coords, label=str(i + 1)) group.append(rank_name) if self.projected: proj_coords = (self.projected[0].centre[0], self.projected[0].centre[1], self.projected[0].centre[2]) projection_objname = f"{self.identifier}_projection_{i}" line_objname = f"{self.identifier}_line_{i}" group.extend([projection_objname, line_objname]) if self.projected_value != 0 and label: proj_score_name = f"{point_objname}_proj_score" pymol_out += PyMOLCommands.pseudoatom( objname=proj_score_name, coords=proj_coords, label=f'{round(self.projected_value, 1)}') group.append(proj_score_name) projected_colour = adjust_lightness(self.colour, percentage=30) projected_colour = utilities.Colour(projected_colour[0], projected_colour[1], projected_colour[2], transparency) projected_radius = self.projected[0].radius pymol_out += PyMOLCommands.sphere(projection_objname, projected_colour, proj_coords, radius=projected_radius) pymol_out += PyMOLCommands.load_cgo(projection_objname, f"{projection_objname}_obj") pymol_out += PyMOLCommands.line(line_objname, coords, proj_coords, rgb=projected_colour) pymol_out += PyMOLCommands.group(feat_ID, group) return pymol_out