private static void toPDB(Group g, StringBuffer str) { // iterate over all atoms ... // format output ... int groupsize = g.size(); for ( int atompos = 0 ; atompos < groupsize; atompos++) { Atom a = null ; a = g.getAtom(atompos); if ( a == null) continue ; toPDB(a, str); //line = record + serial + " " + fullname +altLoc //+ leftResName + " " + chainID + resseq //+ " " + x+y+z //+ occupancy + tempfactor; //str.append(line + newline); //System.out.println(line); } if ( g.hasAltLoc()){ for (Group alt : g.getAltLocs() ) { toPDB(alt,str); } } }
List<Atom> atoms = currentGroup.getAtoms(); if ( atoms.size() > 0) { Atom a1 = atoms.get(0); List<Group> altLocs = currentGroup.getAltLocs(); for ( Group altLocG : altLocs ){ atoms = altLocG.getAtoms(); if ( atoms.size() > 0) { for ( Atom a1 : atoms) { if ( groupCode3.equals(currentGroup.getPDBName())) { if ( currentGroup.getAtoms().size() == 0) { Group altLocG = (Group) currentGroup.clone(); altLocG.setAtoms(new ArrayList<Atom>()); altLocG.getAltLocs().clear(); currentGroup.addAltLoc(altLocG); return altLocG; altLocG.setPDBName(groupCode3); altLocG.setResidueNumber(currentGroup.getResidueNumber()); currentGroup.addAltLoc(altLocG); return altLocG;
/** * Cleans up the structure's alternate location (altloc) groups. All alternate location groups should have all atoms (except * in the case of microheterogenity) or when a deuterium exists. * Ensure that all the alt loc groups have all the atoms in the main group. * @param structure The Structure to be cleaned up */ public static void cleanUpAltLocs(Structure structure) { for (int i =0; i< structure.nrModels() ; i++){ for (Chain chain : structure.getModel(i)) { for (Group group : chain.getAtomGroups()) { for (Group altLocGroup : group.getAltLocs()) { for ( Atom groupAtom : group.getAtoms()) { // If this alt loc doesn't have this atom if (! altLocGroup.hasAtom(groupAtom.getName())) { // Fix for microheterogenity if (altLocGroup.getPDBName().equals(group.getPDBName())) { // If it's a Hydrogen then we check for it's Deuterated brother if(!hasDeuteratedEquiv(groupAtom, altLocGroup)){ altLocGroup.addAtom(groupAtom); } } } } } } } } }
/** * * @param group a {@link Group} in structure. * @param isAminoAcid true if it is an amino acid. * @return the {@link StructureGroup} of the group. */ public static StructureGroup getStructureGroup(Group group, boolean isAminoAcid) { ResidueNumber resNum = group.getResidueNumber(); return new StructureGroup(resNum, group.getPDBName(), isAminoAcid); }
/** * Returns true if the given group is part of the main chain, i.e. if it is * a peptide-linked group or a nucleotide * @param g * @return */ private static boolean isInChain(Group g) { ChemComp chemComp = g.getChemComp(); if (chemComp==null) { logger.warn("Warning: can't determine PolymerType for group "+g.getResidueNumber()+" ("+g.getPDBName()+"). Will consider it as non-nucleotide/non-protein type."); return false; } PolymerType polyType = chemComp.getPolymerType(); for (PolymerType protOnlyType: PolymerType.PROTEIN_ONLY) { if (polyType==protOnlyType) return true; } for (PolymerType protOnlyType: PolymerType.POLYNUCLEOTIDE_ONLY) { if (polyType==protOnlyType) return true; } return false; }
/** * Get a list of atoms for a group. Only add each atom once. * @param inputGroup the Biojava Group to consider * @return the atoms for the input Biojava Group */ public static List<Atom> getAtomsForGroup(Group inputGroup) { Set<Atom> uniqueAtoms = new HashSet<Atom>(); List<Atom> theseAtoms = new ArrayList<Atom>(); for(Atom a: inputGroup.getAtoms()){ theseAtoms.add(a); uniqueAtoms.add(a); } List<Group> altLocs = inputGroup.getAltLocs(); for(Group thisG: altLocs){ for(Atom a: thisG.getAtoms()){ if(uniqueAtoms.contains(a)){ continue; } theseAtoms.add(a); } } return theseAtoms; }
currentGroup.setPDBName(groupCode3); currentGroup.setResidueNumber(residueNumber); currentGroup.setHetAtomInFile(isHetAtomInFile); if ( ! residueNumber.equals(currentGroup.getResidueNumber())) { currentGroup.trimToSize(); currentGroup.setPDBName(groupCode3); currentGroup.setResidueNumber(residueNumber); currentGroup.setHetAtomInFile(isHetAtomInFile); logger.debug("found altLoc! " + currentGroup + " " + altGroup); altGroup = getCorrectAltLocGroup( altLoc,recordName,aminoCode1,groupCode3); if ( altGroup.getChain() == null) { altGroup.setChain(currentChain); if (currentGroup.getChemComp() != null) { for (ChemCompAtom a : currentGroup.getChemComp().getAtoms()) { if (a.getAtom_id().equals(fullname.trim())) { elementSymbol = a.getType_symbol(); + "Assigning generic element R to it", fullname.trim(), currentGroup.getPDBName()); } else { try { altGroup.addAtom(atom); altGroup = null;
.filter( (g) -> !g.isWater() ) // ignore waters .filter( (g) -> !g.isPolymeric() ) // already shouldn't be polymeric, but filter anyways .filter( (g) -> grid.hasAnyContact(Calc.atomsToPoints(g.getAtoms())) ) // must contact reduced try { wasAdded = reduced.findGroup(g.getChainId(), g.getResidueNumber().toString(), toModel) != null; } catch (StructureException e) { logger.info("Adding ligand group {} {} by proximity",g.getPDBName(), g.getResidueNumber().toPDB()); return StructureTools.addGroupToStructure(reduced, g, toModel, guess, false);
if ( g.hasAminoAtoms()) { sg.setResidueNumber(g.getResidueNumber()); sg.setPDBFlag(true); sg.setPDBName(g.getPDBName()); sg.setChain(g.getChain()); Atom N = g.getAtom(StructureTools.N_ATOM_NAME); Atom CA = g.getAtom(StructureTools.CA_ATOM_NAME); Atom C = g.getAtom(StructureTools.C_ATOM_NAME); Atom O = g.getAtom(StructureTools.O_ATOM_NAME); if ( N == null || CA == null || C == null || O == null) continue;
int resnum = parent.getResidueNumber().getSeqNum(); if (resnum < 10) buf.append(" "); buf.append(" "); buf.append(resnum); Character insCode = parent.getResidueNumber().getInsCode(); if (insCode != null) buf.append(insCode); else buf.append(" "); buf.append(parent.getChainId()); if (parent.getChainId().length() == 1) buf.append(" "); char aaLetter = StructureTools.get1LetterCode(parent.getPDBName()); buf.append(aaLetter).append(" "); Atom ca = parent.getAtom("CA"); buf.append(String.format("%6.1f %6.1f %6.1f", ca.getX(), ca.getY(), ca.getZ()));
public void addGroup(Group group) { group.setChain(this); for(Group g : group.getAltLocs()) { g.setChain(this); ResidueNumber resNum = group.getResidueNumber(); if ( resNum != null) pdbResnum = resNum.toString(); pdbResnum, group.getPDBName(), getChainID(), groups.get(pdbResnumMap.get(pdbResnum)).getResidueNumber(), groups.get(pdbResnumMap.get(pdbResnum)).getPDBName()); if ( group instanceof AminoAcid) pdbResnumMap.put(pdbResnum,pos);
if (g.hasAminoAtoms()) { Object p = g.getProperty(Group.SEC_STRUC); if (p == null) continue; if (ss.type == type && chainId == g.getChainId()) { previous = g.getResidueNumber(); count++; continue; start = g.getResidueNumber(); previous = start; chainId = g.getChainId(); count = 1; start = g.getResidueNumber(); previous = start; chainId = g.getChainId(); count = 1;
if (!bond.getAtomA().getGroup().getPDBName().equals("CYS") || !bond.getAtomB().getGroup().getPDBName().equals("CYS") ) { ssbond.setChainID1(bond.getAtomA().getGroup().getChainId()); ssbond.setChainID2(bond.getAtomB().getGroup().getChainId()); ssbond.setResnum1(String.valueOf(bond.getAtomA().getGroup().getResidueNumber().getSeqNum())); ssbond.setResnum2(String.valueOf(bond.getAtomB().getGroup().getResidueNumber().getSeqNum())); Character iCode1 = bond.getAtomA().getGroup().getResidueNumber().getInsCode(); if (iCode1 == null) iCode1 = ' '; Character iCode2 = bond.getAtomB().getGroup().getResidueNumber().getInsCode(); if (iCode2 == null) iCode2 = ' ';
private static CharSequence getPDBPos(Atom atom) { Group g = atom.getGroup(); if ( g!= null){ Chain c = g.getChain(); if (c != null){ return g.getResidueNumber().toString()+":" + c.getName() ; //return g.getPDBCode()+":" + c.getName() + "." + getOneLetter(g) ; } } return "!"; }
private String getHeader(Group thisGroup) { // Make the header info for the start of the block StringBuilder sb = new StringBuilder(); sb.append(thisGroup.getPDBName()).append("\n"); sb.append("Made by BioJava"); sb.append("\n"); return sb.toString(); } }
atom.setCharge((short) charge); if (altGroup == null) { group.addAtom(atom); } else { altGroup.setChain(chain); altGroup.addAtom(atom); if (!group.hasAtom(atom.getName())) { if (group.getPDBName().equals(atom.getGroup().getPDBName())) { group.addAtom(atom);
g.getChainId(), g.getResidueNumber().toString(), g.getChain().getStructure().getPDBCode() ); continue; ca[seqIndex] = g.getResidueNumber(); //remains null for gaps
/** * Copies the first length atoms from the input array * @param ca The array to copy * @param length the number of atoms to copy * @param clone If true, preform a deep copy, cloning the underlying Groups * @return An array with the first length items of ca, possibly cloning the Atoms. * @throws StructureException */ private Atom[] getAtoms(Atom[] ca, int length, boolean clone) throws StructureException{ List<Atom> atoms = new ArrayList<Atom>(); for ( int i = 0 ; i < length ; i++){ Atom a; if ( clone ){ Group g = (Group)ca[i].getGroup().clone(); a = g.getAtom(ca[i].getName()); } else { a = ca[i]; } atoms.add(a); } return atoms.toArray(new Atom[atoms.size()]); }