source: branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/PairwiseAlignmentGenerator.java @ 1617

Last change on this file since 1617 was 1617, checked in by rkrimmel, 10 years ago

Better output of matches

File size: 2.4 KB
Line 
1package de.ugoe.cs.autoquest.tasktrees.alignment.matrix;
2
3import java.util.ArrayList;
4import java.util.Iterator;
5
6import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.AlignmentAlgorithm;
7import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.AlignmentAlgorithmFactory;
8import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.NumberSequence;
9
10public class PairwiseAlignmentGenerator {
11
12        public static PairwiseAlignmentStorage generate(
13                        ArrayList<NumberSequence> numberseqs,
14                        ObjectDistanceSubstitionMatrix submat) {
15                PairwiseAlignmentStorage alignments = new PairwiseAlignmentStorage(
16                                numberseqs.size(), numberseqs.size());
17
18                for (int i = 0; i < numberseqs.size(); i++) {
19                        NumberSequence ns1 = numberseqs.get(i);
20                        for (int j = 0; j < numberseqs.size(); j++) {
21                                NumberSequence ns2 = numberseqs.get(j);
22
23                                if (i != j) {
24                                        int smithWatermanThreshold = 10;
25                                        AlignmentAlgorithm aa = AlignmentAlgorithmFactory.create();
26                                        aa.align(ns1.getSequence(), ns2.getSequence(), submat,
27                                                        smithWatermanThreshold);
28                                        alignments.set(i, j, aa);
29
30                                        AlignmentAlgorithm sameSequence1 = AlignmentAlgorithmFactory
31                                                        .create();
32                                        sameSequence1.align(ns1.getSequence(), ns1.getSequence(),
33                                                        submat, smithWatermanThreshold);
34                                        AlignmentAlgorithm sameSequence2 = AlignmentAlgorithmFactory
35                                                        .create();
36                                        sameSequence2.align(ns2.getSequence(), ns2.getSequence(),
37                                                        submat, smithWatermanThreshold);
38                                        AlignmentAlgorithm randomSequence = AlignmentAlgorithmFactory
39                                                        .create();
40                                        randomSequence.align(ns1.shuffle().getSequence(), ns2
41                                                        .shuffle().getSequence(), submat,
42                                                        smithWatermanThreshold);
43
44                                        // Score of the aligmnment
45                                        double score = alignments.get(i, j).getAlignmentScore();
46
47                                       
48                                        // Scores of the sequence being aligned to itself (maximum
49                                        // score)
50                                        double sSelf1 = sameSequence1.getAlignmentScore();
51                                        double sSelf2 = sameSequence2.getAlignmentScore();
52                                        // Score of sequences shuffled before aligned
53                                        double sRand = randomSequence.getAlignmentScore();
54
55                                        double sMax = (sSelf1 + sSelf2) / 2;
56                                        double sEff = (score - sRand) / (sMax - sRand);
57                                        if (sEff < 0) {
58                                                sEff = 0;
59                                        }
60                                        double distance = -Math.log(sEff);
61
62                                        if (!Double.isInfinite(distance) && !Double.isNaN(distance)) {
63                                                if (distance < alignments.getDistance(i, j)) {
64                                                        alignments.setDistance(i, j, distance);
65                                                }
66                                        }
67                                }
68                        }
69                }
70                return alignments;
71        }
72}
Note: See TracBrowser for help on using the repository browser.