3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.editor
.molecular
;
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
;
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
;
42 * Editor component to edit a contig alignment used to combine different overlapping pherograms from Sanger sequencing to
43 * a consensus sequence.
45 * The contained GUI components used to edit the alignment come from <a href="http://bioinfweb.info/LibrAlign/">LibrAlign</a>.
51 public class AlignmentEditor
extends EditorPart
{
52 public static final String ID
= "eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor";
54 private AlignmentArea alignmentArea
;
57 private AlignmentArea
createAlignmentArea() {
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.
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"));
72 // StringBuffer seqBuffer = new StringBuffer(pherogramProvider.getSequenceLength());
73 // for (int i = 1; i <= pherogramProvider.getSequenceLength(); i++) {
74 // seqBuffer.append(pherogramProvider.getBaseCall(i).getUpperedBase());
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.
79 BioJavaSequenceDataProvider
<DNASequence
, NucleotideCompound
> sequenceProvider
=
80 new BioJavaSequenceDataProvider
<DNASequence
, NucleotideCompound
>(
81 new BioJavaTokenSet
<NucleotideCompound
>(
82 AlignmentAmbiguityNucleotideCompoundSet
.getAlignmentAmbiguityNucleotideCompoundSet()),
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
);
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);
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
);
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
);
120 result
.getContentArea().getDataAreas().getBottomAreas().add(new ConsensusSequenceArea(result
.getContentArea()));
123 catch (Exception e
) {
124 throw new RuntimeException(e
);
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"));
133 // BioJavaSequenceDataProvider<DNASequence, NucleotideCompound> sequenceProvider =
134 // new BioJavaSequenceDataProvider<DNASequence, NucleotideCompound>(
135 // new BioJavaTokenSet<NucleotideCompound>(
136 // AlignmentAmbiguityNucleotideCompoundSet.getAlignmentAmbiguityNucleotideCompoundSet()),
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));
151 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
154 public void createPartControl(Composite parent
) {
155 alignmentArea
= createAlignmentArea();
156 Composite alignmentWidget
= alignmentArea
.createSWTWidget(parent
, SWT
.NONE
);
157 //getSite().setSelectionProvider(provider)
162 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
165 public void doSave(IProgressMonitor monitor
) {
166 // TODO Auto-generated method stub
172 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
175 public void doSaveAs() {
176 // TODO Auto-generated method stub
182 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
185 public void init(IEditorSite site
, IEditorInput input
) throws PartInitException
{
192 * @see org.eclipse.ui.part.EditorPart#isDirty()
195 public boolean isDirty() {
196 // TODO Auto-generated method stub
202 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
205 public boolean isSaveAsAllowed() {
206 // TODO Auto-generated method stub
212 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
215 public void setFocus() {
216 //alignmentArea.getToolkitComponent().redistributeHeight();