Project

General

Profile

Download (11.1 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(1-1/4)