Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
    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])
Exemplo n.º 3
0
 def __build_beads(self):
     for i in range(self.positions.__len__()):
         self.beads.append(CoarsegrainedBead.bead(position=self.positions[i,:], beadtype='GenericPolymer', body = -1))
Exemplo n.º 4
0
 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))