private void InitBlock() { specialAtomIndexes = new int[JmolConstants.ATOMID_MAX]; shapes = new Shape[JmolConstants.SHAPE_MAX]; withinModelIterator = new WithinModelIterator(this); withinAnyModelIterator = new WithinAnyModelIterator(this); hbondMin2 = hbondMin * hbondMin; for (int i = MAX_BONDS_LENGTH_TO_CACHE; --i > 0; ) // .GT. 0 freeBonds[i] = new Bond[MAX_NUM_TO_CACHE][]; }
public void deleteBond(int i) { int newLength = bonds.Length - 1; if (newLength == 0) { bonds = null; return ; } Bond[] bondsNew = new Bond[newLength]; int j = 0; for (; j < i; ++j) bondsNew[j] = bonds[j]; for (; j < newLength; ++j) bondsNew[j] = bonds[j + 1]; bonds = bondsNew; }
public void deleteBond(Bond bond) { for (int i = bonds.Length; --i >= 0; ) { if (bonds[i] == bond) { deleteBond(i); return; } } }
private void addBond(Bond bond, Frame frame) { if (bonds == null) { bonds = new Bond[1]; bonds[0] = bond; } else { bonds = frame.addToBonds(bond, bonds); } }
public Bond bondMutually(Atom atomOther, short order, Frame frame) { if (isBonded(atomOther)) return null; Bond bond = new Bond(this, atomOther, order, frame); addBond(bond, frame); atomOther.addBond(bond, frame); return bond; }
public Bond[] addToBonds(Bond newBond, Bond[] oldBonds) { Bond[] newBonds; if (oldBonds == null) { if (numCached[1] > 0) newBonds = freeBonds[1][--numCached[1]]; else newBonds = new Bond[1]; newBonds[0] = newBond; } else { int oldLength = oldBonds.Length; int newLength = oldLength + 1; if (newLength < MAX_BONDS_LENGTH_TO_CACHE && numCached[newLength] > 0) newBonds = freeBonds[newLength][--numCached[newLength]]; else newBonds = new Bond[newLength]; newBonds[oldLength] = newBond; for (int i = oldLength; --i >= 0; ) newBonds[i] = oldBonds[i]; if (oldLength < MAX_BONDS_LENGTH_TO_CACHE && numCached[oldLength] < MAX_NUM_TO_CACHE) freeBonds[oldLength][numCached[oldLength]++] = oldBonds; } return newBonds; }
private void addBond(Bond bond) { if (bond == null) return; if (bondCount == bonds.Length) bonds = (Bond[])Util.setLength(bonds, bondCount + growthIncrement); bonds[bondCount++] = bond; }
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) { } }
public void deleteBond(Bond bond) { // what a disaster ... I hate doing this for (int i = bondCount; --i >= 0; ) { if (bonds[i] == bond) { bonds[i].deleteAtomReferences(); Array.Copy(bonds, i + 1, bonds, i, bondCount - i - 1); --bondCount; bonds[bondCount] = null; return; } } }