def __build_beads(self): base_length = self.lmono for idx in range(self.pnum.__len__()): if idx == 0: self.positions = np.append(self.positions, [[0.0, 0.0, 0.0]], axis = 0) continue if self.inner_types[idx - 1] == 'S' and self.inner_types[idx] == 'S': # S - S bond self.positions = np.append(self.positions, self.positions[-1, :] + [[0.0, 0.0, 0.50 * base_length]], axis = 0) elif self.inner_types[idx - 1] == 'S' and self.inner_types[idx] == 'A': # S - A bond self.positions = np.append(self.positions, self.positions[-1, :] + [[0.0, 0.0, 0.50 * base_length]], axis = 0) elif self.inner_types[idx - 1] == 'A' and self.inner_types[idx] == 'A': # A - A bond self.positions = np.append(self.positions, self.positions[-1, :] + [[0.0, 0.0, 1.00 * base_length]], axis = 0) elif self.inner_types[idx] == 'B': if self.inner_types[idx - 1] == 'A': self.positions = np.append(self.positions, self.positions[-1, :] + [[0.0, 0.0, 0.50 * base_length]], axis = 0) elif self.inner_types[idx - 4] == 'B': # sanity check self.positions = np.append(self.positions, self.positions[-4, :] + [[0.0, 0.0, 0.50 * base_length]], axis = 0) elif self.inner_types[idx] == 'FL': # 3 scenarios, 1st flanking for C, 2nd flanking for C or chain end FL if self.inner_types[idx - 2] == 'B': self.positions = np.append(self.positions, self.positions[-2, :] + [[0.30 * base_length, 0.40 * base_length, 0.0]], axis = 0) elif self.inner_types[idx - 3] == 'B': self.positions = np.append(self.positions, self.positions[-3, :] + [[-0.30 * base_length, 0.40 * base_length, 0.0]], axis = 0) elif self.inner_types[idx - 4] == 'B': # chain end flanking self.positions = np.append(self.positions, self.positions[-4, :] + [[0.0, 0.0, 0.30 * base_length]], axis = 0) elif self.inner_types[idx] in self.sticky_end: self.positions = np.append(self.positions, self.positions[-1, :] + [[0.0, 0.40 * base_length, 0.0]], axis = 0) for idx in range(self.pnum.__len__()): self.beads.append(CoarsegrainedBead.bead(position = self.positions[idx, :], beadtype=self.inner_types[idx], mass = self.mass[idx], body = -1))
def build_surf(self): # create an N x N array that spans from - N L / 2 (N+1) to N L / 2 (N+1) # TODO : Fix the multiple isintance calls to a generic approach that wont be bothered by types if isinstance(self.edge_length, float) and isinstance(self.N_edge, float): x_tess_coordinates = np.linspace(- self.N_edge * self.edge_length / (2 * (self.N_edge + 1)), self.N_edge * self.edge_length / (2 * (self.N_edge + 1)), self.N_edge) y_tess_coordinates = np.linspace(- self.N_edge * self.edge_length / (2 * (self.N_edge + 1)), self.N_edge * self.edge_length / (2 * (self.N_edge + 1)), self.N_edge) elif isinstance(self.N_edge, float) and isinstance(self.edge_length, list): x_tess_coordinates = np.linspace(- self.N_edge * self.edge_length[0] / (2 * (self.N_edge + 1)), self.N_edge * self.edge_length[0] / (2 * (self.N_edge + 1)), self.N_edge) y_tess_coordinates = np.linspace(- self.N_edge * self.edge_length[1] / (2 * (self.N_edge + 1)), self.N_edge * self.edge_length[1] / (2 * (self.N_edge + 1)), self.N_edge) elif isinstance(self.edge_length, float) and isinstance(self.N_edge, list): x_tess_coordinates = np.linspace(- self.N_edge[0] * self.edge_length / (2 * (self.N_edge[0] + 1)), self.N_edge[0] * self.edge_length / (2 * (self.N_edge[0] + 1)), self.N_edge[0]) y_tess_coordinates = np.linspace(- self.N_edge[1] * self.edge_length / (2 * (self.N_edge[1] + 1)), self.N_edge[1] * self.edge_length / (2 * (self.N_edge[1] + 1)), self.N_edge[1]) else: assert(isinstance(self.edge_length, list) and isinstance(self.N_edge, list)) x_tess_coordinates = np.linspace(- self.N_edge[0] * self.edge_length[0] / (2 * (self.N_edge[0] + 1)), self.N_edge[0] * self.edge_length[0] / (2 * (self.N_edge[0] + 1)), self.N_edge[0]) y_tess_coordinates = np.linspace(- self.N_edge[1] * self.edge_length[1] / (2 * (self.N_edge[1] + 1)), self.N_edge[1] * self.edge_length[1] / (2 * (self.N_edge[1] + 1)), self.N_edge[1]) xgrid, ygrid = np.meshgrid(x_tess_coordinates, y_tess_coordinates) for sidx_x in range(xgrid.shape[0]): for sidx_y in range(xgrid.shape[1]): self.beads.append(CG.bead(position = np.array([xgrid[sidx_x][sidx_y] + self.internal_c_position[0], ygrid[sidx_x][sidx_y] + self.internal_c_position[1], self.internal_c_position[2]]), beadtype=self.Wall_bead_type, body=self.body_num)) try: self.pnum.append(self.pnum[-1]) except IndexError: self.pnum.append(0) self.positions = np.append(self.positions,[[xgrid[sidx_x][sidx_y] + self.internal_c_position[0], ygrid[sidx_x][sidx_y] + self.internal_c_position[1], self.internal_c_position[2]]], axis = 0 ) self.att_sites.append(self.pnum[-1]) self.rem_sites.append(self.pnum[-1])
def __build_beads(self): for i in range(self.positions.__len__()): self.beads.append(CoarsegrainedBead.bead(position=self.positions[i,:], beadtype='GenericPolymer', body = -1))
def __build_chain_beads(self): for i in range(self.positions.__len__()): if not (i%4) or (i%4==3): self.beads.append(CoarsegrainedBead.bead(position=self.positions[i], beadtype = 'paA', mass = self.mass[0], charge = 0, body = -1)) else: self.beads.append(CoarsegrainedBead.bead(position=self.positions[i], beadtype = 'paB', mass = self.mass[0], charge = 0, body = -1))