| 55 | |
| 56 | |
| 57 | class Link: |
| 58 | def __init__(self, j1, j2, affinity=1): |
| 59 | self.j1 = j1 |
| 60 | self.j2 = j2 |
| 61 | self.affinity = affinity |
| 62 | self._length = sqrt((j1.pos[0] - j2.pos[0]) ** 2 + (j1.pos[1] - j2.pos[1]) ** 2) |
| 63 | |
| 64 | def __repr__(self): |
| 65 | return f"Link {self.idx}, affinity={self.affinity:.2f}, length={self.length:.2f}" |
| 66 | |
| 67 | @property |
| 68 | def confidence(self): |
| 69 | return self.j1.confidence * self.j2.confidence |
| 70 | |
| 71 | @property |
| 72 | def idx(self): |
| 73 | return self.j1.idx, self.j2.idx |
| 74 | |
| 75 | @property |
| 76 | def length(self): |
| 77 | return self._length |
| 78 | |
| 79 | @length.setter |
| 80 | def length(self, length): |
| 81 | self._length = length |
| 82 | |
| 83 | def to_vector(self): |
| 84 | return [*self.j1.pos, *self.j2.pos] |
| 85 | |
| 86 | |
| 87 | class Assembly: |