コード例 #1
0
ファイル: alkane.py プロジェクト: dubosese/atools
    def __init__(self, n=3, cap_front=True, cap_end=True):
        """Initialize an Alkane Compound.

        Args:
            n: Number of carbon atoms.
            cap_front: Add methyl group to beginning of chain ('down' port).
            cap_end: Add methyl group to end of chain ('up' port).
        """
        if n < 1:
            raise ValueError('n must be 1 or more')
        elif n == 1:
            if cap_front or cap_end:
                warn('Returning CH3 group')
            else:
                warn('Returning CH2 group')
        super(Alkane, self).__init__()

        if n > 1:
            if cap_front:
                n -= 1
                ch3_front = Ch3()
                self.add(ch3_front, 'methyl_front')
            if cap_end:
                n -= 1
                ch3_end = clone(ch3_front)
                self.add(ch3_end, 'methyl_end')
            try:
                chain = mb.recipes.Polymer(CH2(),
                                           n=n,
                                           port_labels=('up', 'down'))
                self.add(chain, 'chain')
                if cap_end:
                    mb.force_overlap(self['methyl_end'],
                                     self['methyl_end']['down'],
                                     self['chain']['down'])
                else:
                    self.add(chain['down'], 'down', containment=False)
                if cap_front:
                    mb.force_overlap(self['chain'], self['chain']['up'],
                                     self['methyl_front']['down'])
                else:
                    self.add(chain['up'], 'up', containment=False)
            except ValueError:
                mb.force_overlap(self['methyl_end'],
                                 self['methyl_end']['down'],
                                 self['methyl_front']['down'])
        else:
            if cap_end or cap_front:
                ch3 = Ch3()
                self.add(ch3, 'methyl')
                self.add(ch3['down'], 'down', containment=False)
            else:
                ch2 = CH2()
                self.add(ch2, 'methylene')
                self.add(ch2['up'], 'up', containment=False)
                self.add(ch2['down'], 'down', containment=False)
コード例 #2
0
    def __init__(self, chain_length):
        """Initialize an Alkane Compound.

        Parameters
        ----------
        chain_length : int
            Length of the alkane chain (in number of carbons)
        """
        # Make sure the user inputs a chain length of at least 1
        if chain_length < 1:
            raise ValueError('Chain length must be greater than 1')

        super(Alkane, self).__init__()

        # Create a polymer of CH2 units
        chain = mb.recipes.Polymer(CH2(), n=chain_length, port_labels=('up', 'down'))
        self.add(chain, 'chain')

        # Cap one end of the polymer with a hydrogen
        self.add(H(), 'up_cap')
        mb.force_overlap(move_this=self['up_cap'],
                         from_positions=self['up_cap']['up'],
                         to_positions=self['chain']['up'])

        # Cap the other end of the polymer with a hydrogen
        self.add(H(), 'down_cap')
        mb.force_overlap(move_this=self['down_cap'],
                         from_positions=self['down_cap']['up'],
                         to_positions=self['chain']['down'])
コード例 #3
0
    def __init__(self, n=1, cap_start=True):
        super(Alkane, self).__init__()
        if n < 1:
            raise ValueError('n must be 1 or more')
        if cap_start:
            #if n == 1, will simply return a a methane molecule
            if n == 1:
                self.add(CH4(), 'methyl_start')
            if n > 1:
                self.add(Backbone(n=n-1, cap_start_mol=CH3(),
                                  cap_start_name= 'methyl_start', cap_start_port = 'up',
                                  cap_end_mol = CH3_down(), cap_end_name='methyl_end',
                                  cap_end_port= 'dow'))
        else:
            #if n == 1, will simply return a a methane molecule,
            #with an available 'down' port.
            #We will label this as 'methyl_start', again for consistency
            #with longer chain molecules.

            if n == 1:
                self.add(CH3_down(), 'methyl_start')
            if n > 1:
                self.add(Backbone(n=n-1, cap_start_mol=CH2(),
                          cap_start_name= 'methyl_start', cap_start_port = 'up',
                          cap_end_mol = CH3_down(), cap_end_name='methyl_end',
                          cap_end_port= 'down'))
コード例 #4
0
ファイル: alkane.py プロジェクト: rsdefever/mbuild
    def __init__(self, n=3, cap_front=True, cap_end=True):
        """Initialize an Alkane Compound.

        Args:
            n: Number of carbon atoms.
            cap_front: Add methyl group to beginning of chain ('down' port).
            cap_end: Add methyl group to end of chain ('up' port).
        """
        if n < 2:
            raise ValueError('n must be 1 or more')
        super(Alkane, self).__init__()

        # Adjust length of Polmyer for absence of methyl terminations.
        if not cap_front:
            n += 1
        if not cap_end:
            n += 1
        chain = mb.recipes.Polymer(CH2(), n=n-2, port_labels=('up', 'down'))
        self.add(chain, 'chain')

        if cap_front:
            self.add(CH3(), "methyl_front")
            mb.force_overlap(move_this=self['chain'],
                             from_positions=self['chain']['up'],
                             to_positions=self['methyl_front']['up'])
        else:
            # Hoist port label to Alkane level.
            self.add(chain['up'], 'up', containment=False)

        if cap_end:
            self.add(CH3(), 'methyl_end')
            mb.force_overlap(self['methyl_end'], self['methyl_end']['up'], self['chain']['down'])
        else:
            # Hoist port label to Alkane level.
            self.add(chain['down'], 'down', containment=False)
コード例 #5
0
    def __init__(self, n=1, cap_start_mol=CH3(),
                 cap_start_name= 'methyl_start', cap_start_port = 'up',
                 cap_end_mol = OH(), cap_end_name='OH',
                 cap_end_port= 'down'):
        super(Backbone, self).__init__()
        if n < 1:
            raise ValueError('n must be 1 or more')
        if n == 1:
            cap1 = cap_start_mol
            self.add(cap1, cap_start_name)
            cap2 = cap_end_mol
            self.add(cap2, cap_end_name)
            mb.force_overlap(cap1, cap1[cap_start_port], cap2[cap_end_port])
        if n == 2:
            cap1 = cap_start_mol
            self.add(cap1, cap_start_name)
            chain = CH2()
            self.add(chain, 'chain')
            mb.force_overlap(move_this=chain,
                             from_positions=chain['down'],
                             to_positions=cap1[cap_start_port], )

            cap2 = cap_end_mol
            self.add(cap2, cap_end_name)
            mb.force_overlap(move_this=cap2,
                             from_positions=cap2[cap_end_port],
                             to_positions=chain['up'])
        if n > 2:
            cap1 = cap_start_mol
            self.add(cap1, cap_start_name)
            chain = mb.recipes.Polymer(CH2(), n=n-1, port_labels=('up', 'down'))
            self.add(chain, 'chain')
            mb.force_overlap(move_this=chain,
                             from_positions=chain['down'],
                             to_positions=cap1[cap_start_port])
            cap2 = cap_end_mol
            self.add(cap2, cap_end_name)
            mb.force_overlap(move_this=cap2,
                             from_positions=cap2[cap_end_port],
                             to_positions=chain['up'])
コード例 #6
0
 def test_label_consistency(self):
     from mbuild.lib.moieties import CH2, CH3
     parent = mb.Compound(name='Hierarchy1')
     for i in range(10):
         parent.add(CH2())
         parent.add(CH3())
     compound_to_json(parent, 'parent.json', include_ports=True)
     parent_copy = compound_from_json('parent.json')
     assert len(parent_copy['CH2']) == len(parent['CH2'])
     assert parent_copy.labels.keys() == parent.labels.keys()
     for child, child_copy in zip(parent.successors(), parent_copy.successors()):
         assert child.labels.keys() == child_copy.labels.keys()
     assert parent_copy.available_ports() == parent.available_ports()
コード例 #7
0
 def __init__(self, n=1, cap_start=True):
     super(Alcohol, self).__init__()
     
     if n < 1:
         raise ValueError('n must be 1 or more')
     if cap_start:
        self.add(Backbone(n=n, cap_start_mol=CH3(),
                               cap_start_name= 'methyl_start', cap_start_port = 'up',
                               cap_end_mol = OH(), cap_end_name='OH_end',
                               cap_end_port= 'down'))
     else:
         self.add(Backbone(n=n, cap_start_mol=CH2(),
                           cap_start_name= 'methyl_start', cap_start_port = 'up',
                           cap_end_mol = OH(), cap_end_name='OH_end',
                           cap_end_port= 'down'))
コード例 #8
0
ファイル: alkane.py プロジェクト: CalCraven/mosdef_tutorials
    def __init__(self, chain_length):
        """Initialize an Alkane Compound.

        Parameters
        ----------
        chain_length : int
            Length of the alkane chain (in number of carbons)
        """
        # Make sure the user inputs a chain length of at least 1
        if chain_length < 1:
            raise ValueError('Chain length must be greater than 1')

        super(Alkane, self).__init__()

        # Create a polymer of CH2 units
        chain = mb.lib.recipes.Polymer([CH2()])
        chain.build(n=chain_length)
        self.add(chain, 'chain')
コード例 #9
0
 def __init__(self, n=1, cap_start=True):
     super(Acid, self).__init__()
     if n < 1:
         raise ValueError('n must be 1 or more')
     if cap_start:
         if n ==1:
             self.add(Methanol())
         if n > 1:
             self.add(Backbone(n=n-1, cap_start_mol=CH3(),
                               cap_start_name= 'methyl_start', cap_start_port = 'up',
                               cap_end_mol = COOH(), cap_end_name='COOH_end',
                               cap_end_port= 'down'))
     else:
         if n ==1:
             self.add(COOH())
         if n > 1:
             self.add(Backbone(n=n-1, cap_start_mol=CH2(),
                               cap_start_name= 'methyl_start', cap_start_port = 'up',
                               cap_end_mol = COOH(), cap_end_name='COOH_end',
                               cap_end_port= 'down'))
コード例 #10
0
ファイル: alkane.py プロジェクト: uppittu11/mbuild
    def __init__(self, n=3, cap_front=True, cap_end=True):
        """Initialize an Alkane Compound.

        Args:
            n: Number of carbon atoms.
            cap_front: Add a methyl group to the beginning of chain ('down' port).
            cap_end: Add a methyl group to the end of chain ('up' port).
        """
        if n < 1:
            raise ValueError('n must be 1 or more')
        super(Alkane, self).__init__()

        # Handle the case of Methane and Ethane separately
        if n < 3:
            if n == 1:
                if cap_front and cap_end:
                    self.add(Methane(), 'chain')
                elif cap_front != cap_end:
                    chain = CH3()
                    self.add(chain, 'chain')
                    if cap_front:
                        self.add(chain['up'], 'down', containment=False)
                    else:
                        self.add(chain['up'], 'up', containment=False)
                else:
                    chain = CH2()
                    self.add(chain)
                    self.add(chain['down'], 'down', containment=False)
                    self.add(chain['up'], 'up', containment=False)
            elif n == 2:
                if cap_front and cap_end:
                    self.add(Ethane(), 'chain')
                elif cap_front != cap_end:
                    chain = CH2()
                    self.add(chain, 'chain')
                    if cap_front:
                        self.add(CH3(), 'methyl_front')
                        mb.force_overlap(move_this=self['chain'],
                                from_positions=self['chain']['up'],
                                to_positions=self['methyl_front']['up'])
                        self.add(chain['down'], 'down', containment=False)
                    else:
                        self.add(CH3(), 'methyl_end')
                        mb.force_overlap(self['methyl_end'],
                                         self['methyl_end']['up'],
                                         self['chain']['down'])
                        self.add(chain['up'], 'up', containment=False)
                else:
                    chain = CH2()
                    self.add(chain, 'chain')
                    self.add(chain['down'], 'down', containment=False)
                    self.add(chain['up'], 'up', containment=False)

        # Handle general case of n >= 3
        else:
            # Adjust length of Polmyer for absence of methyl terminations.
            if not cap_front:
                n += 1
            if not cap_end:
                n += 1
            chain = mb.recipes.Polymer(CH2(), n=n-2,
                                       port_labels=('up','down'))
            self.add(chain, 'chain')
            if cap_front:
                self.add(CH3(), "methyl_front")
                mb.force_overlap(move_this=self['chain'],
                                 from_positions=self['chain']['up'],
                                 to_positions=self['methyl_front']['up'])
            else:
                # Hoist port label to Alkane level.
                self.add(chain['up'], 'up', containment=False)

            if cap_end:
                self.add(CH3(), 'methyl_end')
                mb.force_overlap(self['methyl_end'],
                                 self['methyl_end']['up'],
                                 self['chain']['down'])
            else:
                # Hoist port label to Alkane level.
                self.add(chain['down'], 'down', containment=False)
コード例 #11
0
ファイル: base_test.py プロジェクト: ramanishsingh/mbuild
 def ch2(self):
     from mbuild.lib.moieties import CH2
     return CH2()
コード例 #12
0
    def __init__(self, n=3, cap_front=True, cap_end=True):
        """Initialize an Alkane Compound.

        Args
        ----
        n: int, default 3,
            Number of carbon atoms.
        cap_front: bool, default True
            Whether to add a methyl group to the beginning of chain
            ('down' port).
        cap_end: bool, default True,
            Whether to add a methyl group to the end of chain ('up' port).
        """
        if n < 1:
            raise ValueError("n must be 1 or more")
        super(Alkane, self).__init__()

        # Handle the case of Methane and Ethane separately
        if n < 3:
            if n == 1:
                if cap_front and cap_end:
                    self.add(Methane(), "chain")
                elif cap_front != cap_end:
                    chain = CH3()
                    self.add(chain, "chain")
                    if cap_front:
                        self.add(chain["up"], "down", containment=False)
                    else:
                        self.add(chain["up"], "up", containment=False)
                else:
                    chain = CH2()
                    self.add(chain)
                    self.add(chain["down"], "down", containment=False)
                    self.add(chain["up"], "up", containment=False)
            elif n == 2:
                if cap_front and cap_end:
                    self.add(Ethane(), "chain")
                elif cap_front != cap_end:
                    chain = CH2()
                    self.add(chain, "chain")
                    if cap_front:
                        self.add(CH3(), "methyl_front")
                        mb.force_overlap(
                            move_this=self["chain"],
                            from_positions=self["chain"]["up"],
                            to_positions=self["methyl_front"]["up"],
                        )
                        self.add(chain["down"], "down", containment=False)
                    else:
                        self.add(CH3(), "methyl_end")
                        mb.force_overlap(
                            self["methyl_end"],
                            self["methyl_end"]["up"],
                            self["chain"]["down"],
                        )
                        self.add(chain["up"], "up", containment=False)
                else:
                    chain = CH2()
                    self.add(chain, "chain")
                    self.add(chain["down"], "down", containment=False)
                    self.add(chain["up"], "up", containment=False)

        # Handle general case of n >= 3
        else:
            end_groups = [None, None]
            # Adjust length of Polmyer for absence of methyl terminations.
            if cap_front:
                n -= 1
                end_groups[0] = CH3()
            if cap_end:
                n -= 1
                end_groups[1] = CH3()

            chain = mb.recipes.Polymer(monomers=[CH2()], end_groups=end_groups)
            chain.build(n, add_hydrogens=False)
            self.add(chain, "chain")
            if not cap_front:
                # Hoist port label to Alkane level.
                self.add(self["chain"]["up"], "up", containment=False)
            if not cap_end:
                # Hoist port label to Alkane level.
                self.add(self["chain"]["down"], "down", containment=False)
コード例 #13
0
                first_part = this_part
            else:
                # Transform this part, such that it's bottom port is rotated
                # and translated to the last part's top port.
                force_overlap(
                    this_part,
                    this_part.labels[port_labels[1]],
                    last_part.labels[port_labels[0]],
                )
            last_part = this_part
            if n_added == n * len(sequence) - 1:
                break

        # Hoist the last part's top port to be the top port of the polymer.
        self.add(last_part.labels[port_labels[0]],
                 port_labels[0],
                 containment=False)

        # Hoist the first part's bottom port to the bottom port of the polymer.
        self.add(first_part.labels[port_labels[1]],
                 port_labels[1],
                 containment=False)


if __name__ == "__main__":
    from mbuild.lib.moieties import CH2

    ch2 = CH2()
    poly = Polymer(ch2, n=13, port_labels=("up", "down"))
    poly.save("polymer.mol2")
コード例 #14
0
    def __init__(self, n=3, cap_front=True, cap_end=True):
        """Initialize an PEG Compound.

        Args:
            n: Number of carbon + oxygen atoms.
                After deducted for cap front, cap end, and ch2 end
                n will be divided by 3 since there are 3 element in a PEG
            cap_front: Add methyl group to beginning of chain ('down' port).
            cap_end: Add methyl group to end of chain ('up' port).
        """
        if n < 1:
            raise ValueError('n must be 1 or more')
        elif n == 1:
            if cap_front or cap_end:
                warn('Returning CH3 group')
            else:
                warn('Returning CH2 group')
        super(PEG, self).__init__()
        
        if n > 1:
            if cap_front:
                n -= 1
                ch3_front = CH3()
                self.add(ch3_front, 'methyl_front')
            if cap_end:
                n -= 1
                ch3_end = CH3()
                self.add(ch3_end, 'methyl_end')

            # If n is not divisible by 3, add CH2 in place of them
            m = 0
            while n % 3 != 0:
                m += 1
                n -= 1 

            n = n//3
            chain = mb.lib.recipes.Polymer(PegMonomer(), n=n, port_labels=('up', 'down'))
            self.add(chain, 'chain')

            if m != 0:
                ch2_chain = mb.lib.recipes.Polymer(CH2(), n=m, port_labels=('up','down'))
                self.add(ch2_chain, 'ch2_chain')
                mb.force_overlap(self['ch2_chain'], self['ch2_chain']['up'],
                                self['chain']['down'])
                if cap_end:
                    mb.force_overlap(self['methyl_end'], self['methyl_end']['down'],
                                    self['ch2_chain']['down'])
                else:
                    self.add(ch2_chain['down'], 'down', containment=False)
            else: 
                if cap_end:
                    mb.force_overlap(self['methyl_end'], self['methyl_end']['down'],
                                    self['chain']['down'])
                else:
                    self.add(chain['down'], 'down', containment=False)
            if cap_front:
                mb.force_overlap(self['methyl_front'], self['methyl_front']['down'],
                                self['chain']['up'])
            else:
                self.add(chain['up'], 'up', containment=False)

        else:
            if cap_end or cap_front:
                ch3 = CH3()
                self.add(ch3, 'methyl')
                self.add(ch3['down'], 'down', containment=False)
            else:
                peg = PegMonomer()
                self.add(peg, 'PEG')
                self.add(peg['up'], 'up', containment=False)
                self.add(peg['down'], 'down', containment=False)