Skip to content

Commit 2850758

Browse files
committed
Set AFPChain constructor algorithm name to unknown
Implement a writer method to display the transformation matrices for MultipleAlignments.
1 parent 01a8db4 commit 2850758

File tree

5 files changed

+63
-15
lines changed

5 files changed

+63
-15
lines changed

biojava-structure-gui/src/main/java/org/biojava/nbio/structure/align/gui/jmol/MultipleAlignmentJmol.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,8 @@ public void actionPerformed(ActionEvent e) {
345345
System.err.println("Currently not viewing an alignment!");
346346
return;
347347
}
348-
String result = MultipleAlignmentWriter.toFatCat(multAln) ;
348+
String result = MultipleAlignmentWriter.toFatCat(multAln);
349+
result += "\n"+MultipleAlignmentWriter.toTransformMatrices(multAln);
349350
MultipleAlignmentDisplay.showAlignmentImage(multAln, result);
350351
}
351352
}

biojava-structure/src/main/java/org/biojava/nbio/structure/align/model/AFPChain.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ private void init(){
479479
myResultsEQR = -1;
480480
myResultsSimilarity1 = -1;
481481
myResultsSimilarity2 = -1;
482-
algorithmName = DEFAULT_ALGORITHM_NAME ;
482+
algorithmName = "unknown";
483483
version = "1.0";
484484
sequentialAlignment = true;
485485
distanceMatrix = null;

biojava-structure/src/main/java/org/biojava/nbio/structure/align/multiple/MultipleAlignmentTools.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ public static List<String> getSequenceAlignment(MultipleAlignment alignment, Lis
8383

8484
//Loop through all the alignment Blocks in the order given
8585
for (int b=0; b<alignment.getBlocks().size(); b++){
86+
if (b!=0){
87+
//Add a gap to all structures in order to separate visually the blocks in the alignment
88+
for (int str=0; str<alignment.size(); str++) alnSequences.set(str,alnSequences.get(str).concat("-"));
89+
mapSeqToStruct.add(-1); //means no aligned position
90+
}
8691
//Store the previous position added to the sequence alignment for this structure
8792
int[] previousPos = new int[alignment.size()];
8893
Arrays.fill(previousPos, -1);
@@ -159,12 +164,16 @@ else if (previousPos[str]+1 == residue){
159164
allGaps = true;
160165
for (int str=0; str<alignment.size(); str++){
161166
if (previousPos[str]+1 < blockEnds[str]){
162-
alnSequences.set(str,alnSequences.get(str).concat(""+Character.toLowerCase(StructureTools.get1LetterCode(atoms.get(str)[previousPos[str]+1].getGroup().getPDBName()))) );
167+
provisionalChar[str] = Character.toLowerCase(StructureTools.get1LetterCode(atoms.get(str)[previousPos[str]+1].getGroup().getPDBName()));
163168
previousPos[str]++;
164169
allGaps = false;
165-
} else alnSequences.set(str,alnSequences.get(str).concat("-"));
170+
} else provisionalChar[str] = '-';
171+
}
172+
if (!allGaps){
173+
for (int str=0; str<alignment.size(); str++)
174+
alnSequences.set(str,alnSequences.get(str).concat(""+provisionalChar[str]));
175+
mapSeqToStruct.add(-1);
166176
}
167-
mapSeqToStruct.add(-1);
168177
}
169178
}
170179
return alnSequences;

biojava-structure/src/main/java/org/biojava/nbio/structure/align/multiple/MultipleAlignmentWriter.java

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import java.util.ArrayList;
55
import java.util.List;
66

7+
import javax.vecmath.Matrix4d;
8+
79
import org.biojava.nbio.structure.Atom;
10+
import org.biojava.nbio.structure.align.model.AFPChain;
11+
import org.biojava.nbio.structure.jama.Matrix;
812

913
/**
1014
* This class contains functions for the conversion of {@link MultipleAlignment} to various String outputs.
@@ -71,12 +75,12 @@ public static String toFatCat(MultipleAlignment alignment) {
7175
}
7276

7377
/**
74-
* Prints the alignment in the simplest form: a list of groups of aligned residues.
78+
* Converts the alignment to its simplest form: a list of groups of aligned residues.
7579
* Format is one line per residue group, tab delimited:
76-
* <ul><li>PDB number. Includes insertion code</li>
77-
* <li>Chain.</li>
78-
* <li>Amino Acid. Three letter code.</li>
79-
* </ul>
80+
* <ul><li>PDB number (includes insertion code)
81+
* <li>Chain
82+
* <li>Amino Acid (three letter code)
83+
* </li></ul>
8084
* Example:
8185
* <code>52 A ALA 102 A VAL 154 A THR</code>
8286
* <p>Note that this format loses information about blocks.
@@ -125,4 +129,38 @@ public static String toAlignedResidues(MultipleAlignment multAln) {
125129
}
126130
return residueGroup.toString();
127131
}
132+
133+
/**
134+
* Converts the transformation Matrices of the alignment into a String output.
135+
* @param afpChain
136+
* @return String transformation Matrices
137+
*/
138+
public static String toTransformMatrices(MultipleAlignment alignment) {
139+
140+
StringBuffer txt = new StringBuffer();
141+
142+
for (int bs = 0; bs < alignment.getBlockSets().size(); bs++){
143+
144+
List<Matrix4d> btransforms = alignment.getBlockSets().get(bs).getTransformations();
145+
if (btransforms == null || btransforms.size() < 1) continue;
146+
147+
if (alignment.getBlockSets().size() > 1) {
148+
txt.append("Operations for block " );
149+
txt.append(bs+1);
150+
txt.append("\n");
151+
}
152+
153+
for (int str=0; str<alignment.size(); str++){
154+
String origString = "ref";
155+
156+
txt.append(String.format(" X"+(str+1)+" = (%9.6f)*X"+ origString +" + (%9.6f)*Y"+ origString +" + (%9.6f)*Z"+ origString +" + (%12.6f)",btransforms.get(str).getElement(0,0),btransforms.get(str).getElement(0,1), btransforms.get(str).getElement(0,2), btransforms.get(str).getElement(0,3)));
157+
txt.append( "\n");
158+
txt.append(String.format(" Y"+(str+1)+" = (%9.6f)*X"+ origString +" + (%9.6f)*Y"+ origString +" + (%9.6f)*Z"+ origString +" + (%12.6f)",btransforms.get(str).getElement(1,0),btransforms.get(str).getElement(1,1), btransforms.get(str).getElement(1,2), btransforms.get(str).getElement(1,3)));
159+
txt.append( "\n");
160+
txt.append(String.format(" Z"+(str+1)+" = (%9.6f)*X"+ origString +" + (%9.6f)*Y"+ origString +" + (%9.6f)*Z"+ origString +" + (%12.6f)",btransforms.get(str).getElement(2,0),btransforms.get(str).getElement(2,1), btransforms.get(str).getElement(2,2), btransforms.get(str).getElement(2,3)));
161+
txt.append("\n\n");
162+
}
163+
}
164+
return txt.toString();
165+
}
128166
}

biojava-structure/src/test/java/org/biojava/nbio/structure/align/multiple/MultipleAlignmentWriterTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
* Currently tested:
2424
* <ul><li>FASTA
2525
* <li>FatCat format
26-
* <li>Aligned Pairs
26+
* <li>Aligned Residues
2727
* </ul>
2828
*
2929
* @author Aleix Lafita
@@ -40,11 +40,11 @@ public void testFASTA() throws StructureException, IOException{
4040

4141
StringBuffer expected = new StringBuffer();
4242
expected.append(">2gox\n");
43-
expected.append("---S-tDaErLkhl--IvTpSgAgeq----NmIgMtPt-viAv---HyL-dEt-eqWe-\n");
43+
expected.append("---S-tDaErLkhl--IvTpSgAgeq----NmIgMtPt-viAv---HyL-dEt-eqWe\n");
4444
expected.append(">2gox\n");
45-
expected.append("GsrS-tDAeRLkh--LiVTpSGaGEqn---MiGMtPTviA-vh--YlDE-tEqwE-Kf-\n");
45+
expected.append("GsrS-tDAeRLkh--LiVTpSGaGEqn---MiGMtPTviA-vh--YlDE-tEqwE-Kf\n");
4646
expected.append(">2gox\n");
47-
expected.append("GS-rsTDaERLkhl-IvTPSgAGEqnmig--MTPtVIavH-Yld-ETEqwEKf-G-LE-\n");
47+
expected.append("GS-rsTDaERLkhl-IvTPSgAGEqnmig--MTPtVIavH-Yld-ETEqwEKf-G-LE\n");
4848

4949
assertEquals(result,expected.toString());
5050

@@ -57,7 +57,7 @@ public void testFatCat(){
5757
}
5858

5959
@Test
60-
public void testAlignedPairs(){
60+
public void testAlignedResidues(){
6161

6262
}
6363

0 commit comments

Comments
 (0)