--- /dev/null
+package jalview.analysis;
+
+
+/**
+ * A data bean to hold the result of computing a profile for a column of an
+ * alignment
+ *
+ * @author gmcarstairs
+ *
+ */
+public class Profile
+{
+ /*
+ * counts of keys (chars)
+ */
+ private ResidueCount counts;
+
+ /*
+ * the number of sequences in the profile
+ */
+ private int height;
+
+ /*
+ * the number of non-gapped sequences in the profile
+ */
+ private int gapped;
+
+ /*
+ * the highest count for any residue in the profile
+ */
+ private int maxCount;
+
+ /*
+ * the residue (e.g. K) or residues (e.g. KQW) with the
+ * highest count in the profile
+ */
+ private String modalResidue;
+
+ /**
+ * Constructor which allows derived data to be stored without having to store
+ * the full profile
+ *
+ * @param seqCount
+ * the number of sequences in the profile
+ * @param gaps
+ * the number of gapped sequences
+ * @param max
+ * the highest count for any residue
+ * @param modalres
+ * the residue (or concatenated residues) with the highest count
+ */
+ public Profile(int seqCount, int gaps, int max, String modalRes)
+ {
+ this.height = seqCount;
+ this.gapped = gaps;
+ this.maxCount = max;
+ this.modalResidue = modalRes;
+ }
+
+ /**
+ * Set the full profile of counts
+ *
+ * @param residueCounts
+ */
+ public void setCounts(ResidueCount residueCounts)
+ {
+ this.counts = residueCounts;
+ }
+
+ /**
+ * Returns the percentage identity of the profile, i.e. the highest proportion
+ * of conserved (equal) symbols. The percentage is as a fraction of all
+ * sequences, or only ungapped sequences if flag ignoreGaps is set true.
+ *
+ * @param ignoreGaps
+ * @return
+ */
+ public float getPercentageIdentity(boolean ignoreGaps)
+ {
+ if (height == 0)
+ {
+ return 0f;
+ }
+ float pid = 0f;
+ if (ignoreGaps && gapped < height)
+ {
+ pid = (maxCount * 100f) / (height - gapped);
+ }
+ else
+ {
+ pid = (maxCount * 100f) / height;
+ }
+ return pid;
+ }
+
+ /**
+ * Returns the full symbol counts for this profile
+ *
+ * @return
+ */
+ public ResidueCount getCounts()
+ {
+ return counts;
+ }
+
+ /**
+ * Returns the number of sequences in the profile
+ *
+ * @return
+ */
+ public int getHeight()
+ {
+ return height;
+ }
+
+ /**
+ * Returns the number of sequences in the profile which had a gap character
+ * (or were too short to be included in this column's profile)
+ *
+ * @return
+ */
+ public int getGapped()
+ {
+ return gapped;
+ }
+
+ /**
+ * Returns the highest count for any symbol(s) in the profile
+ *
+ * @return
+ */
+ public int getMaxCount()
+ {
+ return maxCount;
+ }
+
+ /**
+ * Returns the symbol (or concatenated symbols) which have the highest count
+ * in the profile, or an empty string if there were no symbols counted
+ *
+ * @return
+ */
+ public String getModalResidue()
+ {
+ return modalResidue;
+ }
+
+ /**
+ * Answers the number of non-gapped sequences in the profile
+ *
+ * @return
+ */
+ public int getNonGapped()
+ {
+ return height - gapped;
+ }
+}