__init__.py (pymol-open-source-2.2.0) | : | __init__.py (pymol-open-source-2.3.0) | ||
---|---|---|---|---|
skipping to change at line 19 | skipping to change at line 19 | |||
#I* Additional authors of this source file include: | #I* Additional authors of this source file include: | |||
#-* | #-* | |||
#-* | #-* | |||
#-* | #-* | |||
#Z* ------------------------------------------------------------------- | #Z* ------------------------------------------------------------------- | |||
from __future__ import print_function | from __future__ import print_function | |||
import os | import os | |||
import copy | import copy | |||
import functools | ||||
# | # | |||
# Basic chempy types | # Basic chempy types | |||
# | # | |||
class Atom: | @functools.total_ordering | |||
class Atom(object): | ||||
def __reduce__(self): | ||||
# for loading new-style class pickle with PyMOL <= 2.2 | ||||
return (self.__class__, (), self.__dict__) | ||||
def __setstate__(self, state): | ||||
# for loading PyMOL <= 2.2 pickles | ||||
self.__dict__.update(state) | ||||
if 'resi' in state: | ||||
self.resi = self.__dict__.pop('resi') | ||||
@property | ||||
def resi(self): | ||||
return str(self.resi_number) + self.ins_code | ||||
@resi.setter | ||||
def resi(self, resi): | ||||
if isinstance(resi, str) and resi and not resi[-1].isdigit(): | ||||
self.ins_code = resi[-1] | ||||
resi = resi[:-1] | ||||
else: | ||||
self.__dict__.pop('ins_code', None) | ||||
self.resi_number = int(resi or 0) | ||||
# these must be immutables | # these must be immutables | |||
symbol = 'X' | symbol = 'X' | |||
name = '' | name = '' | |||
resn = 'UNK' | resn = 'UNK' | |||
resn_code = 'X' | resn_code = 'X' | |||
resi = '1' | ins_code = '' | |||
resi_number = 1 | resi_number = 1 | |||
b = 0.0 | b = 0.0 | |||
q = 1.0 | q = 1.0 | |||
vdw = 0.0 | vdw = 0.0 | |||
alt = '' | alt = '' | |||
hetatm = 1 | hetatm = 1 | |||
segi = '' | segi = '' | |||
chain = '' | chain = '' | |||
coord = (9999.999,9999.999,9999.999) | coord = (9999.999,9999.999,9999.999) | |||
formal_charge = 0.0 | formal_charge = 0.0 | |||
partial_charge = 0.0 | partial_charge = 0.0 | |||
elec_radius = 0.0 | ||||
custom = '' | ||||
# Flags | # Flags | |||
flags = 0 | flags = 0 | |||
# Force-fields | # Force-fields | |||
numeric_type = -9999 | numeric_type = -9999 | |||
text_type = '??' | text_type = '??' | |||
# MDL Mol-files | # MDL Mol-files | |||
stereo = 0 | stereo = 0 | |||
# Macromodel files | # Macromodel files | |||
color_code = 2 | color_code = 2 | |||
# Secondary structure | # Secondary structure | |||
skipping to change at line 90 | skipping to change at line 117 | |||
if self.segi == other.segi: | if self.segi == other.segi: | |||
return 1 | return 1 | |||
return 0 | return 0 | |||
def new_in_residue(self): | def new_in_residue(self): | |||
newat = Atom() | newat = Atom() | |||
if self.has('segi'): newat.segi = self.segi | if self.has('segi'): newat.segi = self.segi | |||
if self.has('chain'): newat.chain = self.chain | if self.has('chain'): newat.chain = self.chain | |||
if self.has('resn'): newat.resn = self.resn | if self.has('resn'): newat.resn = self.resn | |||
if self.has('resn_code'): newat.resn_code = self.resn_code | if self.has('resn_code'): newat.resn_code = self.resn_code | |||
if self.has('resi'): newat.resi = self.resi | if self.has('ins_code'): newat.ins_code = self.ins_code | |||
if self.has('resi_number'): newat.resi_number = self.resi_number | if self.has('resi_number'): newat.resi_number = self.resi_number | |||
if self.has('hetatm'): newat.hetatm = self.hetatm | if self.has('hetatm'): newat.hetatm = self.hetatm | |||
return newat | return newat | |||
def get_signature(self): | def get_signature(self): | |||
return ':'.join([self.segi, self.chain, self.resn, | return ':'.join([self.segi, self.chain, self.resn, | |||
self.resi, self.symbol, self.name]) | self.resi, self.symbol, self.name]) | |||
def __cmp__(self,other): | def __cmp__(self,other): | |||
return \ | return \ | |||
cmp(type(self), type(other)) or \ | cmp(type(self), type(other)) or \ | |||
cmp(self.segi, other.segi) or \ | cmp(self.segi, other.segi) or \ | |||
cmp(self.chain, other.chain) or \ | cmp(self.chain, other.chain) or \ | |||
cmp(self.resi_number, other.resi_number) or \ | cmp(self.resi_number, other.resi_number) or \ | |||
cmp(self.resi, other.resi) or \ | cmp(self.ins_code, other.ins_code) or \ | |||
cmp(self.resn, other.resn) or \ | cmp(self.resn, other.resn) or \ | |||
cmp(self.symbol, other.symbol) or \ | cmp(self.symbol, other.symbol) or \ | |||
cmp(self.name, other.name) or \ | cmp(self.name, other.name) or \ | |||
cmp(id(self), id(other)) | cmp(id(self), id(other)) | |||
@staticmethod | ||||
def _order(obj): | ||||
return ( | ||||
obj.segi, | ||||
obj.chain, | ||||
obj.resi_number, | ||||
obj.ins_code, | ||||
obj.resn, | ||||
obj.symbol, | ||||
obj.name, | ||||
id(obj), | ||||
) | ||||
def __gt__(self, other): | ||||
return Atom._order(self) > Atom._order(other) | ||||
def __eq__(self, other): | ||||
return Atom._order(self) == Atom._order(other) | ||||
class Bond: | class Bond: | |||
order = 1 | order = 1 | |||
stereo = 0 | stereo = 0 | |||
def has(self,attr): | def has(self,attr): | |||
return attr in self.__dict__ | return attr in self.__dict__ | |||
class Molecule: | class Molecule: | |||
End of changes. 7 change blocks. | ||||
4 lines changed or deleted | 50 lines changed or added |