- added experimental key binding for 'a' for the AlignmentEditor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / molecular / AlignmentEditor.java
1 // $Id$
2 /**
3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.editor.molecular;
11
12
13 import info.bioinfweb.commons.bio.biojava3.alignment.SimpleAlignment;
14 import info.bioinfweb.commons.bio.biojava3.alignment.template.Alignment;
15 import info.bioinfweb.commons.bio.biojava3.core.sequence.compound.AlignmentAmbiguityNucleotideCompoundSet;
16 import info.bioinfweb.libralign.AlignmentArea;
17 import info.bioinfweb.libralign.dataarea.implementations.ConsensusSequenceArea;
18 import info.bioinfweb.libralign.dataarea.implementations.SequenceIndexArea;
19 import info.bioinfweb.libralign.dataarea.implementations.pherogram.PherogramArea;
20 import info.bioinfweb.libralign.pherogram.BioJavaPherogramProvider;
21 import info.bioinfweb.libralign.pherogram.PherogramProvider;
22 import info.bioinfweb.libralign.pherogram.ReverseComplementPherogramProvider;
23 import info.bioinfweb.libralign.sequenceprovider.implementations.BioJavaSequenceDataProvider;
24 import info.bioinfweb.libralign.sequenceprovider.tokenset.BioJavaTokenSet;
25
26 import java.io.File;
27
28 import org.biojava.bio.chromatogram.ChromatogramFactory;
29 import org.biojava3.core.sequence.DNASequence;
30 import org.biojava3.core.sequence.compound.NucleotideCompound;
31 import org.eclipse.core.runtime.IProgressMonitor;
32 import org.eclipse.swt.SWT;
33 import org.eclipse.swt.widgets.Composite;
34 import org.eclipse.ui.IEditorInput;
35 import org.eclipse.ui.IEditorSite;
36 import org.eclipse.ui.PartInitException;
37 import org.eclipse.ui.part.EditorPart;
38
39
40
41 /**
42 * Editor component to edit a contig alignment used to combine different overlapping pherograms from Sanger sequencing to
43 * a consensus sequence.
44 * <p>
45 * The contained GUI components used to edit the alignment come from <a href="http://bioinfweb.info/LibrAlign/">LibrAlign</a>.
46 *
47 * @author pplitzner
48 * @author Ben Stöver
49 * @date 04.08.2014
50 */
51 public class AlignmentEditor extends EditorPart {
52 public static final String ID = "eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor";
53
54 private AlignmentArea alignmentArea;
55
56
57 private AlignmentArea createAlignmentArea() {
58 try {
59 //ResourcesPlugin.getWorkspace().getRoot().getFile("/eu.etaxonomy.taxeditor.editor/src/main/resources/TestPherogram_qualityScore.scf");
60 //System.out.println(AlignmentEditor.class.getResource("/"));
61 //System.out.println(AlignmentEditor.class.getResource("/../resources/TestPherogram_qualityScore.scf"));
62 // BioJavaPherogramProvider pherogramProvider = new BioJavaPherogramProvider(ChromatogramFactory.create(
63 // new File("D:\\Users\\BenStoever\\Documents\\Studium\\Projekte\\Promotion\\EDITor\\Quelltexte\\LibrAlign branch\\Repository\\eu.etaxonomy.taxeditor.editor\\src\\main\\resources\\TestPherogram_qualityScore.scf")));
64 //TODO Replace this absolute path with a path working with every workspace location.
65
66 Alignment<DNASequence, NucleotideCompound> alignment =
67 new SimpleAlignment<DNASequence, NucleotideCompound>();
68 alignment.add("Read 1", new DNASequence("TAAGATACAACAAGGTTTCGGGCA-CCTTATCCACGCAGTAAGGGGATCAGAGGTTTTTCTCTCATTCATGTATCGTGGATCAGTAAGGCAATTTTGCTACCCTGTCTGCTCTTTCTAGCATTTTACTAATGCCCCAGAAATTAGGAATAAAGATTTTATATGAAAGAAAGGGCGAATTAATTCATAAGGGACTGGTATCCATTCTTATTTGATTTGATACATTGTATCCATTAACATTACATTGGCGAATTGGGCGAAGGTGCGGAAAGAGAGGGATTCGAACCCTCGGTAAACAAAAGTCTACATAGCAGTTCCAATGCTACGCCTTGAACCACTCGGCCACCTCTCCTACATAAGGATTTTGGTCCCAAACCAAAAAGAGGGAGTTGTTCAAATTAGATTCTTAGGTAGGTCCGGACAACGAATTCAAATGAATAAGGTAAGGGGACATCCCCCCTCCCTCCCCTTTGTTTTTTTCTTTATTTGGTTAGGGCGGGGGACTCGACTCTTATTGAATTTTCATATGTATCACAGCTCGAAACGAAAGAACTCGTGGGGGGGTCGTTTCCTTTTTGGATCTTGAACGACTAGGTTCAAGAGATGAGAGAATTCAGGATACCCACAAGAAAGACTAATCCAATCCATAACGATGTACCAGAAAAGACAATATTTTTATTACCTGACCA"));
69 alignment.add("Read 2", new DNASequence("TAAGATACAACAAGGTTTCGGGCAACCTTATCCACGCAGTAAGGGGATCAGAGGTTTTTCTCTCATTCATGTATCGTGGATCAGTAAGGCAATTTTGCTACCCTGTCTGCTCTTTCTAGCATTTTACTAATGCCCCAGAAATTAGGAATAAAGATTTTATATGAAAGAAAGGGCGAATTAATTCATAAGGGACTGGTATCCATTCTTATTTGATTTGATACATTGTATCCATTAACATTACATTGGCGAATTGGGCGAAGGTGCGGAAAGAGAGGGATTCGAACCCTCGGTAAACAAAAGTCTACATAGCAGTTCCAATGCTACGCCTTGAACCACTCGGCCACCTCTCCTACATAAGGATTTTGGTCCCAAACCAAAAAGAGGGAGTTGTTCAAATTAGATTCTTAGGTAGGTCCGGACAACGAATTCAAATGAATAAGGTAAGGGGACATCCCCCCTCCCTCCCCTTTGTTTTTTTCTTTATTTGGTTAGGGCGGGGGACTCGACTCTTATTGAATTTTCATATGTATCACAGCTCGAAACGAAAGAACTCGTGGGGGGGTCGTTTCCTTTTTGGATCTTGAACGACTAGGTTCAAGAGATGAGAGAATTCAGGATACCCACAAGAAAGACTAATCCAATCCATAACGATGTACCAGAAAAGACAATATTTTTATTACCTGACCA"));
70 //alignment.add("Consensus edit 1", new DNASequence("TAAGATACAACAAGGTTTCGGGCAACCTTATCCACGCAGTAAGGGGATCAGAGGTTTTTCTCTCATTCATGTATCGTGGATCAGTAAGGCAATTTTGCTACCCTGTCTGCTCTTTCTAGCATTTTACTAATGCCCCAGAAATTAGGAATAAAGATTTTATATGAAAGAAAGGGCGAATTAATTCATAAGGGACTGGTATCCATTCTTATTTGATTTGATACATTGTATCCATTAACATTACATTGGCGAATTGGGCGAAGGTGCGGAAAGAGAGGGATTCGAACCCTCGGTAAACAAAAGTCTACATAGCAGTTCCAATGCTACGCCTTGAACCACTCGGCCACCTCTCCTACATAAGGATTTTGGTCCCAAACCAAAAAGAGGGAGTTGTTCAAATTAGATTCTTAGGTAGGTCCGGACAACGAATTCAAATGAATAAGGTAAGGGGACATCCCCCCTCCCTCCCCTTTGTTTTTTTCTTTATTTGGTTAGGGCGGGGGACTCGACTCTTATTGAATTTTCATATGTATCACAGCTCGAAACGAAAGAACTCGTGGGGGGGTCGTTTCCTTTTTGGATCTTGAACGACTAGGTTCAAGAGATGAGAGAATTCAGGATACCCACAAGAAAGACTAATCCAATCCATAACGATGTACCAGAAAAGACAATATTTTTATTACCTGACCA"));
71
72 // StringBuffer seqBuffer = new StringBuffer(pherogramProvider.getSequenceLength());
73 // for (int i = 1; i <= pherogramProvider.getSequenceLength(); i++) {
74 // seqBuffer.append(pherogramProvider.getBaseCall(i).getUpperedBase());
75 // }
76 // alignment.add("Sequence 4", new DNASequence("-----" + seqBuffer.substring(0, 38) +
77 // seqBuffer.substring(39, 49) + "--" + seqBuffer.substring(49))); // One A is deleted for shift change specified below.
78
79 BioJavaSequenceDataProvider<DNASequence, NucleotideCompound> sequenceProvider =
80 new BioJavaSequenceDataProvider<DNASequence, NucleotideCompound>(
81 new BioJavaTokenSet<NucleotideCompound>(
82 AlignmentAmbiguityNucleotideCompoundSet.getAlignmentAmbiguityNucleotideCompoundSet()),
83 alignment);
84
85 AlignmentArea result = new AlignmentArea();
86 result.getContentArea().setSequenceProvider(sequenceProvider, false);
87 SequenceIndexArea sequenceIndexArea = new SequenceIndexArea(result.getContentArea());
88 //sequenceIndexArea.setFirstIndex(5);
89 //sequenceIndexArea.setHeight(25);
90 result.getContentArea().getDataAreas().getTopAreas().add(sequenceIndexArea);
91
92 // PherogramArea pherogramArea = new PherogramArea(result, pherogramProvider);
93 // pherogramArea.setFirstSeqPos(34 + 5);
94 // pherogramArea.setLeftCutPosition(34);
95 // pherogramArea.setRightCutPosition(820);
96 // pherogramArea.getAlignmentModel().setShiftChange(38, -1);
97 // pherogramArea.getAlignmentModel().setShiftChange(49, 2);
98 // result.getDataAreas().getSequenceAreas(sequenceProvider.sequenceIDByName("Sequence 4")).add(pherogramArea);
99
100 PherogramProvider pherogramProvider = new BioJavaPherogramProvider(ChromatogramFactory.create(
101 new File("/home/pplitzner/svn/LibrAlign/taxeditor/eu.etaxonomy.taxeditor.editor/src/main/resources/AlignmentTestData/JR430_JR-P01.ab1")));
102 PherogramArea pherogramArea = new PherogramArea(result.getContentArea(), pherogramProvider);
103 pherogramArea.setFirstSeqPos(1);
104 pherogramArea.setLeftCutPosition(13);
105 pherogramArea.setRightCutPosition(697);
106 pherogramArea.getAlignmentModel().setShiftChange(14, 1);
107 pherogramArea.getAlignmentModel().setShiftChange(35, 1);
108 result.getContentArea().getDataAreas().getSequenceAreas(sequenceProvider.sequenceIDByName("Read 1")).add(pherogramArea);
109
110 pherogramProvider = new ReverseComplementPherogramProvider(new BioJavaPherogramProvider(ChromatogramFactory.create(
111 new File("/home/pplitzner/svn/LibrAlign/taxeditor/eu.etaxonomy.taxeditor.editor/src/main/resources/AlignmentTestData/JR444_JR-P05.ab1"))));
112 pherogramArea = new PherogramArea(result.getContentArea(), pherogramProvider);
113 pherogramArea.setFirstSeqPos(1);
114 pherogramArea.setLeftCutPosition(267);
115 pherogramArea.getAlignmentModel().setShiftChange(273, -1);
116 pherogramArea.setVerticalScale(20 * pherogramArea.getVerticalScale());
117 result.getContentArea().getDataAreas().getSequenceAreas(sequenceProvider.sequenceIDByName("Read 2")).add(pherogramArea);
118
119
120 result.getContentArea().getDataAreas().getBottomAreas().add(new ConsensusSequenceArea(result.getContentArea()));
121 return result;
122 }
123 catch (Exception e) {
124 throw new RuntimeException(e);
125 }
126
127 // Alignment<DNASequence, NucleotideCompound> alignment =
128 // new SimpleAlignment<DNASequence, NucleotideCompound>();
129 // alignment.add("Sequence 1", new DNASequence("ATCGTAGATCGTAGATCGTAGATCGTAGATCGTAGATCGTAGATCGTAG"));
130 // alignment.add("Sequence 2", new DNASequence("AT-GTTG"));
131 // alignment.add("Sequence 3", new DNASequence("AT-GTAG"));
132 //
133 // BioJavaSequenceDataProvider<DNASequence, NucleotideCompound> sequenceProvider =
134 // new BioJavaSequenceDataProvider<DNASequence, NucleotideCompound>(
135 // new BioJavaTokenSet<NucleotideCompound>(
136 // AlignmentAmbiguityNucleotideCompoundSet.getAlignmentAmbiguityNucleotideCompoundSet()),
137 // alignment);
138 //
139 // AlignmentArea result = new AlignmentArea();
140 // result.setSequenceProvider(sequenceProvider, false);
141 // SequenceIndexArea sequenceIndexArea = new SequenceIndexArea(result);
142 // //sequenceIndexArea.setFirstIndex(5);
143 // //sequenceIndexArea.setHeight(25);
144 // result.getDataAreas().getTopAreas().add(sequenceIndexArea);
145 // result.getDataAreas().getBottomAreas().add(new ConsensusSequenceArea(result));
146 // return result;
147 }
148
149
150 /* (non-Javadoc)
151 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
152 */
153 @Override
154 public void createPartControl(Composite parent) {
155 alignmentArea = createAlignmentArea();
156 Composite alignmentWidget = alignmentArea.createSWTWidget(parent, SWT.NONE);
157 //getSite().setSelectionProvider(provider)
158 }
159
160
161 /* (non-Javadoc)
162 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
163 */
164 @Override
165 public void doSave(IProgressMonitor monitor) {
166 // TODO Auto-generated method stub
167
168 }
169
170
171 /* (non-Javadoc)
172 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
173 */
174 @Override
175 public void doSaveAs() {
176 // TODO Auto-generated method stub
177
178 }
179
180
181 /* (non-Javadoc)
182 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
183 */
184 @Override
185 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
186 setSite(site);
187 setInput(input);
188 }
189
190
191 /* (non-Javadoc)
192 * @see org.eclipse.ui.part.EditorPart#isDirty()
193 */
194 @Override
195 public boolean isDirty() {
196 // TODO Auto-generated method stub
197 return false;
198 }
199
200
201 /* (non-Javadoc)
202 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
203 */
204 @Override
205 public boolean isSaveAsAllowed() {
206 // TODO Auto-generated method stub
207 return false;
208 }
209
210
211 /* (non-Javadoc)
212 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
213 */
214 @Override
215 public void setFocus() {
216 //alignmentArea.getToolkitComponent().redistributeHeight();
217 }
218 }