MoleculeFlavour.py 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from intelligine.core.exceptions import NoTypeInMolecule, NoCategoryInMolecule
  2. from intelligine.simulation.molecule.Molecule import Molecule
  3. class MoleculeFlavour():
  4. @classmethod
  5. def new_from_raw_data(cls, raw_data):
  6. flavour = {}
  7. for category in raw_data:
  8. molecules_by_category = raw_data[category]
  9. for type in molecules_by_category:
  10. distance, intensity, cycle_age = molecules_by_category[type]
  11. if category not in flavour:
  12. flavour[category] = {}
  13. flavour[category][type] = Molecule(category, type, distance, intensity, cycle_age)
  14. return cls(flavour)
  15. def get_raw_data(self):
  16. raw_data = {}
  17. for category in self._flavour:
  18. molecules_by_category = self._flavour[category]
  19. for type in molecules_by_category:
  20. molecule = molecules_by_category[type]
  21. if category not in raw_data:
  22. raw_data[category] = {}
  23. if molecule.get_intensity() >= 0:
  24. raw_data[category][type] = (molecule.get_distance(),
  25. molecule.get_intensity(),
  26. molecule.get_cycle_age())
  27. return raw_data
  28. def __init__(self, flavour):
  29. self._flavour = flavour
  30. def get_molecule(self, category, type):
  31. types = self.get_types(category)
  32. if type not in types:
  33. raise NoTypeInMolecule()
  34. return types[type]
  35. def get_molecules(self, category):
  36. """
  37. :param category:
  38. :return: Molecules dict or empty dict of no molecules
  39. """
  40. try:
  41. return self.get_types(category).values()
  42. except NoCategoryInMolecule:
  43. return {}
  44. def get_molecules_types(self, category):
  45. try:
  46. return self.get_types(category).keys()
  47. except NoCategoryInMolecule:
  48. return {}
  49. def get_types(self, category):
  50. if category not in self._flavour:
  51. raise NoCategoryInMolecule()
  52. return self._flavour[category]
  53. def set_molecule(self, molecule):
  54. category = molecule.get_category()
  55. type = molecule.get_type()
  56. if category not in self._flavour:
  57. self._flavour[category] = {}
  58. self._flavour[category][type] = molecule
  59. def remove_molecule(self, molecule):
  60. category = molecule.get_category()
  61. type = molecule.get_type()
  62. del(self._flavour[category][type])