Element unitExtension = (Element) unitExtensions.item(i);
NodeList ggbn = unitExtension.getElementsByTagName("ggbn:GGBN");
if(ggbn.getLength()>0){
- AbcdGgbnParser ggbnParser = new AbcdGgbnParser();
- DnaSample dnaSample = ggbnParser.parse(ggbn);
+ AbcdGgbnParser ggbnParser = new AbcdGgbnParser(report, cdmAppController);
+ DnaSample dnaSample = ggbnParser.parse(ggbn, state);
save(dnaSample, state);
String specimenUnitID = null;
SpecimenOrObservationBase<?> parentSpecimen = parent;
*/
package eu.etaxonomy.cdm.io.specimen.abcd206.in.ggbn;
+import java.net.URI;
+import java.util.List;
+
import org.apache.log4j.Logger;
import org.joda.time.DateTime;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportReport;
+import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportState;
+import eu.etaxonomy.cdm.model.common.DefinedTerm;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.media.Media;
+import eu.etaxonomy.cdm.model.molecular.Amplification;
+import eu.etaxonomy.cdm.model.molecular.AmplificationResult;
import eu.etaxonomy.cdm.model.molecular.DnaQuality;
import eu.etaxonomy.cdm.model.molecular.DnaSample;
+import eu.etaxonomy.cdm.model.molecular.Sequence;
+import eu.etaxonomy.cdm.model.molecular.SequenceString;
+import eu.etaxonomy.cdm.persistence.query.MatchMode;
/**
* @author pplitzner
private final String prefix = "ggbn:";
- /**
- * @param ggbn
- * @return
- */
- public DnaSample parse(NodeList ggbn) {
+ private final Abcd206ImportReport report;
+
+ private final ICdmApplicationConfiguration cdmAppController;
+
+ public AbcdGgbnParser(Abcd206ImportReport report, ICdmApplicationConfiguration cdmAppController) {
+ this.report = report;
+ this.cdmAppController = cdmAppController;
+ }
+
+ public DnaSample parse(NodeList ggbn, Abcd206ImportState state) {
DnaSample dnaSample = DnaSample.NewInstance();
for(int i=0;i<ggbn.getLength();i++){
NodeList gelImageList = element.getElementsByTagName(prefix+"gelImage");
NodeList amplificationsList = element.getElementsByTagName(prefix+"Amplifications");
- parseDnaQuality(element);
+// dnaSample.setDnaQuality(parseDnaQuality(element, state));
- parseGelImage(gelImageList);
- parseAmplifications(amplificationsList);
+ parseGelImage(gelImageList, state);
+ parseAmplifications(amplificationsList, dnaSample, state);
}
}
return dnaSample;
}
- /**
- * @param element
- */
- private void parseDnaQuality(Element element) {
+ private DnaQuality parseDnaQuality(Element element, Abcd206ImportState state) {
DnaQuality dnaQuality = DnaQuality.NewInstance();
NodeList purificationMethodList = element.getElementsByTagName(prefix+"purificationMethod");
// dnaQuality.setQualityTerm(qualityTerm)
+ return dnaQuality;
}
- /**
- * @param gelImageList
- */
- private void parseGelImage(NodeList gelImageList) {
+ private void parseGelImage(NodeList gelImageList, Abcd206ImportState state) {
if(gelImageList.item(0)!=null && gelImageList.item(0) instanceof Element){
Element gelImage = (Element)gelImageList.item(0);
NodeList fileURIList = gelImage.getElementsByTagName("fileURI");
}
- /**
- * @param amplificationsList
- */
- private void parseAmplifications(NodeList amplificationsList) {
+ private void parseAmplifications(NodeList amplificationsList, DnaSample dnaSample, Abcd206ImportState state) {
if(amplificationsList.item(0)!=null && amplificationsList.item(0) instanceof Element){
+ AmplificationResult amplificationResult = AmplificationResult.NewInstance();
+ Amplification amplification = Amplification.NewInstance();
NodeList amplificationList = ((Element) amplificationsList.item(0)).getElementsByTagName(prefix+"amplification");
for(int i=0;i<amplificationList.getLength();i++){
if(amplificationList.item(i) instanceof Element){
- Element amplification = (Element)amplificationList.item(i);
- NodeList amplificationDateList = amplification.getElementsByTagName(prefix+"amplificationDate");
- NodeList amplificationStaffList = amplification.getElementsByTagName(prefix+"amplificationStaff");
- NodeList markerList = amplification.getElementsByTagName(prefix+"marker");
- NodeList markerSubfragmentList = amplification.getElementsByTagName(prefix+"markerSubfragment");
- NodeList amplificationSuccessList = amplification.getElementsByTagName(prefix+"amplificationSuccess");
- NodeList amplificationSuccessDetailsList = amplification.getElementsByTagName(prefix+"amplificationSuccessDetails");
- NodeList amplificationMethodList = amplification.getElementsByTagName(prefix+"amplificationMethod");
- NodeList purificationMethodList = amplification.getElementsByTagName(prefix+"purificationMethod");
- NodeList libReadsSeqdList = amplification.getElementsByTagName(prefix+"lib_reads_seqd");
- NodeList libScreenList = amplification.getElementsByTagName(prefix+"lib_screen");
- NodeList libVectorList = amplification.getElementsByTagName(prefix+"lib_vector");
- NodeList libConstMethList = amplification.getElementsByTagName(prefix+"lib_const_meth");
- NodeList plasmidList = amplification.getElementsByTagName(prefix+"plasmid");
-
- parseAmplificationSequencing(amplification.getElementsByTagName(prefix+"Sequencings"));
- parseAmplificationPrimers(amplification.getElementsByTagName(prefix+"AmplificationPrimers"));
+ Element amplificationElement = (Element)amplificationList.item(i);
+ NodeList amplificationDateList = amplificationElement.getElementsByTagName(prefix+"amplificationDate");
+ NodeList amplificationStaffList = amplificationElement.getElementsByTagName(prefix+"amplificationStaff");
+
+ NodeList markerList = amplificationElement.getElementsByTagName(prefix+"marker");
+ if(markerList.item(0)!=null){
+ String amplificationMarker = markerList.item(0).getTextContent();
+ DefinedTerm dnaMarker = null;
+ List<DefinedTermBase> markersFound = cdmAppController.getTermService().findByTitle(DefinedTerm.class, amplificationMarker, MatchMode.EXACT, null, null, null, null, null).getRecords();
+ if(markersFound.size()==1){
+ dnaMarker = (DefinedTerm) markersFound.get(0);
+ }
+ else{
+ dnaMarker = DefinedTerm.NewDnaMarkerInstance(amplificationMarker, amplificationMarker, amplificationMarker);
+ cdmAppController.getTermService().saveOrUpdate(dnaMarker);
+ }
+ amplification.setDnaMarker(dnaMarker);
+ }
+
+ NodeList markerSubfragmentList = amplificationElement.getElementsByTagName(prefix+"markerSubfragment");
+ NodeList amplificationSuccessList = amplificationElement.getElementsByTagName(prefix+"amplificationSuccess");
+ NodeList amplificationSuccessDetailsList = amplificationElement.getElementsByTagName(prefix+"amplificationSuccessDetails");
+ NodeList amplificationMethodList = amplificationElement.getElementsByTagName(prefix+"amplificationMethod");
+ NodeList purificationMethodList = amplificationElement.getElementsByTagName(prefix+"purificationMethod");
+ NodeList libReadsSeqdList = amplificationElement.getElementsByTagName(prefix+"lib_reads_seqd");
+ NodeList libScreenList = amplificationElement.getElementsByTagName(prefix+"lib_screen");
+ NodeList libVectorList = amplificationElement.getElementsByTagName(prefix+"lib_vector");
+ NodeList libConstMethList = amplificationElement.getElementsByTagName(prefix+"lib_const_meth");
+ NodeList plasmidList = amplificationElement.getElementsByTagName(prefix+"plasmid");
+
+ NodeList sequencingsList = amplificationElement.getElementsByTagName(prefix+"Sequencings");
+ if(sequencingsList.item(0)!=null && sequencingsList.item(0) instanceof Element){
+ parseAmplificationSequencings((Element)sequencingsList.item(0), dnaSample, state);
+ }
+ parseAmplificationPrimers(amplificationElement.getElementsByTagName(prefix+"AmplificationPrimers"));
}
}
+ amplificationResult.setAmplification(amplification);
+ dnaSample.addAmplificationResult(amplificationResult);
}
}
- /**
- * @param elementsByTagName
- */
private void parseAmplificationPrimers(NodeList elementsByTagName) {
// TODO Auto-generated method stub
}
- /**
- * @param nodeList
- *
- */
- private void parseAmplificationSequencing(NodeList nodeList) {
- // TODO Auto-generated method stub
+ private void parseAmplificationSequencings(Element sequencings, DnaSample dnaSample, Abcd206ImportState state) {
+ NodeList sequencingList = sequencings.getElementsByTagName(prefix+"sequencing");
+ for(int i=0;i<sequencingList.getLength();i++){
+ Sequence sequence = Sequence.NewInstance("");
+ dnaSample.addSequence(sequence);
+ if(sequencingList.item(i) instanceof Element){
+ Element sequencing = (Element)sequencingList.item(i);
+ //Consensus sequence
+ NodeList consensusSequencesList = sequencing.getElementsByTagName(prefix+"consensusSequence");
+ if(consensusSequencesList.item(0)!=null){
+ String sequenceString = consensusSequencesList.item(0).getTextContent();
+ sequenceString = sequenceString.replaceAll("\n", "");
+ sequenceString = sequenceString.replaceAll("( )+", " ");
+ sequence.setConsensusSequence(SequenceString.NewInstance(sequenceString));
+ }
+ //sequence length
+ NodeList consensusSequencesLengthList = sequencing.getElementsByTagName(prefix+"consensusSequenceLength");
+ if(sequence.getConsensusSequence()!=null){
+ sequence.getConsensusSequence().setLength(parseFirstNodeDouble(consensusSequencesLengthList).intValue());
+ }
+ //contig file URL
+ NodeList consensusSequenceChromatogramFileURIList = sequencing.getElementsByTagName(prefix+"consensusSequenceChromatogramFileURI");
+ URI uri = parseFirstUri(consensusSequenceChromatogramFileURIList);
+ Media contigFile = Media.NewInstance(uri, null, null, null);
+ sequence.setContigFile(contigFile);
+ }
+ }
+// if(nodeList.item(0)!=null && nodeList.item(0) instanceof Element){
+// NodeList plasmidList = amplificationElement.getElementsByTagName(prefix+"plasmid");
+
+ }
+
+ private URI parseFirstUri(NodeList nodeList){
+ URI uri = null;
+ if(nodeList.item(0)!=null){
+ String textContent = nodeList.item(0).getTextContent();
+ if(textContent!=null){
+ try {
+ uri = URI.create(textContent);
+ } catch (IllegalArgumentException e) {
+ //nothing
+ }
+ }
+ }
+ return uri;
+ }
+
+ private String parseFirstTextContent(NodeList nodeList){
+ String string = null;
+ if(nodeList.getLength()>0){
+ string = nodeList.item(0).getTextContent();
+ }
+ return string;
}
private Double parseFirstNodeDouble(NodeList nodeList){
import static org.junit.Assert.assertTrue;\r
\r
import java.io.FileNotFoundException;\r
+import java.net.URI;\r
import java.net.URISyntaxException;\r
import java.net.URL;\r
import java.util.List;\r
+import java.util.Set;\r
import java.util.UUID;\r
\r
import org.junit.Assert;\r
\r
import eu.etaxonomy.cdm.api.service.IOccurrenceService;\r
import eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultImport;\r
+import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
+import eu.etaxonomy.cdm.model.media.MediaUtils;\r
+import eu.etaxonomy.cdm.model.molecular.Amplification;\r
+import eu.etaxonomy.cdm.model.molecular.AmplificationResult;\r
import eu.etaxonomy.cdm.model.molecular.DnaSample;\r
+import eu.etaxonomy.cdm.model.molecular.Sequence;\r
+import eu.etaxonomy.cdm.model.molecular.SequenceString;\r
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;\r
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;\r
assertEquals("Number of dna samples is incorrect", 1, occurrenceService.count(DnaSample.class));\r
DnaSample dnaSample = occurrenceService.list(DnaSample.class, null, null, null, null).get(0);\r
assertEquals("Wrong derivation type!", DerivationEventType.DNA_EXTRACTION(), dnaSample.getDerivedFrom().getType());\r
-\r
assertEquals("Wrong number of originals", 1, dnaSample.getDerivedFrom().getOriginals().size());\r
+\r
+ //dna quality\r
+// DnaQuality dnaQuality = dnaSample.getDnaQuality();\r
+// assertNotNull("Dna quality is null", dnaQuality!=null);\r
+// assertEquals(new Double("0,77"),dnaQuality.getRatioOfAbsorbance260_230());\r
+// assertEquals(new Double("1,38"),dnaQuality.getRatioOfAbsorbance260_280());\r
+\r
+ //amplifications\r
+ Set<AmplificationResult> amplificationResults = dnaSample.getAmplificationResults();\r
+ assertNotNull(amplificationResults);\r
+ assertEquals(1, amplificationResults.size());\r
+ AmplificationResult amplificationResult = amplificationResults.iterator().next();\r
+ Amplification amplification = amplificationResult.getAmplification();\r
+ assertNotNull("Amplification is null", amplification);\r
+ DefinedTerm dnaMarker = amplification.getDnaMarker();\r
+ assertNotNull(dnaMarker);\r
+ assertEquals("ITS (ITS1, 5.8S rRNA, ITS2)", dnaMarker.getLabel());\r
+\r
+ //sequencing\r
+ Set<Sequence> sequences = dnaSample.getSequences();\r
+ assertNotNull(sequences);\r
+ assertEquals(1, sequences.size());\r
+ Sequence sequence = sequences.iterator().next();\r
+ SequenceString consensusSequence = sequence.getConsensusSequence();\r
+ assertNotNull(consensusSequence);\r
+// assertEquals(\r
+// "TTTCGGGTCC TTTATAGTGA AGATATAGCA TAGATAGTTG TAATCCATTA" +\r
+// " TGTATCATTG GGGAAGGAAG GAGAATATTT TTTTGATAGA ATACAAGTAT" +\r
+// " GGATTATTGA AACTAATACG CCATGTATTT GGATATTTCC CTTGAACTGC" +\r
+// " ATAATATTCT TTATTTTCCA TGAATAGTGT AAGGGAATTT TTCGAAGAGA" +\r
+// " AAATGGATTA TGGGAGTGTG TGACTTGAGC TATTGATTGG TCTGTGCAGA" +\r
+// " TACGGGCTTT TATCTATCTG CCACATTGTA ATTCACAAAC CAATGTGTCT" +\r
+// " TTGTTCCAAC CATCGCGTAA GCCCCATACA GAAGATAGGC TGGTTCGCTT" +\r
+// " GAAGAGAATC TTTTCTATGA TCAGATCCGA ATTATGTCGT ACATGAGCAG" +\r
+// " GCTCCGTAAG ATCTAGTTGA CTTAAGTCAA ACTTCAATAG TATAAAAATG" +\r
+// " CACTCATTTC CTCTGCATTG ACACGAGCTA TGAGACTATC GGAGTGAAAG" +\r
+// " AAAGGGTCTA AAGAAGAAGA AAGCTTGGGC TAGATTAGTA ACAAGTAAAT" +\r
+// " CCTTTGTGTG TGTGTTTGTA ATTAGTAAAT GGGCTCTCAA TATTTTGGGG" +\r
+// " CTAATTACTG ATCCTAAGGT TTGAGACGAC CCAGAAAGCA CTTGATCATA" +\r
+// " TCACGATTGA CTTTGTAAGC CTACTTGGGT ATTGAGTATT TACTTGTAAG" +\r
+// " AACCGAATTC TTTGGGGGAT AGTTGCAAAA AGAATCCAGT CAATTGTTCT" +\r
+// " TACGTAAAAC CATTCATATC TCGTATATGG ATATGTCTAG ATAGGCTATC" +\r
+// " GATTTTCGAT GGATTCGTTT GGTTCTTTTG ATTATTGCTC GAGCTGGATG" +\r
+// " ATGAAAAATT ATCATGTCCG GTTCCTTCG",consensusSequence.getString());\r
+// assertEquals((Integer)912, consensusSequence.getLength());\r
+ assertNotNull(sequence.getContigFile());\r
+ assertEquals(URI.create("http://ww2.biocase.org/websvn/filedetails.php?repname=campanula&path=%2FCAM385_Campa_drabifolia.pde"), MediaUtils.getFirstMediaRepresentationPart(sequence.getContigFile()).getUri());\r
+\r
}\r
\r
@Test\r
<ggbn:marker>ITS (ITS1, 5.8S rRNA, ITS2)</ggbn:marker>\r
<ggbn:Sequencings>\r
<ggbn:sequencing>\r
-<!-- <ggbn:SingleSequencings> -->\r
-<!-- <ggbn:singleSequencing> -->\r
-<!-- <ggbn:sequencingDirection>forward</ggbn:sequencingDirection> -->\r
-<!-- <ggbn:chromatogramFileURI>http://ww2.biocase.org/websvn/filedetails.php?repname=campanula&path=%2FCAM385_GM312-petD_F.ab1</ggbn:chromatogramFileURI> -->\r
-<!-- <ggbn:SequencingPrimers> -->\r
-<!-- <ggbn:sequencingPrimer> -->\r
-<!-- <ggbn:primerSequence -->\r
-<!-- Direction="forward">5´-GCCGTMTTTATGTTAATGC-3´</ggbn:primerSequence> -->\r
-<!-- <ggbn:primerName>PIpetB1411F</ggbn:primerName> -->\r
-<!-- <ggbn:primerReferenceCitation>Löhne & -->\r
-<!-- Borsch 2005</ggbn:primerReferenceCitation> -->\r
-<!-- </ggbn:sequencingPrimer> -->\r
-<!-- </ggbn:SequencingPrimers> -->\r
-<!-- </ggbn:singleSequencing> -->\r
-<!-- <ggbn:singleSequencing> -->\r
-<!-- <ggbn:sequencingDirection>reverse</ggbn:sequencingDirection> -->\r
-<!-- <ggbn:chromatogramFileURI>http://ww2.biocase.org/websvn/filedetails.php?repname=campanula&path=%2FCAM385_GM312-petD_R.ab1</ggbn:chromatogramFileURI> -->\r
-<!-- <ggbn:SequencingPrimers> -->\r
-<!-- <ggbn:sequencingPrimer> -->\r
-<!-- <ggbn:primerSequence -->\r
-<!-- Direction="reverse">5´-AATTTAGCYCTTAATACAGG-3´</ggbn:primerSequence> -->\r
-<!-- <ggbn:primerName>PIpetD738R</ggbn:primerName> -->\r
-<!-- <ggbn:primerReferenceCitation>Löhne & -->\r
-<!-- Borsch 2005</ggbn:primerReferenceCitation> -->\r
-<!-- </ggbn:sequencingPrimer> -->\r
-<!-- </ggbn:SequencingPrimers> -->\r
-<!-- </ggbn:singleSequencing> -->\r
-<!-- </ggbn:SingleSequencings> -->\r
-<!-- <ggbn:consensusSequence>TTTCGGGTCC TTTATAGTGA -->\r
-<!-- AGATATAGCA TAGATAGTTG -->\r
-<!-- TAATCCATTA -->\r
-<!-- TGTATCATTG GGGAAGGAAG GAGAATATTT TTTTGATAGA ATACAAGTAT -->\r
-<!-- GGATTATTGA AACTAATACG CCATGTATTT GGATATTTCC CTTGAACTGC -->\r
-<!-- ATAATATTCT TTATTTTCCA TGAATAGTGT AAGGGAATTT TTCGAAGAGA -->\r
-<!-- AAATGGATTA TGGGAGTGTG TGACTTGAGC TATTGATTGG TCTGTGCAGA -->\r
-<!-- TACGGGCTTT TATCTATCTG CCACATTGTA ATTCACAAAC CAATGTGTCT -->\r
-<!-- TTGTTCCAAC CATCGCGTAA GCCCCATACA GAAGATAGGC TGGTTCGCTT -->\r
-<!-- GAAGAGAATC TTTTCTATGA TCAGATCCGA ATTATGTCGT ACATGAGCAG -->\r
-<!-- GCTCCGTAAG ATCTAGTTGA CTTAAGTCAA ACTTCAATAG TATAAAAATG -->\r
-<!-- CACTCATTTC CTCTGCATTG ACACGAGCTA TGAGACTATC GGAGTGAAAG -->\r
-<!-- AAAGGGTCTA AAGAAGAAGA AAGCTTGGGC TAGATTAGTA ACAAGTAAAT -->\r
-<!-- CCTTTGTGTG TGTGTTTGTA ATTAGTAAAT GGGCTCTCAA TATTTTGGGG -->\r
-<!-- CTAATTACTG ATCCTAAGGT TTGAGACGAC CCAGAAAGCA CTTGATCATA -->\r
-<!-- TCACGATTGA CTTTGTAAGC CTACTTGGGT ATTGAGTATT TACTTGTAAG -->\r
-<!-- AACCGAATTC TTTGGGGGAT AGTTGCAAAA AGAATCCAGT CAATTGTTCT -->\r
-<!-- TACGTAAAAC CATTCATATC TCGTATATGG ATATGTCTAG ATAGGCTATC -->\r
-<!-- GATTTTCGAT GGATTCGTTT GGTTCTTTTG ATTATTGCTC GAGCTGGATG -->\r
-<!-- ATGAAAAATT ATCATGTCCG GTTCCTTCG</ggbn:consensusSequence> -->\r
-<!-- <ggbn:consensusSequenceLength>912</ggbn:consensusSequenceLength> -->\r
-<!-- <ggbn:consensusSequenceChromatogramFileURI>http://ww2.biocase.org/websvn/filedetails.php?repname=campanula&path=%2FCAM385_Campa_drabifolia.pde</ggbn:consensusSequenceChromatogramFileURI> -->\r
-<!-- <ggbn:geneticAccession> -->\r
-<!-- <ggbn:geneticAccessionNumber>AJ746397</ggbn:geneticAccessionNumber> -->\r
-<!-- <ggbn:geneticAccessionNumberURI>http://www.ncbi.nlm.nih.gov/nuccore/56310613</ggbn:geneticAccessionNumberURI> -->\r
-<!-- </ggbn:geneticAccession> -->\r
-<!-- <ggbn:References> -->\r
-<!-- <ggbn:Reference> -->\r
-<!-- <ggbn:ReferenceCitation>Gemeinholzer,B., -->\r
-<!-- Bachmann,K. (2005): Examining morphological -->\r
-<!-- and molecular diagnostic character states in -->\r
-<!-- Cichorium intybus L. (Asteraceae) and -->\r
-<!-- Cichorium spinosum L. Plant Systematics and -->\r
-<!-- Evolution 253 (1-3): 105-123.</ggbn:ReferenceCitation> -->\r
-<!-- </ggbn:Reference> -->\r
-<!-- </ggbn:References> -->\r
+ <ggbn:SingleSequencings>\r
+ <ggbn:singleSequencing>\r
+ <ggbn:sequencingDirection>forward</ggbn:sequencingDirection>\r
+ <ggbn:chromatogramFileURI>http://ww2.biocase.org/websvn/filedetails.php?repname=campanula&path=%2FCAM385_GM312-petD_F.ab1</ggbn:chromatogramFileURI>\r
+ <ggbn:SequencingPrimers>\r
+ <ggbn:sequencingPrimer>\r
+ <ggbn:primerSequence\r
+ Direction="forward">5´-GCCGTMTTTATGTTAATGC-3´</ggbn:primerSequence>\r
+ <ggbn:primerName>PIpetB1411F</ggbn:primerName>\r
+ <ggbn:primerReferenceCitation>Löhne &\r
+ Borsch 2005</ggbn:primerReferenceCitation>\r
+ </ggbn:sequencingPrimer>\r
+ </ggbn:SequencingPrimers>\r
+ </ggbn:singleSequencing>\r
+ <ggbn:singleSequencing>\r
+ <ggbn:sequencingDirection>reverse</ggbn:sequencingDirection>\r
+ <ggbn:chromatogramFileURI>http://ww2.biocase.org/websvn/filedetails.php?repname=campanula&path=%2FCAM385_GM312-petD_R.ab1</ggbn:chromatogramFileURI>\r
+ <ggbn:SequencingPrimers>\r
+ <ggbn:sequencingPrimer>\r
+ <ggbn:primerSequence\r
+ Direction="reverse">5´-AATTTAGCYCTTAATACAGG-3´</ggbn:primerSequence>\r
+ <ggbn:primerName>PIpetD738R</ggbn:primerName>\r
+ <ggbn:primerReferenceCitation>Löhne &\r
+ Borsch 2005</ggbn:primerReferenceCitation>\r
+ </ggbn:sequencingPrimer>\r
+ </ggbn:SequencingPrimers>\r
+ </ggbn:singleSequencing>\r
+ </ggbn:SingleSequencings>\r
+ <ggbn:consensusSequence>\r
+ TTTCGGGTCC TTTATAGTGA AGATATAGCA TAGATAGTTG\r
+ TAATCCATTA TGTATCATTG GGGAAGGAAG GAGAATATTT\r
+ TTTTGATAGA ATACAAGTAT GGATTATTGA AACTAATACG\r
+ CCATGTATTT GGATATTTCC CTTGAACTGC ATAATATTCT\r
+ TTATTTTCCA TGAATAGTGT AAGGGAATTT TTCGAAGAGA\r
+ AAATGGATTA TGGGAGTGTG TGACTTGAGC TATTGATTGG\r
+ TCTGTGCAGA TACGGGCTTT TATCTATCTG CCACATTGTA\r
+ ATTCACAAAC CAATGTGTCT TTGTTCCAAC CATCGCGTAA\r
+ GCCCCATACA GAAGATAGGC TGGTTCGCTT GAAGAGAATC\r
+ TTTTCTATGA TCAGATCCGA ATTATGTCGT ACATGAGCAG\r
+ GCTCCGTAAG ATCTAGTTGA CTTAAGTCAA ACTTCAATAG\r
+ TATAAAAATG CACTCATTTC CTCTGCATTG ACACGAGCTA\r
+ TGAGACTATC GGAGTGAAAG AAAGGGTCTA AAGAAGAAGA\r
+ AAGCTTGGGC TAGATTAGTA ACAAGTAAAT CCTTTGTGTG\r
+ TGTGTTTGTA ATTAGTAAAT GGGCTCTCAA TATTTTGGGG\r
+ CTAATTACTG ATCCTAAGGT TTGAGACGAC CCAGAAAGCA\r
+ CTTGATCATA TCACGATTGA CTTTGTAAGC CTACTTGGGT\r
+ ATTGAGTATT TACTTGTAAG AACCGAATTC TTTGGGGGAT\r
+ AGTTGCAAAA AGAATCCAGT CAATTGTTCT TACGTAAAAC\r
+ CATTCATATC TCGTATATGG ATATGTCTAG ATAGGCTATC\r
+ GATTTTCGAT GGATTCGTTT GGTTCTTTTG ATTATTGCTC\r
+ GAGCTGGATG ATGAAAAATT ATCATGTCCG GTTCCTTCG</ggbn:consensusSequence>\r
+ <ggbn:consensusSequenceLength>912</ggbn:consensusSequenceLength>\r
+ <ggbn:consensusSequenceChromatogramFileURI>http://ww2.biocase.org/websvn/filedetails.php?repname=campanula&path=%2FCAM385_Campa_drabifolia.pde</ggbn:consensusSequenceChromatogramFileURI>\r
+ <ggbn:geneticAccession>\r
+ <ggbn:geneticAccessionNumber>AJ746397</ggbn:geneticAccessionNumber>\r
+ <ggbn:geneticAccessionNumberURI>http://www.ncbi.nlm.nih.gov/nuccore/56310613</ggbn:geneticAccessionNumberURI>\r
+ </ggbn:geneticAccession>\r
+ <ggbn:References>\r
+ <ggbn:Reference>\r
+ <ggbn:ReferenceCitation>Gemeinholzer,B.,\r
+ Bachmann,K. (2005): Examining morphological\r
+ and molecular diagnostic character states in\r
+ Cichorium intybus L. (Asteraceae) and\r
+ Cichorium spinosum L. Plant Systematics and\r
+ Evolution 253 (1-3): 105-123.</ggbn:ReferenceCitation>\r
+ </ggbn:Reference>\r
+ </ggbn:References>\r
</ggbn:sequencing>\r
</ggbn:Sequencings>\r
</ggbn:amplification>\r