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; }
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; }
public void addGroup(Group group) { if (groupCount == groups.Length) groups = (Group[]) Util.doubleLength(groups); groups[groupCount++] = group; }
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(); }
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; }