All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.biojava.nbio.structure.symmetry.internal.ResidueGroup Maven / Gradle / Ivy

There is a newer version: 7.1.3
Show newest version
/*
 *                    BioJava development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 */
package org.biojava.nbio.structure.symmetry.internal;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

/**
 * A ResidueGroup is a set of residues that are part of a maximally connected
 * component of the self-Alignment Graph in symmetry analysis.
 * 

* This class provides an interface for comparing and combining them to refine * self-Alignments into consistent MultipleAlignments of repeats. * * @author Aleix Lafita * @since 4.2.0 * */ public class ResidueGroup { private final List residues; /** * Create a ResidueGroup object from a maximally connected component. * * @param component * set of residues connected */ public ResidueGroup(Set component) { // Transform component into sorted List of residues residues = new ArrayList<>(component); Collections.sort(residues); } /** * The order of symmetry of the group is the number of connected residues. * * @return size of residues List */ public int order() { return residues.size(); } /** * Determine if two Residuegroups (maximally connected components of the * alignment Graph) are compatible, based in the following criterion: * *

	 * Two maximally connected components of the self-alignment Graph are
	 * compatible if they can be combined in a consistent multiple alignment
	 * of repeats, i.e.there exists one residue in c1 between each sorted
	 * pair of residues in c2.
	 * 
* * Compatibility is an intransitive relation, which means that for three * ResidueGroups {A,B,C}, if A is compatible with B and B is compatible with * C, then A is not necessarily compatible with C. * * @param c2 * second maximally connected component * @return true if compatible, false otherwise */ public boolean isCompatible(ResidueGroup other) { // Same order needed is necessary if (this.order() != other.order()) return false; // Use the method of the smallest ResidueGroup if (this.residues.get(0) > other.residues.get(0)) return other.isCompatible(this); // Check for intercalation of residues for (int i = 0; i < order() - 1; i++) { if (other.residues.get(i) > residues.get(i + 1)) return false; if (residues.get(i) > other.residues.get(i + 1)) return false; } return true; } /** * Combine the ResidueGroup with the alignment block. * * @param alignRes * the alignment block, will be modified. */ public void combineWith(List> alignRes) { for (int i = 0; i < order(); i++) alignRes.get(i).add(residues.get(i)); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy