private void finalizeBuild() { currentModel = null; currentChain = null; htAtomMap.Clear(); }
public /*Chem*/Frame(Org.OpenScience.CDK.Interfaces.IChemFile chemFile, Device graphicsDevice) { shapes = new Shape[JmolConstants.SHAPE_MAX]; this.g3d = new NuGraphics3D(graphicsDevice); this.frameRenderer = new FrameRenderer(); for (int i = MAX_BONDS_LENGTH_TO_CACHE; --i > 0; ) // .GT. 0 freeBonds[i] = new Bond[MAX_NUM_TO_CACHE][]; // convert to jmol native mmset = new Mmset(this); // set properties mmset.ModelSetProperties = new System.Collections.Specialized.NameValueCollection(); // init build currentModelIndex = -1; currentModel = null; currentChainID = '\uFFFF'; currentChain = null; currentGroupSequenceNumber = -1; currentGroupInsertionCode = '\uFFFF'; int atomCountEstimate = 0; for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { atomCountEstimate += chemModel.SetOfMolecules.AtomContainers[atomC].AtomCount; } } } if (atomCountEstimate <= 0) atomCountEstimate = ATOM_GROWTH_INCREMENT; atoms = new Atom[atomCountEstimate]; bonds = new Bond[2 * atomCountEstimate]; htAtomMap.Clear(); // translate IChemSequence[] into Model[] mmset.ModelCount = chemFile.ChemSequenceCount; for (int seq = 0; seq < chemFile.ChemSequenceCount; ++seq) { int modelNumber = seq + 1; string modelName = modelNumber.ToString(); NameValueCollection modelProperties = new NameValueCollection(); // FIXME: Loading property values mmset.setModelNameNumberProperties(seq, modelName, modelNumber, modelProperties); } // translate Atoms Dictionary<Org.OpenScience.CDK.Interfaces.IAtom, Atom> atomsList = new Dictionary<Org.OpenScience.CDK.Interfaces.IAtom, Atom>(); //try //{ for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { for (int atomIdx = 0; atomIdx < chemModel.SetOfMolecules.AtomContainers[atomC].AtomCount; atomIdx++) { Org.OpenScience.CDK.Interfaces.IAtom atom = chemModel.SetOfMolecules.AtomContainers[atomC].Atoms[atomIdx]; sbyte elementNumber = (sbyte)atom.AtomicNumber; if (elementNumber <= 0) elementNumber = JmolConstants.elementNumberFromSymbol(atom.Symbol); char alternateLocation = '\0'; int sequenceNumber = int.MinValue; char groupInsertionCode = '\0'; string atomName = null; string group3Name = null; char chainID = '\0'; if (atom is PDBAtom) { PDBAtom pdbAtom = (PDBAtom)atom; if (pdbAtom.ResSeq != null && pdbAtom.ResSeq.Length > 0) sequenceNumber = int.Parse(pdbAtom.ResSeq); if (pdbAtom.ICode != null && pdbAtom.ICode.Length > 0) groupInsertionCode = pdbAtom.ICode[0]; atomName = pdbAtom.Name; group3Name = pdbAtom.ResName; if (pdbAtom.ChainID != null && pdbAtom.ChainID.Length >= 1) chainID = pdbAtom.ChainID[0]; } else atomName = atom.AtomTypeName; atomsList[atom] = AddAtom(model, atom, elementNumber, atomName, atom.getFormalCharge(), (float)atom.getCharge(), 100, float.NaN, (float)atom.X3d, (float)atom.Y3d, (float)atom.Z3d, false, int.MinValue, chainID, group3Name, sequenceNumber, groupInsertionCode, float.NaN, float.NaN, float.NaN, alternateLocation, null); } } } } //} //catch (Exception e) //{ // throw new ApplicationException("Problem translating atoms", e); //} fileHasHbonds = false; // translate bonds try { for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { for (int bondIdx = 0; bondIdx < chemModel.SetOfMolecules.AtomContainers[atomC].Bonds.Length; bondIdx++) { Org.OpenScience.CDK.Interfaces.IBond bond = chemModel.SetOfMolecules.AtomContainers[atomC].Bonds[bondIdx]; Org.OpenScience.CDK.Interfaces.IAtom[] cdkAtoms = bond.getAtoms(); // locate translated atoms Atom atom1, atom2; atomsList.TryGetValue(cdkAtoms[0], out atom1); atomsList.TryGetValue(cdkAtoms[1], out atom2); bondAtoms(atom1, atom2, (int)bond.Order); } } } } } catch (Exception e) { throw new ApplicationException("Problem translating bonds", e); } atomsList.Clear(); // translate structures of PDBPolymer only for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; foreach (Org.OpenScience.CDK.Interfaces.IMolecule molecule in chemModel.SetOfMolecules.Molecules) { if (molecule is PDBPolymer) { PDBPolymer pdbPolymer = (PDBPolymer)molecule; if (pdbPolymer.Structures != null && pdbPolymer.Structures.Count > 0) { structuresDefined = true; foreach (PDBStructure pdbStruct in pdbPolymer.Structures) { structuresDefined = true; mmset.defineStructure(pdbStruct.StructureType, pdbStruct.StartChainID, pdbStruct.StartSequenceNumber, pdbStruct.StartInsertionCode, pdbStruct.EndChainID, pdbStruct.EndSequenceNumber, pdbStruct.EndInsertionCode); } } } } } } autoBond(null, null); // build groups FinalizeGroupBuild(); BuildPolymers(); Freeze(); finalizeBuild(); // create ribbon shapes try { setShapeSize(JmolConstants.SHAPE_RIBBONS, -1, new BitArray(0)); setShapeSize(JmolConstants.SHAPE_CARTOON, -1, new BitArray(0)); } catch (Exception) { } }
private Atom AddAtom(int modelIndex, object atomUid, sbyte atomicNumber, string atomName, int formalCharge, float partialCharge, int occupancy, float bfactor, float x, float y, float z, bool isHetero, int atomSerial, char chainID, string group3, int groupSequenceNumber, char groupInsertionCode, float vectorX, float vectorY, float vectorZ, char alternateLocationID, object clientAtomReference) { if (modelIndex != currentModelIndex) { currentModel = mmset.getModel(modelIndex); currentModelIndex = modelIndex; currentChainID = '\uFFFF'; } if (chainID != currentChainID) { currentChainID = chainID; currentChain = currentModel.getOrAllocateChain(chainID); currentGroupInsertionCode = '\uFFFF'; } if (groupSequenceNumber != currentGroupSequenceNumber || groupInsertionCode != currentGroupInsertionCode) { currentGroupSequenceNumber = groupSequenceNumber; currentGroupInsertionCode = groupInsertionCode; startGroup(currentChain, group3, groupSequenceNumber, groupInsertionCode, atomCount); } if (atomCount == atoms.Length) growAtomArrays(); Atom atom = new Atom(this, currentModelIndex, atomCount, atomicNumber, atomName, formalCharge, partialCharge, occupancy, bfactor, x, y, z, isHetero, atomSerial, chainID, vectorX, vectorY, vectorZ, alternateLocationID, clientAtomReference); atoms[atomCount] = atom; ++atomCount; htAtomMap[atomUid] = atom; return atom; }
public void setModelNameNumberProperties(int modelIndex, string modelName, int modelNumber, NameValueCollection modelProperties) { modelNames[modelIndex] = modelName; modelNumbers[modelIndex] = modelNumber; this.modelProperties[modelIndex] = modelProperties; models[modelIndex] = new Model(this, modelIndex, modelName); }
public void initializeBuild(int atomCountEstimate) { currentModel = null; currentChainID = '\uFFFF'; currentChain = null; currentGroupInsertionCode = '\uFFFF'; if (atomCountEstimate <= 0) atomCountEstimate = ATOM_GROWTH_INCREMENT; atoms = new Atom[atomCountEstimate]; bonds = new Bond[2 * atomCountEstimate]; htAtomMap.Clear(); initializeGroupBuild(); }
public Mpsmodel(Mps enclosingInstance, Model model) { InitBlock(enclosingInstance); mpspolymers = new Mpspolymer[model.PolymerCount]; this.modelIndex = model.modelIndex; for (int i = mpspolymers.Length; --i >= 0; ) mpspolymers[i] = Enclosing_Instance.allocateMpspolymer(model.getPolymer(i)); }
public Polymer(Monomer[] monomers) { this.monomers = monomers; this.monomerCount = monomers.Length; for (int i = monomerCount; --i >= 0; ) monomers[i].Polymer = this; model = monomers[0].chain.model; model.addPolymer(this); }
// private Group[] mainchain; public Chain(Frame frame, Model model, char chainID) { this.frame = frame; this.model = model; this.chainID = chainID; }