Пример #1
0
 def ToSystem ( self, mmModel = None ):
     """Create a system."""
     system = None
     if self.QPARSED:
         # . Sequence data and then basic system.
         sequence     = self.ToSequence ( )
         system       = System.FromSequence ( sequence )
         system.label = " ".join ( self.title )
         # . Assign atomic numbers using atomic numbers if they exist, otherwise masses.
         atomicNumbers = getattr ( self, "atomic_number", None )
         if atomicNumbers is None:
             for ( mass, atom ) in zip ( self.mass, system.atoms ):
                 atom.atomicNumber = PeriodicTable.AtomicNumberFromMass ( mass )
         else:
             for ( n, atom ) in zip ( atomicNumbers, system.atoms ):
                 atom.atomicNumber = n
         # . The MM model (with some options).
         if mmModel is None: mmModel = MMModelAMBER ( )
         # . 1-4 scaling factors.
         if hasattr ( self, "scee_scale_factor" ): mmModel.electrostaticScale14 = 1.0 / self.scee_scale_factor[0]
         if hasattr ( self, "scnb_scale_factor" ): mmModel.lennardJonesScale14  = 1.0 / self.scnb_scale_factor[0]
         # . Define the model.
         system.DefineMMModel ( mmModel, buildModel = False )
         # . The MM atoms.
         mm = self.ToMMAtomContainer ( )
         if mm is not None: system.energyModel.mmAtoms = mm
         # . Various MM terms.
         mmTerms = []
         mm      = self.ToHarmonicBondContainer ( )
         if mm is not None: mmTerms.append ( mm )
         mm      = self.ToHarmonicAngleContainer ( )
         if mm is not None: mmTerms.append ( mm )
         self.UntangleDihedralsAnd14s ( )
         if self.dihedrals is not None: mmTerms.append ( self.dihedrals )
         if self.impropers is not None: mmTerms.append ( self.impropers )
         if len ( mmTerms ) > 0: system.energyModel.mmTerms = MMTermContainer ( mmTerms )
         # . Remaining MM data.
         if self.interactions14 is not None: system.energyModel.interactions14 = self.interactions14
         mm = self.ToExclusionsPairList ( )
         if mm is not None: system.energyModel.exclusions = mm
         mm = self.ToLJParameterContainer ( mmModel.lennardJonesStyle )
         if mm is not None:
             system.energyModel.ljParameters = mm
             # . 1-4 parameters.
             scale = mmModel.lennardJonesScale14
             if scale != 0.0:
                 lj14       = Clone ( mm )
                 lj14.label = "1-4 Lennard-Jones"
                 lj14.Scale ( scale )
                 system.energyModel.ljParameters14 = lj14
         # . Symmetry data.
         self.ToSymmetry ( system )
     return system
 def ParseMass(self, tokens):
     """Mass line."""
     if len(tokens) < 3: self.Warning("Invalid MASS line.", False)
     else:
         index = int(tokens[0])
         label = tokens[1]
         mass = float(tokens[2])
         if len(tokens) > 3:
             atomicNumber = PeriodicTable.AtomicNumber(tokens[3])
         else:
             atomicNumber = PeriodicTable.AtomicNumberFromMass(mass)
         self.atomTypes[label] = CHARMMTopologyAtomType(
             atomicNumber=atomicNumber, index=index, label=label, mass=mass)
 def ToSystem(self, mmModel=None, parameters=None):
     """Create a system."""
     system = None
     if self.QPARSED:
         # . Get the sequence.
         sequence = self.ToSequence()
         # . Basic system.
         system = System.FromSequence(sequence)
         system.label = " ".join(self.title)
         # . Assign atomic numbers from masses.
         for (datum, atom) in zip(self.atoms, system.atoms):
             atom.atomicNumber = PeriodicTable.AtomicNumberFromMass(
                 datum[7])
         # . The MM model.
         if mmModel is None: mmModel = MMModelCHARMM()
         # . Build the model but only when PSF files are in XPLOR format.
         if (mmModel is not None) and (parameters
                                       is not None) and (self.isXPLOR):
             system.DefineMMModel(mmModel, buildModel=False)
             # . The MM atoms.
             mm = self.ToMMAtomContainer()
             if mm is not None: system.energyModel.mmAtoms = mm
             # . Various MM terms.
             mmTerms = []
             mm = self.ToHarmonicBondContainer(
                 rawParameters=parameters.bonds)
             if mm is not None: mmTerms.append(mm)
             mm = self.ToHarmonicAngleContainer(
                 rawParameters=parameters.angles)
             if mm is not None: mmTerms.append(mm)
             mm = self.ToHarmonicUreyBradleyContainer(
                 rawParameters=parameters.ureybradleys)
             if mm is not None: mmTerms.append(mm)
             mm = self.ToFourierDihedralContainer(
                 rawParameters=parameters.dihedrals,
                 rawParametersWild=parameters.dihedralwilds)
             if mm is not None: mmTerms.append(mm)
             mm = self.ToHarmonicImproperContainer(
                 rawParameters=parameters.impropers,
                 rawParametersWild=parameters.improperwilds)
             if mm is not None: mmTerms.append(mm)
             mm = self.ToCMAPDihedralContainer(
                 rawParameters=parameters.cmaps)
             if mm is not None: mmTerms.append(mm)
             if len(mmTerms) > 0:
                 system.energyModel.mmTerms = MMTermContainer(mmTerms)
             # . Exclusions.
             (exclusions, interactions14) = self.ToExclusionPairLists()
             if exclusions is not None:
                 system.energyModel.exclusions = exclusions
             if interactions14 is not None:
                 system.energyModel.interactions14 = interactions14
             # . LJ terms.
             ( ljParameters, ljParameters14 ) = self.ToLJParameterContainers ( parameters   = parameters.nonbonds  , parametersWild   = parameters.nonbondwilds,  \
                                                                               parameters14 = parameters.nonbond14s, parameters14Wild = parameters.nonbond14wilds )
             if ljParameters is not None:
                 system.energyModel.ljParameters = ljParameters
             if ljParameters14 is not None:
                 system.energyModel.ljParameters14 = ljParameters14
         # . Fixed atoms - do after MM model so MM terms are appropriately affected.
         self.ToFixedAtoms(system)
     return system