示例#1
0
        private void distinguishAndPropogateGroup(int groupIndex, Chain chain, string group3,
                                                  int seqcode, int firstAtomIndex, int maxAtomIndex)
        {
            //    System.out.println("distinguish & propogate group:" +
            //                       " group3:" + group3 +
            //                       " seqcode:" + Group.getSeqcodeString(seqcode) +
            //                       " firstAtomIndex:" + firstAtomIndex +
            //                       " maxAtomIndex:" + maxAtomIndex);
            int distinguishingBits = 0;
            // clear previous specialAtomIndexes
            for (int i = JmolConstants.ATOMID_MAX; --i >= 0; )
                specialAtomIndexes[i] = Int32.MinValue;

            if (specialAtomIDs != null)
            {
                for (int i = maxAtomIndex; --i >= firstAtomIndex; )
                {
                    int specialAtomID = specialAtomIDs[i];
                    if (specialAtomID > 0)
                    {
                        if (specialAtomID < JmolConstants.ATOMID_DISTINGUISHING_ATOM_MAX)
                            distinguishingBits |= 1 << specialAtomID;
                        specialAtomIndexes[specialAtomID] = i;
                    }
                }
            }

            int lastAtomIndex = maxAtomIndex - 1;
            if (lastAtomIndex < firstAtomIndex)
                throw new System.NullReferenceException();
            
            Group group = null;
            //    System.out.println("distinguishingBits=" + distinguishingBits);
            if ((distinguishingBits & JmolConstants.ATOMID_PROTEIN_MASK) == JmolConstants.ATOMID_PROTEIN_MASK)
            {
                //      System.out.println("may be an AminoMonomer");
                group = AminoMonomer.validateAndAllocate(chain, group3, seqcode, firstAtomIndex, lastAtomIndex, specialAtomIndexes, atoms);
            }
            else if (distinguishingBits == JmolConstants.ATOMID_ALPHA_ONLY_MASK)
            {
                //      System.out.println("AlphaMonomer.validateAndAllocate");
                group = AlphaMonomer.validateAndAllocate(chain, group3, seqcode, firstAtomIndex, lastAtomIndex, specialAtomIndexes, atoms);
            }
            else if (((distinguishingBits & JmolConstants.ATOMID_NUCLEIC_MASK) == JmolConstants.ATOMID_NUCLEIC_MASK))
            {
                group = NucleicMonomer.validateAndAllocate(chain, group3, seqcode, firstAtomIndex, lastAtomIndex, specialAtomIndexes, atoms);
            }
            else if (distinguishingBits == JmolConstants.ATOMID_PHOSPHORUS_ONLY_MASK)
            {
                // System.out.println("PhosphorusMonomer.validateAndAllocate");
                group = PhosphorusMonomer.validateAndAllocate(chain, group3, seqcode, firstAtomIndex, lastAtomIndex, specialAtomIndexes, atoms);
            }
            if (group == null)
                group = new Group(chain, group3, seqcode, firstAtomIndex, lastAtomIndex);

            chain.addGroup(group);
            groups[groupIndex] = group;

            ////////////////////////////////////////////////////////////////
            for (int i = maxAtomIndex; --i >= firstAtomIndex; )
                atoms[i].Group = group;
        }
示例#2
0
		public static Monomer[] getNucleicMonomers(Group[] groups, int firstGroupIndex)
		{
			NucleicMonomer previous = null;
			int count = 0;
			for (int i = firstGroupIndex; i < groups.Length; ++i, ++count)
			{
				Group group = groups[i];
				if (!(group is NucleicMonomer))
					break;
				NucleicMonomer current = (NucleicMonomer) group;
				if (current.polymer != null)
					break;
				if (!current.isConnectedAfter(previous))
					break;
				previous = current;
			}
			if (count == 0)
				return null;
			Monomer[] monomers = new Monomer[count];
			for (int j = 0; j < count; ++j)
				monomers[j] = (NucleicMonomer) groups[firstGroupIndex + j];
			return monomers;
		}
示例#3
0
        public void addGroup(Group group)
		{
			if (groupCount == groups.Length)
				groups = (Group[]) Util.doubleLength(groups);
			groups[groupCount++] = group;
		}
示例#4
0
		public static Polymer allocatePolymer(Group[] groups, int firstGroupIndex)
		{
			//    System.out.println("allocatePolymer()");
			Monomer[] monomers;
			monomers = getAminoMonomers(groups, firstGroupIndex);
			if (monomers != null)
			{
				//      System.out.println("an AminoPolymer");
				return new AminoPolymer(monomers);
			}
			monomers = getAlphaMonomers(groups, firstGroupIndex);
			if (monomers != null)
			{
				//      System.out.println("an AlphaPolymer");
				return new AlphaPolymer(monomers);
			}
			monomers = getNucleicMonomers(groups, firstGroupIndex);
			if (monomers != null)
			{
				//      System.out.println("a NucleicPolymer");
				return new NucleicPolymer(monomers);
			}
			monomers = getPhosphorusMonomers(groups, firstGroupIndex);
			if (monomers != null)
			{
				//      System.out.println("an AlphaPolymer");
				return new PhosphorusPolymer(monomers);
			}
			System.Console.Out.WriteLine("Polymer.allocatePolymer() ... why am I here?");
			throw new System.NullReferenceException();
		}
示例#5
0
        public int getSelectedGroupIndex(Group group)
		{
			int selectedGroupIndex = 0;
			for (int i = 0; i < groupCount; ++i)
			{
				if (bsSelectedGroups.Get(i))
				{
					if (groups[i] == group)
						return selectedGroupIndex;
					++selectedGroupIndex;
				}
			}
			return - 1;
		}