Esempio n. 1
0
		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][];
		}
Esempio n. 2
0
        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;
		}
Esempio n. 3
0
        public void deleteBond(Bond bond)
		{
            for (int i = bonds.Length; --i >= 0; )
            {
                if (bonds[i] == bond)
                {
                    deleteBond(i);
                    return;
                }
            }
		}
Esempio n. 4
0
		private void addBond(Bond bond, Frame frame)
		{
			if (bonds == null)
			{
				bonds = new Bond[1];
				bonds[0] = bond;
			}
			else
			{
                bonds = frame.addToBonds(bond, bonds);
			}
		}
Esempio n. 5
0
        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;
		}
Esempio n. 6
0
 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;
 }
Esempio n. 7
0
 private void addBond(Bond bond)
 {
     if (bond == null)
         return;
     if (bondCount == bonds.Length)
         bonds = (Bond[])Util.setLength(bonds, bondCount + growthIncrement);
     bonds[bondCount++] = bond;
 }
Esempio n. 8
0
        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) { }
        }
Esempio n. 9
0
 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;
         }
     }
 }